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'; export default function MyRequests() { const { currentUser } = useAuth(); const [projects, setProjects] = useState([]); const [tasks, setTasks] = useState([]); const [submissions, setSubmissions] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { async function load() { // Only fetch tasks where current user was the original submitter const { data: mySubs } = await supabase .from('submissions') .select('task_id, submitted_by_name, version_number, type') .eq('submitted_by', currentUser.id) .eq('type', 'initial'); if (!mySubs || mySubs.length === 0) { setLoading(false); return; } const myTaskIds = mySubs.map(s => s.task_id); const { data: t } = await supabase .from('tasks').select('*, project:projects(id, name, created_at, status)') .in('id', myTaskIds); setTasks(t || []); // Also fetch all submissions for these tasks (to show revision history) const { data: allSubs } = await supabase .from('submissions') .select('task_id, submitted_by_name, version_number, type') .in('task_id', myTaskIds) .order('version_number'); setSubmissions(allSubs || []); // Group tasks by project const projectMap = {}; (t || []).forEach(task => { const p = task.project; if (!p) return; if (!projectMap[p.id]) projectMap[p.id] = { ...p, id: p.id }; }); setProjects(Object.values(projectMap)); setLoading(false); } load(); }, [currentUser.id]); if (loading) return Loading...; return ( My Requests Requests you have submitted. + New Request {projects.length === 0 ? ( 📋 No requests yet Submit a new request to get started. Submit Request ) : ( projects.map(project => { const projectTasks = tasks.filter(t => t.project?.id === project.id); return ( {project.name} Started {new Date(project.created_at).toLocaleDateString()} · {projectTasks.length} job{projectTasks.length !== 1 ? 's' : ''} {projectTasks.map(task => { const taskSubs = submissions.filter(s => s.task_id === task.id); const initialSub = taskSubs.find(s => s.type === 'initial') || taskSubs[0]; const latestSub = taskSubs[taskSubs.length - 1]; const hasRevision = taskSubs.length > 1 && latestSub?.submitted_by_name !== initialSub?.submitted_by_name; return ( {task.title}{' '} {'v' + String(task.current_version).padStart(2, '0')} Submitted by {initialSub?.submitted_by_name || 'Unknown'} {hasRevision && ` · Last updated by ${latestSub.submitted_by_name}`} Details ); })} ); }) )} ); }
Loading...
Submit a new request to get started.