| | 'use client' |
| |
|
| | import { createContext } from 'react' |
| | import type { Params } from '../../server/request/params' |
| | import { ReadonlyURLSearchParams } from '../../client/components/readonly-url-search-params' |
| |
|
| | export const SearchParamsContext = createContext<URLSearchParams | null>(null) |
| | export const PathnameContext = createContext<string | null>(null) |
| | export const PathParamsContext = createContext<Params | null>(null) |
| |
|
| | |
| | |
| | export type InstrumentedPromise<T> = Promise<T> & { |
| | status: 'fulfilled' |
| | value: T |
| | displayName: string |
| | } |
| |
|
| | export type NavigationPromises = { |
| | pathname: InstrumentedPromise<string> |
| | searchParams: InstrumentedPromise<ReadonlyURLSearchParams> |
| | params: InstrumentedPromise<Params> |
| | |
| | selectedLayoutSegmentPromises?: Map< |
| | string, |
| | InstrumentedPromise<string | null> |
| | > |
| | selectedLayoutSegmentsPromises?: Map<string, InstrumentedPromise<string[]>> |
| | } |
| |
|
| | export const NavigationPromisesContext = |
| | createContext<NavigationPromises | null>(null) |
| |
|
| | |
| | |
| | |
| | export function createDevToolsInstrumentedPromise<T>( |
| | displayName: string, |
| | value: T |
| | ): InstrumentedPromise<T> { |
| | const promise = Promise.resolve(value) as InstrumentedPromise<T> |
| | promise.status = 'fulfilled' |
| | promise.value = value |
| | promise.displayName = `${displayName} (SSR)` |
| | return promise |
| | } |
| |
|
| | export { ReadonlyURLSearchParams } |
| |
|
| | if (process.env.NODE_ENV !== 'production') { |
| | SearchParamsContext.displayName = 'SearchParamsContext' |
| | PathnameContext.displayName = 'PathnameContext' |
| | PathParamsContext.displayName = 'PathParamsContext' |
| | NavigationPromisesContext.displayName = 'NavigationPromisesContext' |
| | } |
| |
|