"use client"; import { useEffect, useState } from "react"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { RefreshCw, Calendar, CheckCircle2, Clock } from "lucide-react"; import { useRouter } from "next/navigation"; import { useSession } from "next-auth/react"; interface Task { id: string; headline: string; description: string; status: string; dueDate: string; priority: number; } export function Flow() { const [tasks, setTasks] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [refreshing, setRefreshing] = useState(false); const router = useRouter(); const { data: session } = useSession(); const fetchTasks = async (isRefresh = false) => { try { if (isRefresh) { setRefreshing(true); } const response = await fetch('/api/leantime/tasks', { cache: 'no-store', next: { revalidate: 0 }, }); if (response.status === 401) { setError('Session expired. Please sign in again.'); return; } if (!response.ok) { const errorData = await response.json(); throw new Error(errorData.error || 'Failed to fetch tasks'); } const data = await response.json(); setTasks(data.tasks); setError(null); } catch (err) { console.error('Error fetching tasks:', err); const errorMessage = err instanceof Error ? err.message : 'Failed to fetch tasks'; setError(errorMessage); } finally { setLoading(false); setRefreshing(false); } }; useEffect(() => { if (session) { fetchTasks(); // Set up polling every 5 minutes const interval = setInterval(() => fetchTasks(), 300000); return () => clearInterval(interval); } }, [session]); const getPriorityColor = (priority: number) => { switch (priority) { case 1: return 'text-red-500'; case 2: return 'text-yellow-500'; case 3: return 'text-green-500'; default: return 'text-gray-500'; } }; const getStatusIcon = (status: string) => { switch (status.toLowerCase()) { case 'done': return ; case 'in progress': return ; default: return ; } }; return ( router.push('/flow')} > My Tasks {loading &&

Loading tasks...

} {error && (

Error: {error}

)} {!loading && !error && (
{tasks.length === 0 ? (

No tasks found

) : ( tasks.map((task) => (
{getStatusIcon(task.status)}

{task.headline}

{task.priority === 1 ? 'High' : task.priority === 2 ? 'Medium' : 'Low'}

{task.description}

{task.dueDate && (

Due: {new Date(task.dueDate).toLocaleDateString()}

)}
)) )}
)}
); }