import uniq from "@helpers/utils/uniq"; /* Common code for components Handles uniq, route, optional orbit interface, subscriptions manager for each component */ const setupComponentSubscriptions = ({ component, defaultRoute = false, ignoreRouter = false, }: { component: any; defaultRoute: boolean; ignoreRouter: boolean; }) => { if (!component.uniq) { component.uniq = uniq(); if (defaultRoute && !component.route && !ignoreRouter) { component.route = defaultRoute; } } component._subscriptions = new Set(); if (!ignoreRouter) { if (!component.route) { component.route = component.uniq; if (window.orbit) { component.route = window.orbit.getRoute(component.uniq); } } component.noRouter = true; let router = document.querySelector("solid-router"); while (router) { component.noRouter = false; component.currentRoute = router.currentRouteName; component.currentResource = window.sibRouter.currentResource; router = document.querySelector( `[data-view="${router.currentRouteName}"] solid-router` ); } component.navigationListener = () => { // component.currentRoute = e.detail?.route; // component.currentResource = window.sibRouter.currentResource; let router = document.querySelector("solid-router"); while (router) { component.noRouter = false; component.currentRoute = router.currentRouteName; component.currentResource = window.sibRouter.currentResource; router = document.querySelector( `[data-view="${router.currentRouteName}"] solid-router` ); } component.requestUpdate(); }; component._subscriptions.add(["navigate", component.navigationListener]); } component._subscribe = () => { component._unsubscribe(); for (const subscription of component._subscriptions) { document.addEventListener(subscription[0], subscription[1]); } }; component._unsubscribe = () => { for (const subscription of component._subscriptions) { document.removeEventListener(subscription[0], subscription[1]); } }; component._subscribe(); }; export default setupComponentSubscriptions;