@tanstack/solid-router
Version:
Modern and scalable routing for Solid applications
1 lines • 3.07 kB
Source Map (JSON)
{"version":3,"file":"useRouterState.cjs","names":["isServer","Solid","replaceEqualDeep","useRouter","AnyRouter","RegisteredRouter","RouterState","Accessor","UseRouterStateOptions","router","TRouter","select","state","TSelected","UseRouterStateResult","useRouterState","opts","contextRouter","warn","undefined","_isServer","stores","__store","get","selected","createMemo","prev","res"],"sources":["../../src/useRouterState.tsx"],"sourcesContent":["import { isServer } from '@tanstack/router-core/isServer'\nimport * as Solid from 'solid-js'\nimport { replaceEqualDeep } from '@tanstack/router-core'\nimport { useRouter } from './useRouter'\nimport type {\n AnyRouter,\n RegisteredRouter,\n RouterState,\n} from '@tanstack/router-core'\nimport type { Accessor } from 'solid-js'\n\nexport type UseRouterStateOptions<TRouter extends AnyRouter, TSelected> = {\n router?: TRouter\n select?: (state: RouterState<TRouter['routeTree']>) => TSelected\n}\n\nexport type UseRouterStateResult<\n TRouter extends AnyRouter,\n TSelected,\n> = unknown extends TSelected ? RouterState<TRouter['routeTree']> : TSelected\n\nexport function useRouterState<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseRouterStateOptions<TRouter, TSelected>,\n): Accessor<UseRouterStateResult<TRouter, TSelected>> {\n const contextRouter = useRouter<TRouter>({\n warn: opts?.router === undefined,\n })\n const router = opts?.router || contextRouter\n\n // During SSR we render exactly once and do not need reactivity.\n // Avoid subscribing to the store on the server since the server store\n // implementation does not provide subscribe() semantics.\n const _isServer = isServer ?? router.isServer\n if (_isServer) {\n const state = router.stores.__store.get() as RouterState<\n TRouter['routeTree']\n >\n const selected = (\n opts?.select ? opts.select(state) : state\n ) as UseRouterStateResult<TRouter, TSelected>\n return (() => selected) as Accessor<\n UseRouterStateResult<TRouter, TSelected>\n >\n }\n\n if (!opts?.select) {\n return (() => router.stores.__store.get()) as Accessor<\n UseRouterStateResult<TRouter, TSelected>\n >\n }\n\n const select = opts.select\n\n return Solid.createMemo((prev: TSelected | undefined) => {\n const res = select(router.stores.__store.get())\n if (prev === undefined) return res\n return replaceEqualDeep(prev, res)\n }) as Accessor<UseRouterStateResult<TRouter, TSelected>>\n}\n"],"mappings":";;;;;;;AAqBA,SAAgBe,eAIdC,MACoD;CACpD,MAAMC,gBAAgBd,kBAAAA,UAAmB,EACvCe,MAAMF,MAAMP,WAAWU,KAAAA,EACzB,CAAC;CACD,MAAMV,SAASO,MAAMP,UAAUQ;CAM/B,IADkBjB,+BAAAA,YAAYS,OAAOT,UACtB;EACb,MAAMY,QAAQH,OAAOY,OAAOC,QAAQC,IAAI;EAGxC,MAAMC,WACJR,MAAML,SAASK,KAAKL,OAAOC,KAAK,IAAIA;EAEtC,cAAcY;CAGhB;CAEA,IAAI,CAACR,MAAML,QACT,cAAcF,OAAOY,OAAOC,QAAQC,IAAI;CAK1C,MAAMZ,SAASK,KAAKL;CAEpB,OAAOV,SAAMwB,YAAYC,SAAgC;EACvD,MAAMC,MAAMhB,OAAOF,OAAOY,OAAOC,QAAQC,IAAI,CAAC;EAC9C,IAAIG,SAASP,KAAAA,GAAW,OAAOQ;EAC/B,QAAA,GAAA,sBAAA,kBAAwBD,MAAMC,GAAG;CACnC,CAAC;AACH"}