J’ai un composant de thème de page de destination sur https://ejopa.discourse.group/
Cela fonctionne très bien. Je veux qu’il ne s’affiche pas pour les utilisateurs connectés. J’ai ce code, qui définit la page d’accueil dans l’initialiseur :
export default apiInitializer((api) => {
const siteSettings = api.container.lookup("service:site-settings");
const topMenu = siteSettings.top_menu || ""; // protection contre undefined
const globalDefaultHomepage = topMenu.split("|")[0].trim();
const currentUser = api.getCurrentUser();
if (currentUser && defaultHomepage() === "custom") {
setDefaultHomepage(globalDefaultHomepage);
}
api.renderInOutlet("custom-homepage", LandingPage);
});
Cela fonctionne très bien, SAUF la première fois qu’ils se connectent. Ils sont redirigés vers /custom – s’ils cliquent sur l’icône, ils vont au bon endroit, mais pas au premier chargement..
Je dois faire . . . quelque chose . . . pour les rediriger vers la bonne page d’accueil lorsqu’ils se connectent.
L’IA a suggéré quelque chose comme ceci, qui ne semble pas fonctionner
api.onAppEvent('application:after-login', afterLoginHandler);
EDIT ! Presque là, mais fait clignoter la page de destination après la connexion
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 || ""; // protection contre 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);
});
Je crains que ce soit le mieux que je puisse faire. Ai-je tort ?