Files
vt-fe/src/router.tsx

76 lines
2.2 KiB
TypeScript

import { createRouter as createTanstackRouter } from '@tanstack/react-router'
import { setupRouterSsrQueryIntegration } from '@tanstack/react-router-ssr-query'
import * as TanstackQuery from './integrations/tanstack-query/root-provider'
import { createConnectTransport } from '@connectrpc/connect-web'
import { TransportProvider } from '@connectrpc/connect-query'
// Import the generated route tree
import { routeTree } from './routeTree.gen'
import { Interceptor } from '@connectrpc/connect'
import { getOidc } from './lib/oidc'
import { getRuntimeRPCURI } from './routes'
import NotFound from './components/404'
const logingIC: Interceptor = (next) => (req) => {
console.log(
`[ConnectRPC] ${new Date().toLocaleDateString()} - ${req.service}`,
)
return next(req)
}
const auth: Interceptor = (next) => async (req) => {
const oidc = await getOidc()
if (oidc && oidc.getAccessToken)
req.header.set('Authentication', 'Bearer ' + (await oidc.getAccessToken()))
return await next(req)
}
const transport = async () =>{
const baseUrl = await getRuntimeRPCURI();
console.log("BASE_URL", baseUrl)
return createConnectTransport({
baseUrl: baseUrl!,
interceptors: [logingIC, auth],
})
}
// Create a new router instance
export const getRouter = async () => {
const rqContext = TanstackQuery.getContext()
const finalTransport = await transport()
const router = createTanstackRouter({
routeTree,
context: { ...rqContext, transport: finalTransport },
defaultPreload: 'intent',
Wrap: (props: { children: React.ReactNode }) => {
return (
<TransportProvider transport={finalTransport}>
<TanstackQuery.Provider {...rqContext}>
{props.children}
</TanstackQuery.Provider>
</TransportProvider>
)
},
defaultErrorComponent: ({ error }) => {
return <div>ERROR {error.message}</div>
},
defaultNotFoundComponent: () => {
return <NotFound />
},
})
setupRouterSsrQueryIntegration({ router, queryClient: rqContext.queryClient })
return router
}
// Register the router instance for type safety
declare module '@tanstack/react-router' {
interface Register {
router: ReturnType<typeof getRouter>
}
}