59 lines
2.1 KiB
TypeScript
59 lines
2.1 KiB
TypeScript
import { createInertiaApp } from '@inertiajs/react';
|
|
import type { ComponentType } from 'react';
|
|
import { Toaster } from '@/components/ui/sonner';
|
|
import { TooltipProvider } from '@/components/ui/tooltip';
|
|
import { initializeTheme } from '@/hooks/use-appearance';
|
|
import AppLayout from '@/layouts/app-layout';
|
|
import AuthLayout from '@/layouts/auth-layout';
|
|
import SettingsLayout from '@/layouts/settings/layout';
|
|
import PortalNavigation from '@/layouts/portal-navigation';
|
|
|
|
const appName = import.meta.env.VITE_APP_NAME || 'InvesteMoz';
|
|
const pages = import.meta.glob<{ default: ComponentType }>('./pages/**/*.tsx');
|
|
|
|
void createInertiaApp({
|
|
resolve: async (name) => {
|
|
const path = `./pages/${name}.tsx`;
|
|
const loadPage = pages[path];
|
|
if (!loadPage) throw new Error(`Page not found: ${name}`);
|
|
return (await loadPage()).default;
|
|
},
|
|
title: (title) => (title ? `${title} - ${appName}` : appName),
|
|
layout: (name) => {
|
|
switch (true) {
|
|
case name === 'welcome':
|
|
case name === 'PortalInvestidor':
|
|
case name === 'management-access':
|
|
case name.startsWith('qa/'):
|
|
case name.startsWith('portal/'):
|
|
case name.startsWith('investment/'):
|
|
case name.startsWith('portfolio/'):
|
|
case name.startsWith('land-assistance/'):
|
|
case name.startsWith('desk/'):
|
|
case name.startsWith('investor-path/'):
|
|
return PortalNavigation;
|
|
case name.startsWith('auth/'):
|
|
return [PortalNavigation, AuthLayout];
|
|
case name.startsWith('settings/'):
|
|
return [PortalNavigation, AppLayout, SettingsLayout];
|
|
default:
|
|
return [PortalNavigation, AppLayout];
|
|
}
|
|
},
|
|
strictMode: true,
|
|
withApp(app) {
|
|
return (
|
|
<TooltipProvider delayDuration={0}>
|
|
{app}
|
|
<Toaster />
|
|
</TooltipProvider>
|
|
);
|
|
},
|
|
progress: {
|
|
color: '#4B5563',
|
|
},
|
|
});
|
|
|
|
// This will set light / dark mode on load...
|
|
initializeTheme();
|