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
{showCompleted && (
Completed
)}
);
}