/// import { atom, type createStore } from 'jotai' import { injectAllState, takeAllStateSnapshot } from './prototypeReactState' import { collectAllRoutePaths } from './routesAnalysis' import { globalNavigation } from './globalNavigation' import { setAuthStateChangedHandler$ } from './globalAuth' import { RouteObject } from 'react-router-dom' type Store = ReturnType export const setupGlobalMethods$ = atom( null, (get, set, routes: RouteObject[], signal: AbortSignal) => { signal.addEventListener('abort', () => { globalThis.takeStateSnapshot = undefined globalThis.injectStateSnapshot = undefined globalThis.getAllRoutePaths = undefined globalThis.changeRoutePath = undefined globalThis.onRouteChange = undefined globalThis.onAuthStateChanged = undefined }) globalThis.takeStateSnapshot = async () => { const snapshot = await takeAllStateSnapshot() return snapshot } globalThis.injectStateSnapshot = (state: unknown) => { injectAllState(state) } globalThis.getAllRoutePaths = () => { return collectAllRoutePaths(routes) } globalThis.changeRoutePath = (path: string) => { const navigate = globalNavigation.navigate if (navigate) { navigate(path) } else { console.warn('globalNavigate not set up yet') } } globalThis.onRouteChange = ( callback: (pathname: string) => void, signal: AbortSignal ) => { globalNavigation.globalRouteChangeCallback = callback signal.addEventListener('abort', () => { globalNavigation.globalRouteChangeCallback = null }) } globalThis.onAuthStateChanged = (callback) => { set(setAuthStateChangedHandler$, callback) } } )