import { useState, useEffect } from 'react'; import { Link } from 'react-router-dom'; import Layout from '../../components/Layout'; import StatusBadge from '../../components/StatusBadge'; import { supabase } from '../../lib/supabase'; import { useAuth } from '../../context/AuthContext'; function CompanyGroup({ company, tasks, projects }) { const [open, setOpen] = useState(true); return (
{open && (
{tasks.map(task => { const project = projects.find(p => p.id === task.project_id); return (
{task.title} {'v' + String(task.current_version).padStart(2, '0')}
{project?.name} {task.assigned_name || 'Unassigned'}
); })}
)}
); } function GroupedColumn({ tasks, companies, projects, emptyText }) { if (tasks.length === 0) return (
{emptyText}
); const groups = companies .map(company => { const companyProjectIds = projects.filter(p => p.company_id === company.id).map(p => p.id); const companyTasks = tasks.filter(t => companyProjectIds.includes(t.project_id)); return { company, tasks: companyTasks }; }) .filter(g => g.tasks.length > 0); return (
{groups.map(({ company, tasks: groupTasks }) => ( ))}
); } export default function Dashboard() { const { currentUser } = useAuth(); const [tasks, setTasks] = useState([]); const [projects, setProjects] = useState([]); const [companies, setCompanies] = useState([]); const [loading, setLoading] = useState(true); const [showCompleted, setShowCompleted] = useState(false); useEffect(() => { async function load() { const [{ data: t }, { data: p }, { data: co }] = await Promise.all([ supabase.from('tasks').select('*').order('submitted_at', { ascending: false }), supabase.from('projects').select('*'), supabase.from('companies').select('*').order('name'), ]); setTasks(t || []); setProjects(p || []); setCompanies(co || []); setLoading(false); } load(); }, []); if (loading) return

Loading...

; const activeTasks = tasks.filter(t => ['in_progress', 'on_hold', 'client_review'].includes(t.status)); const notStartedTasks = tasks.filter(t => t.status === 'not_started'); const completedTasks = tasks.filter(t => t.status === 'client_approved'); const activeProjects = projects.filter(p => p.status === 'active'); return (
Welcome back, {currentUser?.name?.split(' ')[0]}
Here's what's happening across your projects.
View Requests
📁
{activeProjects.length}
Active Projects
{activeTasks.length}
Active Jobs
🔴
{notStartedTasks.length}
Not Started
{completedTasks.length}
Completed
Not Started
Active Jobs
{showCompleted && (
Completed
)}
); }