import { Navigate, Route, Routes } from 'react-router-dom'; import AppShell from './components/AppShell'; import { WizardProvider } from './lib/wizard'; import { DialogsProvider } from './lib/dialogs'; import Login from './routes/Login'; import Auftraege from './routes/Auftraege'; import Stammdaten from './routes/Stammdaten'; import Configurator from './routes/Configurator'; import MusterSeite from './routes/Muster'; import AngebotSeite from './routes/Angebot'; import FreigabeSeite from './routes/Freigabe'; import Textmenge from './routes/Textmenge'; import { loadSession } from './lib/api'; /** * Produkt-Direktlinks (Slug → Produktschlüssel): wählen das Produkt vor, der * Konfigurator startet auf Schritt 1. Mehrere freundliche Slugs erlaubt * (z. B. /followups zeigt auf den Schlüssel follow_ups). */ const PRODUKT_PFADE: Record = { briefe: 'briefe', postkarten: 'postkarten', unterschriftenservice: 'unterschriftenservice', follow_ups: 'follow_ups', followups: 'follow_ups', 'follow-ups': 'follow_ups', }; function Geschuetzt({ children }: { children: React.ReactNode }) { return loadSession() ? <>{children} : ; } export default function App() { return ( } /> } /> {/* Muster & individuelles Angebot als eigene Seiten (kein Popup). */} } /> } /> {/* Motiv-Freigabe über Einmal-Link (kein Login nötig). */} } /> {/* Textmengen-Tool – öffentlich, Direktlink /textmenge. */} } /> } /> } /> {/* Produkt-Direktlinks – Produktwahl entfällt, Personentyp bleibt. */} {Object.entries(PRODUKT_PFADE).map(([slug, key]) => ( } /> ))} } /> ); }