"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 StatusLabel { name: string; class: string; statusType: string; kanbanCol: boolean | string; sortKey: number; } interface Project { projectId: string; labels: StatusLabel[]; } export function Flow() { const [projects, setProjects] = useState([]); const [error, setError] = useState(null); const [loading, setLoading] = useState(true); const [refreshing, setRefreshing] = useState(false); const [retryTimeout, setRetryTimeout] = useState(null); const fetchStatusLabels = async (isRefresh = false) => { try { if (isRefresh) { setRefreshing(true); } const response = await fetch('/api/leantime/status-labels'); if (response.status === 429) { const retryAfter = parseInt(response.headers.get('retry-after') || '60'); const timeout = setTimeout(() => fetchStatusLabels(), retryAfter * 1000); setRetryTimeout(timeout); setError(`Rate limit exceeded. Retrying in ${retryAfter} seconds...`); return; } if (!response.ok) { throw new Error('Failed to fetch status labels'); } const data = await response.json(); setProjects(data.projects || []); setError(null); } catch (err) { console.error('Error fetching status labels:', err); setError('Failed to fetch status labels'); } finally { setLoading(false); setRefreshing(false); } }; useEffect(() => { fetchStatusLabels(); return () => { if (retryTimeout) { clearTimeout(retryTimeout); } }; }, []); const getStatusClass = (className: string) => { switch (className) { case 'label-info': case 'label-blue': return 'text-blue-600'; case 'label-warning': return 'text-yellow-600'; case 'label-success': return 'text-green-600'; case 'label-dark-green': return 'text-emerald-600'; case 'label-important': return 'text-red-600'; case 'label-default': return 'text-gray-600'; default: return 'text-gray-600'; } }; return ( Flow {loading ? (
) : error ? (
{error}
) : projects.length === 0 ? (
No status labels found
) : (
{projects.map((project) => (

Project {project.projectId}

{project.labels.map((label, index) => (
{label.name} {label.statusType}
))}
))}
)} ); }