import '@abraham/reflection';
import { provideAuth, setupAuthContext } from '@/app/auth/context';
import { AppNotFoundComponent } from '@/components/layout/app-not-found';
import { providePlatform } from '@/infra/platform/context';
import { provideStorages } from '@/infra/storage/context';
import { provideStyles } from '@/infra/styles/context';
import { routeTree } from '@/presentation/routeTree.gen';
import { type Injector, ReflectiveInjector } from '@outposts/injection-js';
import { RouterProvider, createRouter } from '@tanstack/react-router';
import {
InjectorContextVoidInjector,
InjectorProvider,
} from 'oidc-client-rx/adapters/react';
import { Suspense } from 'react';
import { createRoot } from 'react-dom/client';
import './app.css';
import { provideRecorder } from '@/domains/recorder/context';
import { provideGraphql } from '@/infra/graphql';
import { graphqlContextFromInjector } from '@/infra/graphql/context';
import { ApolloProvider } from '@apollo/client';
// Create a new router instance
const router = createRouter({
routeTree,
defaultPreload: 'intent',
defaultStaleTime: 5000,
scrollRestoration: true,
defaultNotFoundComponent: AppNotFoundComponent,
notFoundMode: 'root',
context: {
injector: InjectorContextVoidInjector,
},
});
// Register the router instance for type safety
declare module '@tanstack/react-router' {
interface Register {
router: typeof router;
}
}
const injector: Injector = ReflectiveInjector.resolveAndCreate([
...providePlatform(),
...provideStorages(),
...provideAuth(router),
...provideStyles(),
...provideGraphql(),
...provideRecorder(),
]);
setupAuthContext(injector);
const rootElement = document.getElementById('root');
const { graphqlService } = graphqlContextFromInjector(injector);
const App = () => {
return (
);
};
if (rootElement) {
const root = createRoot(rootElement);
root.render();
}