import { CreateRouteOptions } from './createRouteOptions'; import { Route } from './route'; import { RouterReject } from './routerReject'; import { RouterPush } from './routerPush'; import { RouterReplace } from './routerReplace'; import { ExtractRouteContextRejections, ExtractRouteContextRoutes } from './routeContext'; import { ResolvedRoute } from './resolved'; import { RouteUpdate } from './routeUpdate'; import { LoadersDataReturnType } from './routeLoaders'; import { ViewsPropsReturnType } from './routeViews'; import { LastInArray } from './utilities'; /** * Context provided to props callback functions */ export type PropsCallbackContext = { reject: RouterReject>; push: RouterPush<[TRoute] | ExtractRouteContextRoutes>; replace: RouterReplace<[TRoute] | ExtractRouteContextRoutes>; update: RouteUpdate>; parent: PropsCallbackParent; }; export type PropsCallbackParent = Route | undefined extends TParent ? undefined | { name: string; props: unknown; data: unknown; } : TParent extends Route ? { name: TParent['name']; props: GetParentPropsReturnType; data: GetParentDataReturnType; } : undefined; type GetParentPropsReturnType = TParent extends Route ? LastInArray extends { views: infer TViews; } ? ViewsPropsReturnType : undefined : undefined; type GetParentDataReturnType = TParent extends Route ? LastInArray extends { loaders: infer TLoaders; } ? LoadersDataReturnType : undefined : undefined; export {};