Tengo un componente de tema de página de destino en https://ejopa.discourse.group/
Funciona muy bien. Necesito que no se muestre para los usuarios que han iniciado sesión. Tengo este código, que establece la página de inicio en el inicializador:
export default apiInitializer((api) => {
const siteSettings = api.container.lookup("service:site-settings");
const topMenu = siteSettings.top_menu || ""; // proteger contra undefined
const globalDefaultHomepage = topMenu.split("|")[0].trim();
const currentUser = api.getCurrentUser();
if (currentUser && defaultHomepage() === "custom") {
setDefaultHomepage(globalDefaultHomepage);
}
api.renderInOutlet("custom-homepage", LandingPage);
});
Funciona muy bien, EXCEPTO la primera vez que inician sesión. Se les redirige a /custom – si hacen clic en el icono, van al lugar correcto, pero no en la primera carga.
Necesito hacer . . . algo . . . para redirigirlos a la página de inicio correcta cuando inician sesión.
Una IA sugirió algo como esto, que no parece funcionar
api.onAppEvent('application:after-login', afterLoginHandler);
¡EDITAR! Casi lo tengo, pero parpadea la página de destino después de iniciar sesión
import { apiInitializer } from "discourse/lib/api";
import { defaultHomepage, setDefaultHomepage } from "discourse/lib/utilities";
import LandingPage from "../components/landing-page";
export default apiInitializer((api) => {
const siteSettings = api.container.lookup("service:site-settings");
const topMenu = siteSettings.top_menu || ""; // proteger contra undefined
const globalDefaultHomepage = topMenu.split("|")[0].trim();
const currentUser = api.getCurrentUser();
api.onPageChange((url) => {
const isCustom = url === "/custom";
const router = api.container.lookup("service:router");
const currentUser = api.container.lookup("service:current-user");
if (currentUser && isCustom) {
router.transitionTo("discovery." + defaultHomepage());
}
});
if (currentUser && defaultHomepage() === "custom") {
setDefaultHomepage(globalDefaultHomepage);
}
api.renderInOutlet("custom-homepage", LandingPage);
});
Me temo que esto es lo mejor que puedo hacer. ¿Estoy equivocado?