@tanstack/solid-router
Version:
Modern and scalable routing for Solid applications
1 lines • 1.72 kB
Source Map (JSON)
{"version":3,"file":"useLocation.cjs","names":[],"sources":["../../src/useLocation.tsx"],"sourcesContent":["import * 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 interface UseLocationBaseOptions<TRouter extends AnyRouter, TSelected> {\n select?: (state: RouterState<TRouter['routeTree']>['location']) => TSelected\n}\n\nexport type UseLocationResult<\n TRouter extends AnyRouter,\n TSelected,\n> = unknown extends TSelected\n ? RouterState<TRouter['routeTree']>['location']\n : TSelected\n\nexport function useLocation<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseLocationBaseOptions<TRouter, TSelected>,\n): Accessor<UseLocationResult<TRouter, TSelected>> {\n const router = useRouter<TRouter>()\n\n if (!opts?.select) {\n return (() => router.stores.location.get()) as Accessor<\n UseLocationResult<TRouter, TSelected>\n >\n }\n\n const select = opts.select\n\n return Solid.createMemo((prev: TSelected | undefined) => {\n const res = select(router.stores.location.get())\n if (prev === undefined) return res\n return replaceEqualDeep(prev, res)\n }) as Accessor<UseLocationResult<TRouter, TSelected>>\n}\n"],"mappings":";;;;;;AAqBA,SAAgB,YAId,MACiD;CACjD,MAAM,SAAS,kBAAA,UAAmB;CAElC,IAAI,CAAC,MAAM,QACT,cAAc,OAAO,OAAO,SAAS,IAAI;CAK3C,MAAM,SAAS,KAAK;CAEpB,OAAO,SAAM,YAAY,SAAgC;EACvD,MAAM,MAAM,OAAO,OAAO,OAAO,SAAS,IAAI,CAAC;EAC/C,IAAI,SAAS,KAAA,GAAW,OAAO;EAC/B,QAAA,GAAA,sBAAA,kBAAwB,MAAM,GAAG;CACnC,CAAC;AACH"}