"use client"; import { useEffect, useState } from "react"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { RefreshCw } from "lucide-react"; interface Task { id: string; headline: string; projectName: string; projectId: number; status: number; type: string; dateToFinish: string | null; } interface ProjectSummary { name: string; tasks: { status: number; count: number; }[]; } export function Flow() { const [tasks, setTasks] = useState([]); const [error, setError] = useState(null); const [loading, setLoading] = useState(true); const [refreshing, setRefreshing] = useState(false); const getStatusLabel = (status: number): string => { switch (status) { case 3: return 'NEW'; case 1: case 4: return 'INPROGRESS'; case 2: case 5: return 'DONE'; default: return 'UNKNOWN'; } }; const getStatusColor = (status: number): string => { const statusLabel = getStatusLabel(status); switch (statusLabel) { case 'DONE': return 'bg-green-100 text-green-800'; case 'INPROGRESS': return 'bg-yellow-100 text-yellow-800'; case 'NEW': return 'bg-gray-100 text-gray-800'; default: return 'bg-gray-100 text-gray-800'; } }; const fetchTasks = async (isRefresh = false) => { try { if (isRefresh) setRefreshing(true); const response = await fetch('/api/leantime/tasks'); if (!response.ok) throw new Error('Failed to fetch tasks'); const data = await response.json(); if (!data.tasks || !Array.isArray(data.tasks)) { setTasks([]); return; } // Sort tasks by status (prioritizing in-progress and new tasks) and date const sortedTasks = data.tasks.sort((a: Task, b: Task) => { const statusA = getStatusLabel(a.status); const statusB = getStatusLabel(b.status); // Prioritize INPROGRESS, then NEW, then DONE const statusPriority: Record = { 'INPROGRESS': 0, 'NEW': 1, 'DONE': 2, 'UNKNOWN': 3 }; return (statusPriority[statusA] ?? 3) - (statusPriority[statusB] ?? 3); }); // Limit to 6 tasks setTasks(sortedTasks.slice(0, 6)); setError(null); } catch (err) { console.error('Error fetching tasks:', err); setError('Failed to fetch tasks'); } finally { setLoading(false); setRefreshing(false); } }; useEffect(() => { fetchTasks(); }, []); return ( Flow {loading ? (
) : error ? (
{error}
) : tasks.length === 0 ? (
No tasks found
) : (
{tasks.map((task) => (

{task.headline}

{getStatusLabel(task.status)}

{task.projectName}

))}
)} ); }