med-notes/.pnpm-store/v10/files/04/1ca6321d9529d15fb7f4bc0b21829259c7b4651d8963e9f3f104d98ca83310f51c06c43d712c2a929c2165fe1c6eaa8e710e6cba32512f057c0f2a67306fbe
2025-05-09 05:30:08 +02:00

59 lines
1.7 KiB
Plaintext

import { useMatch } from './useMatch'
import type {
StructuralSharingOption,
ValidateSelected,
} from './structuralSharing'
import type {
AnyRouter,
RegisteredRouter,
ResolveUseLoaderDeps,
StrictOrFrom,
UseLoaderDepsResult,
} from '@tanstack/router-core'
export interface UseLoaderDepsBaseOptions<
TRouter extends AnyRouter,
TFrom,
TSelected,
TStructuralSharing,
> {
select?: (
deps: ResolveUseLoaderDeps<TRouter, TFrom>,
) => ValidateSelected<TRouter, TSelected, TStructuralSharing>
}
export type UseLoaderDepsOptions<
TRouter extends AnyRouter,
TFrom extends string | undefined,
TSelected,
TStructuralSharing,
> = StrictOrFrom<TRouter, TFrom> &
UseLoaderDepsBaseOptions<TRouter, TFrom, TSelected, TStructuralSharing> &
StructuralSharingOption<TRouter, TSelected, TStructuralSharing>
export type UseLoaderDepsRoute<out TId> = <
TRouter extends AnyRouter = RegisteredRouter,
TSelected = unknown,
TStructuralSharing extends boolean = boolean,
>(
opts?: UseLoaderDepsBaseOptions<TRouter, TId, TSelected, TStructuralSharing> &
StructuralSharingOption<TRouter, TSelected, false>,
) => UseLoaderDepsResult<TRouter, TId, TSelected>
export function useLoaderDeps<
TRouter extends AnyRouter = RegisteredRouter,
const TFrom extends string | undefined = undefined,
TSelected = unknown,
TStructuralSharing extends boolean = boolean,
>(
opts: UseLoaderDepsOptions<TRouter, TFrom, TSelected, TStructuralSharing>,
): UseLoaderDepsResult<TRouter, TFrom, TSelected> {
const { select, ...rest } = opts
return useMatch({
...rest,
select: (s) => {
return select ? select(s.loaderDeps) : s.loaderDeps
},
}) as UseLoaderDepsResult<TRouter, TFrom, TSelected>
}