VigilanzaTurni/client/src/App.tsx
marco370 dcbf059d73 Add advanced planning features with new database schemas and UI
Implement new API endpoints and database schemas for guard constraints, site preferences, training courses, holidays, and absences, alongside a dedicated advanced planning UI.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 99f0fce6-9386-489a-9632-1d81223cab44
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/6d543d2c-20b9-4ea6-93fe-70fe9b1d9f80/99f0fce6-9386-489a-9632-1d81223cab44/H8Wilyj
2025-10-11 19:30:16 +00:00

89 lines
2.8 KiB
TypeScript

import { Switch, Route } from "wouter";
import { queryClient } from "./lib/queryClient";
import { QueryClientProvider } from "@tanstack/react-query";
import { Toaster } from "@/components/ui/toaster";
import { TooltipProvider } from "@/components/ui/tooltip";
import { ThemeProvider } from "@/components/theme-provider";
import { SidebarProvider, SidebarTrigger } from "@/components/ui/sidebar";
import { AppSidebar } from "@/components/app-sidebar";
import { useAuth } from "@/hooks/useAuth";
import NotFound from "@/pages/not-found";
import Landing from "@/pages/landing";
import Dashboard from "@/pages/dashboard";
import Guards from "@/pages/guards";
import Sites from "@/pages/sites";
import Shifts from "@/pages/shifts";
import Reports from "@/pages/reports";
import Notifications from "@/pages/notifications";
import Users from "@/pages/users";
import Planning from "@/pages/planning";
function Router() {
const { isAuthenticated, isLoading } = useAuth();
return (
<Switch>
{isLoading || !isAuthenticated ? (
<Route path="/" component={Landing} />
) : (
<>
<Route path="/" component={Dashboard} />
<Route path="/guards" component={Guards} />
<Route path="/sites" component={Sites} />
<Route path="/shifts" component={Shifts} />
<Route path="/planning" component={Planning} />
<Route path="/reports" component={Reports} />
<Route path="/notifications" component={Notifications} />
<Route path="/users" component={Users} />
</>
)}
<Route component={NotFound} />
</Switch>
);
}
function AppContent() {
const { isAuthenticated, isLoading } = useAuth();
// Sidebar style configuration for operational dashboard
const sidebarStyle = {
"--sidebar-width": "16rem",
"--sidebar-width-icon": "3rem",
} as React.CSSProperties;
return (
<ThemeProvider defaultTheme="dark" storageKey="vigilanza-theme">
<TooltipProvider>
{!isLoading && isAuthenticated ? (
<SidebarProvider style={sidebarStyle}>
<div className="flex h-screen w-full">
<AppSidebar />
<div className="flex flex-col flex-1 overflow-hidden">
<header className="flex items-center justify-between p-4 border-b bg-background">
<SidebarTrigger data-testid="button-sidebar-toggle" />
</header>
<main className="flex-1 overflow-auto p-6">
<Router />
</main>
</div>
</div>
</SidebarProvider>
) : (
<Router />
)}
<Toaster />
</TooltipProvider>
</ThemeProvider>
);
}
function App() {
return (
<QueryClientProvider client={queryClient}>
<AppContent />
</QueryClientProvider>
);
}
export default App;