-
Notifications
You must be signed in to change notification settings - Fork 0
/
routingProvider.tsx
33 lines (29 loc) · 1.14 KB
/
routingProvider.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import * as React from 'react'
import { RouterContentContext, RouterProvider } from '../context'
import { Router, RouterRequest, RouterState, RouterResponse } from '../core'
import { UseRouterOptions, useRouter } from '../hooks/useRouter'
import { Content } from './content'
export interface RoutingProviderProps<
S extends RouterState = RouterState,
Response extends RouterResponse = RouterResponse
> extends UseRouterOptions<S, Response> {
children?: React.ReactNode
router: Router<RouterRequest<S>, Response>
}
export function RoutingProvider<
S extends RouterState = RouterState,
Response extends RouterResponse = RouterResponse
>({ children, router, ...rest }: RoutingProviderProps<S, Response>) {
const [output, navigation] = useRouter(router, { ...rest })
const content = output.content.props.children as React.ReactNode
return (
<RouterProvider
navigation={navigation}
request={output.request}
pendingRequest={output.pendingRequest}>
<RouterContentContext.Provider value={content}>
{children === undefined ? <Content /> : children}
</RouterContentContext.Provider>
</RouterProvider>
)
}