Files
med-notes/.pnpm-store/v10/files/45/2dd706dd32836d4ace7e1ead5a54d2f4b6152f8d3ef4cced8e4d9560538583953578c37a348b351aff302907dab71bf57b68e6d9304f8f6cd14f89ccd99ea4
2025-05-09 05:30:08 +02:00

81 lines
2.0 KiB
Plaintext

import { useMatch } from './useMatch'
import type {
StructuralSharingOption,
ValidateSelected,
} from './structuralSharing'
import type {
AnyRouter,
RegisteredRouter,
ResolveUseLoaderData,
StrictOrFrom,
UseLoaderDataResult,
} from '@tanstack/router-core'
export interface UseLoaderDataBaseOptions<
TRouter extends AnyRouter,
TFrom,
TStrict extends boolean,
TSelected,
TStructuralSharing,
> {
select?: (
match: ResolveUseLoaderData<TRouter, TFrom, TStrict>,
) => ValidateSelected<TRouter, TSelected, TStructuralSharing>
}
export type UseLoaderDataOptions<
TRouter extends AnyRouter,
TFrom extends string | undefined,
TStrict extends boolean,
TSelected,
TStructuralSharing,
> = StrictOrFrom<TRouter, TFrom, TStrict> &
UseLoaderDataBaseOptions<
TRouter,
TFrom,
TStrict,
TSelected,
TStructuralSharing
> &
StructuralSharingOption<TRouter, TSelected, TStructuralSharing>
export type UseLoaderDataRoute<out TId> = <
TRouter extends AnyRouter = RegisteredRouter,
TSelected = unknown,
TStructuralSharing extends boolean = boolean,
>(
opts?: UseLoaderDataBaseOptions<
TRouter,
TId,
true,
TSelected,
TStructuralSharing
> &
StructuralSharingOption<TRouter, TSelected, TStructuralSharing>,
) => UseLoaderDataResult<TRouter, TId, true, TSelected>
export function useLoaderData<
TRouter extends AnyRouter = RegisteredRouter,
const TFrom extends string | undefined = undefined,
TStrict extends boolean = true,
TSelected = unknown,
TStructuralSharing extends boolean = boolean,
>(
opts: UseLoaderDataOptions<
TRouter,
TFrom,
TStrict,
TSelected,
TStructuralSharing
>,
): UseLoaderDataResult<TRouter, TFrom, TStrict, TSelected> {
return useMatch({
from: opts.from!,
strict: opts.strict,
structuralSharing: opts.structuralSharing,
select: (s: any) => {
return opts.select ? opts.select(s.loaderData) : s.loaderData
},
} as any) as UseLoaderDataResult<TRouter, TFrom, TStrict, TSelected>
}