"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; date: string; editFrom: string; editTo: string; authorFirstname?: string; authorLastname?: string; tags?: string; } 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 getDateToSort = (task: Task): number => { // Try different date fields in order of preference const dates = [ task.date, task.dateToFinish, task.editFrom, task.editTo ].filter(date => date && date !== '0000-00-00 00:00:00'); return dates.length > 0 ? new Date(dates[0]).getTime() : 0; }; 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 date (oldest first) const sortedTasks = data.tasks.sort((a: Task, b: Task) => { return getDateToSort(a) - getDateToSort(b); }); // 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}

{task.tags && (

{task.tags}

)}
))}
)} ); }