Así que, después de casi romper mi computadora, he encontrado una solución temporal — probablemente no la ideal ![]()
Parece que al hacer clic en Responder dentro del Full App Embed, el compositor en realidad se abre correctamente en el DOM (#reply-control.open), pero por alguna razón permanece con display: none.
Lo confirmé en la consola del navegador: el compositor estaba presente, pero su valor de display calculado era “none”. Al ejecutar manualmente:
document.querySelector('#reply-control').style.setProperty('display', 'block', 'important');
el compositor apareció de inmediato y todo funcionó con normalidad.
Como solución temporal, agregar el siguiente JS al tema de Discourse soluciona el problema para mí:
import { apiInitializer } from "discourse/lib/api";
export default apiInitializer((api) => {
if (!document.body.classList.contains("embed-mode")) {
return;
}
const fixComposer = () => {
const composer = document.querySelector("#reply-control.open");
if (composer) {
composer.style.setProperty("display", "block", "important");
}
};
const observer = new MutationObserver(fixComposer);
observer.observe(document.body, {
childList: true,
subtree: true,
attributes: true,
attributeFilter: ["class"],
});
fixComposer();
});
Esto parece solucionarlo por completo, y he limitado la solución temporal al modo embed para que no afecte la interfaz normal de Discourse.
Obviamente, esto probablemente no sea la solución a largo plazo ideal, pero espero que ayude a identificar qué está causando que el compositor abierto permanezca con display: none en el Full App Embed.