import "./App.css"; import { AppProvider, useApp } from "./context/AppContext.jsx"; import { useEffect, useRef, useState } from "react"; import LoginPage from "./components/LoginPage.jsx"; import NavBar from "./components/NavBar.jsx"; import GebruikersBeheer from "./components/GebruikersBeheer.jsx"; import DashboardTab from "./pages/DashboardTab.jsx"; import EigenVermogenTab from "./pages/EigenVermogenTab.jsx"; import SchuldTab from "./pages/SchuldTab.jsx"; import VoortgangTab from "./pages/VoortgangTab.jsx"; import { RED, PURPLE, PURPLE_LIGHT } from "./constants/index.js"; import ProfielPopup from "./components/ProfielPopup.jsx"; import InstellingenModal from "./components/InstellingenModal.jsx"; function initials(naam = "") { const parts = naam.trim().split(/\s+/); if (parts.length >= 2) return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase(); return naam.slice(0, 2).toUpperCase(); } const PAGES = [DashboardTab, EigenVermogenTab, SchuldTab, VoortgangTab]; function AppInner() { const { loggedIn, login, logout, locked, tab, showUsers, setShowUsers, showInstellingen, setShowInstellingen, loading, T, currentUser, avatar, idleMinutes } = useApp(); const [profielOpen, setProfielOpen] = useState(false); const idleTimer = useRef(null); const IDLE_MS = (idleMinutes ?? 30) * 60 * 1000; const [sessionVerlopen, setSessionVerlopen] = useState(false); useEffect(() => { if (!loggedIn) return; const reset = () => { clearTimeout(idleTimer.current); idleTimer.current = setTimeout(() => { logout(); setSessionVerlopen(true); }, IDLE_MS); }; const events = ["mousemove", "mousedown", "keydown", "touchstart", "scroll"]; events.forEach((e) => window.addEventListener(e, reset, { passive: true })); reset(); return () => { events.forEach((e) => window.removeEventListener(e, reset)); clearTimeout(idleTimer.current); }; }, [loggedIn]); if (!loggedIn) { if (sessionVerlopen) { return (
Sessie verlopen
Je bent automatisch uitgelogd na 30 minuten inactiviteit. Klik hieronder om opnieuw in te loggen.
); } return ; } if (loading) { return (
Data laden…
); } const ActivePage = PAGES[tab] ?? DashboardTab; return (
{/* Hoofdinhoud */}
{/* Topbalk rechts */}
{profielOpen && setProfielOpen(false)} />}
{/* Vergrendeld banner */} {locked && (
🔒 Vergrendeld — ga naar Gebruikers om te ontgrendelen
)} {/* Modals */} {showUsers && setShowUsers(false)} />} {showInstellingen && setShowInstellingen(false)} />} {/* Actieve pagina */}
); } export default function App() { return ( ); }