import { useState, useEffect } from "react"; import { PURPLE, PURPLE_LIGHT, TABS } from "../constants/index.js"; import { version, updateCheckUrl } from "../../package.json"; import { useApp } from "../context/AppContext.jsx"; const TAB_ICONS = [ , , , , ]; const GEBRUIKERS_ICON = ( ); const DATA_ICON = ( ); const LOGOUT_ICON = ( ); function Tooltip({ label, collapsed }) { if (!collapsed) return null; return (
{label}
); } function SidebarItem({ active, onClick, icon, label, T, collapsed }) { const [hovered, setHovered] = useState(false); return (
setHovered(true)} onMouseLeave={() => setHovered(false)} title={collapsed ? label : undefined} style={{ position: "relative", display: "flex", alignItems: "center", gap: collapsed ? 0 : 10, padding: "9px 12px", borderRadius: 8, cursor: "pointer", marginBottom: 6, justifyContent: collapsed ? "center" : "flex-start", background: active ? `${PURPLE}18` : "transparent", color: active ? PURPLE_LIGHT : T.muted, fontWeight: active ? 600 : 500, fontSize: 13, transition: "background 0.15s, color 0.15s", }}> {icon} {!collapsed && {label}} {hovered && }
); } export default function NavBar() { const { tab, setTab, setShowUsers, T, logout, doBackup, doRestore, } = useApp(); const [nieuweVersie, setNieuweVersie] = useState(null); const [dataOpen, setDataOpen] = useState(false); const [collapsed, setCollapsed] = useState(false); const W = collapsed ? 56 : 220; useEffect(() => { if (!updateCheckUrl) return; fetch(updateCheckUrl) .then((r) => r.json()) .then((data) => { const latest = data?.tag_name?.replace(/^v/, ""); if (latest && latest !== version) setNieuweVersie(latest); }) .catch(() => {}); }, []); return (
{/* Logo + collapse knop */} {!collapsed ? (
VibeFinance
) : (
)} {/* Navigatie */} {/* Onderste sectie */}
{/* Update melding */} {nieuweVersie && !collapsed && (
Nieuwe versie: v{nieuweVersie}
Huidig: v{version}
)} {nieuweVersie && collapsed && (
)} {/* Uitloggen */} {LOGOUT_ICON}} label="Log out" T={T} collapsed={collapsed} />
); }