import { Outlet, NavLink, useNavigate } from 'react-router-dom' import { useAuthStore } from '../stores/authStore' import { Workflow, Play, Settings, LogOut, Menu, Database, Code, Key, FolderKanban} from 'lucide-react' import { useState, useEffect } from 'react' import { useQuery } from '@tanstack/react-query' import { useProjectStore } from '../stores/projectStore' import { projectsApi } from '../api/users' import clsx from 'clsx' import { ThemeToggle } from './ThemeToggle' export default function Layout() { const { user, logout } = useAuthStore() const navigate = useNavigate() const projectId = useProjectStore((s) => s.projectId) const setProject = useProjectStore((s) => s.setProject) const { data: projects = [] } = useQuery({ queryKey: ['projects'], queryFn: () => projectsApi.list(), staleTime: 5 * 60 * 1000, }) // A project that has gone - deleted, or access removed - would otherwise // leave the selector showing a blank and every page filtering to nothing. useEffect(() => { if (projectId && projects.length && !projects.some((p) => p._id === projectId)) { setProject(null) } }, [projectId, projects, setProject]) const [sidebarOpen, setSidebarOpen] = useState(false) const handleLogout = () => { logout() navigate('/login') } const navItems = [ { to: '/workflows', icon: Workflow, label: 'Workflows' }, { to: '/executions', icon: Play, label: 'Executions' }, { to: '/nodes', icon: Code, label: 'Nodes' }, { to: '/credentials', icon: Key, label: 'Credentials' }, { to: '/projects', icon: FolderKanban, label: 'Projects' }, { to: '/database', icon: Database, label: 'Database' }, { to: '/settings', icon: Settings, label: 'Settings' }, ] return (
{/* Mobile sidebar backdrop */} {sidebarOpen && (
setSidebarOpen(false)} /> )} {/* Sidebar */} {/* Main content */}
{/* Mobile header */}
SmartBotic
{/* Page content */}
) }