"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 [projects, setProjects] = useState([]); const [error, setError] = useState(null); const [loading, setLoading] = useState(true); const [refreshing, setRefreshing] = useState(false); const getStatusLabel = (status: number): string => { switch (status) { case 1: return 'NEW'; case 2: return 'INPROGRESS'; case 3: return 'DONE'; default: return 'UNKNOWN'; } }; 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)) { setProjects([]); return; } // Group tasks by project and count statuses const projectMap = new Map>(); data.tasks.forEach((task: Task) => { if (!projectMap.has(task.projectName)) { projectMap.set(task.projectName, new Map()); } const statusMap = projectMap.get(task.projectName)!; statusMap.set(task.status, (statusMap.get(task.status) || 0) + 1); }); // Convert to array format const projectSummaries: ProjectSummary[] = Array.from(projectMap.entries()) .map(([name, statusMap]) => ({ name, tasks: Array.from(statusMap.entries()).map(([status, count]) => ({ status, count })) })); setProjects(projectSummaries); 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}
) : projects.length === 0 ? (
No tasks found
) : (
{projects.map((project) => (

{project.name}

{project.tasks.map(({ status, count }) => (
{count} {getStatusLabel(status)}
))}
))}
)} ); }