import { useRouterState } from './useRouterState' import type { StructuralSharingOption, ValidateSelected, } from './structuralSharing' import type { AnyRouter, RegisteredRouter, RouterState, } from '@tanstack/router-core' export interface UseLocationBaseOptions< TRouter extends AnyRouter, TSelected, TStructuralSharing extends boolean = boolean, > { select?: ( state: RouterState['location'], ) => ValidateSelected } export type UseLocationResult< TRouter extends AnyRouter, TSelected, > = unknown extends TSelected ? RouterState['location'] : TSelected export function useLocation< TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown, TStructuralSharing extends boolean = boolean, >( opts?: UseLocationBaseOptions & StructuralSharingOption, ): UseLocationResult { return useRouterState({ select: (state: any) => opts?.select ? opts.select(state.location) : state.location, } as any) as UseLocationResult }