import { Routes, Route, Navigate, NavLink, useNavigate } from 'react-router-dom' import { useState } from 'react' import { AuthProvider, useAuth } from './contexts/AuthContext' import { ProjectProvider, useProject } from './contexts/ProjectContext' import Login from './components/Login' import Dashboard from './components/Dashboard' import LeadsTable from './components/LeadsTable' import ImportWizard from './components/ImportWizard' import ScraperConfig from './components/ScraperConfig' import Admin from './components/Admin' import Projects from './components/Projects' const PROJECT_COLORS = ['#0073ea', '#00c875', '#e2445c', '#fdab3d', '#a25ddc', '#037f4c', '#ff7575', '#579bfc'] function Sidebar() { const { user, isAdmin, logout } = useAuth() const { projects, activeProject, selectProject, addProject } = useProject() const navigate = useNavigate() const [showNewProject, setShowNewProject] = useState(false) const [newName, setNewName] = useState('') const [newColor, setNewColor] = useState(PROJECT_COLORS[0]) const [creating, setCreating] = useState(false) const handleLogout = () => { logout(); navigate('/login') } const handleCreateProject = async (e) => { e.preventDefault() if (!newName.trim()) return setCreating(true) try { const base = import.meta.env.DEV ? '/api' : '' const token = localStorage.getItem('leadgen_token') const res = await fetch(`${base}/projects`, { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` }, body: JSON.stringify({ name: newName.trim(), color: newColor }), }) if (res.ok) { const project = await res.json() addProject(project) selectProject(project) setNewName('') setShowNewProject(false) navigate('/leads') } } catch {} setCreating(false) } return ( ) } function Topbar() { const { activeProject } = useProject() return (
LeadGen {activeProject && ( <> / {activeProject.name} )}
) } function ProtectedRoute({ children, adminOnly = false }) { const { token, isAdmin } = useAuth() if (!token) return if (adminOnly && !isAdmin) return return children } function AppShell() { const { token } = useAuth() if (!token) { return ( } /> ) } return (
} /> } /> } /> } /> } /> } /> } /> } />
) } export default function App() { return ( ) }