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, ) => ValidateSelected } export type UseLoaderDepsOptions< TRouter extends AnyRouter, TFrom extends string | undefined, TSelected, TStructuralSharing, > = StrictOrFrom & UseLoaderDepsBaseOptions & StructuralSharingOption export type UseLoaderDepsRoute = < TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown, TStructuralSharing extends boolean = boolean, >( opts?: UseLoaderDepsBaseOptions & StructuralSharingOption, ) => UseLoaderDepsResult export function useLoaderDeps< TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string | undefined = undefined, TSelected = unknown, TStructuralSharing extends boolean = boolean, >( opts: UseLoaderDepsOptions, ): UseLoaderDepsResult { const { select, ...rest } = opts return useMatch({ ...rest, select: (s) => { return select ? select(s.loaderDeps) : s.loaderDeps }, }) as UseLoaderDepsResult }