import { useEffect, useState } from 'react' import { ActionIcon, AppShell, Avatar, Button, Card, Divider, Flex, Group, NavLink, Paper, ScrollArea, Stack, Text, Title, Tooltip } from '@mantine/core' import { useLocalStorage } from '@mantine/hooks' import { IconChevronLeft, IconChevronRight, IconDashboard } from '@tabler/icons-react' import type { User } from 'generated/prisma' import { Outlet, useLocation, useNavigate } from 'react-router-dom' import { default as clientRoute, default as clientRoutes } from '@/clientRoutes' import apiFetch from '@/lib/apiFetch' /* ----------------------- Logout ----------------------- */ function Logout() { return ( ) } /* ----------------------- Layout ----------------------- */ export default function DashboardLayout() { const [opened, setOpened] = useLocalStorage({ key: 'nav_open', defaultValue: true, }) return ( {/* NAVBAR */} {/* Collapse toggle */} setOpened(v => !v)} radius="xl" > {opened ? : } {/* Navigation */} {/* User info */} {/* MAIN CONTENT */} {!opened && ( setOpened(true)} radius="xl" > )} App Dashboard ) } /* ----------------------- Host Info ----------------------- */ function HostView() { const [host, setHost] = useState(null) useEffect(() => { async function fetchHost() { const { data } = await apiFetch.api.user.find.get() setHost(data?.user ?? null) } fetchHost() }, []) return ( {host ? ( {host.name?.[0]} {host.name} {host.email} ) : ( No host information available )} ) } /* ----------------------- Navigation ----------------------- */ function NavigationDashboard() { const navigate = useNavigate() const location = useLocation() const isActive = (path: keyof typeof clientRoute) => location.pathname.startsWith(clientRoute[path]) return ( } label="Dashboard Overview" description="Quick summary and activity highlights" onClick={() => navigate(clientRoutes['/dashboard/landing'])} /> } label="API Keys" description="Manage your API credentials" onClick={() => navigate(clientRoutes['/dashboard/apikey'])} /> ) }