2024-01-05 08:51:08 +00:00
|
|
|
import { type Router } from '@remix-run/router';
|
2023-11-16 15:14:47 +00:00
|
|
|
import { createContext, useContext } from 'react';
|
|
|
|
|
2023-11-25 00:16:26 +00:00
|
|
|
import { createRoutes } from './app';
|
|
|
|
|
2023-11-16 15:14:47 +00:00
|
|
|
export const RoutingContext = createContext<{
|
2023-11-25 00:16:26 +00:00
|
|
|
visible: boolean;
|
2023-11-16 15:14:47 +00:00
|
|
|
currentIndex: number;
|
2024-02-01 15:40:38 +00:00
|
|
|
tabId: string;
|
2023-11-16 15:14:47 +00:00
|
|
|
maxIndex: number;
|
2023-11-25 00:16:26 +00:00
|
|
|
routes: ReturnType<typeof createRoutes>;
|
2023-11-16 15:14:47 +00:00
|
|
|
} | null>(null);
|
|
|
|
|
2024-01-05 08:51:08 +00:00
|
|
|
// We split this into a different context because we don't want to trigger the hook unnecessarily
|
|
|
|
export const RouterContext = createContext<Router | null>(null);
|
|
|
|
|
2023-11-16 15:14:47 +00:00
|
|
|
export function useRoutingContext() {
|
|
|
|
const ctx = useContext(RoutingContext);
|
|
|
|
|
|
|
|
if (!ctx) throw new Error('useRoutingContext must be used within a RoutingContext.Provider');
|
|
|
|
|
|
|
|
return ctx;
|
|
|
|
}
|
2024-01-05 08:51:08 +00:00
|
|
|
|
|
|
|
export function useRouter() {
|
|
|
|
const ctx = useContext(RouterContext);
|
|
|
|
if (!ctx) throw new Error('useRouter must be used within a RouterContext.Provider');
|
|
|
|
|
|
|
|
return ctx;
|
|
|
|
}
|