import { createContext, useContext } from 'react' import type { EmbeddedStackNavigationApi, EmbeddedStackRoute } from './types' export const EmbeddedStackNavigationContext = createContext(null) export const useEmbeddedStackNavigation = < ParamList extends Record = Record, >() => { const nav = useContext( EmbeddedStackNavigationContext, ) as EmbeddedStackNavigationApi | null if (!nav) throw new Error( '@the-sheet/embedded-stack-navigator - src/navigator/context.tsx - useEmbeddedStackNavigation must be used inside EmbeddedStackNavigator', ) return nav } export const EmbeddedStackRouteContext = createContext(null) export const useEmbeddedStackRoute = < ParamList extends Record = Record, ScreenName extends keyof ParamList = keyof ParamList, >() => { const route = useContext(EmbeddedStackRouteContext) as EmbeddedStackRoute< ParamList, ScreenName > | null if (!route) throw new Error( '@the-sheet/embedded-stack-navigator - src/navigator/context.tsx - useEmbeddedStackRoute must be used inside EmbeddedStackNavigator', ) return route } export const useEmbeddedStackRouteDangerously = < ParamList extends Record = Record, ScreenName extends keyof ParamList = keyof ParamList, >() => { const route = useContext(EmbeddedStackRouteContext) as EmbeddedStackRoute< ParamList, ScreenName > | null return route }