"use client"; import { useEffect, useState } from "react"; import Link from "next/link"; import { Plus, Trash2, CheckCircle, Clock, Circle } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Task, fetchTasks, deleteTask } from "@/lib/api"; const statusIcons = { pending: Circle, in_progress: Clock, completed: CheckCircle, }; const statusColors = { pending: "bg-yellow-500/20 text-yellow-400 border-yellow-500/30", in_progress: "bg-blue-500/20 text-blue-400 border-blue-500/30", completed: "bg-green-500/20 text-green-400 border-green-500/30", }; const priorityColors = { low: "bg-slate-500/20 text-slate-400 border-slate-500/30", medium: "bg-orange-500/20 text-orange-400 border-orange-500/30", high: "bg-red-500/20 text-red-400 border-red-500/30", }; export default function Dashboard() { const [tasks, setTasks] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const loadTasks = async () => { try { setLoading(true); const data = await fetchTasks(); setTasks(data); setError(null); } catch (err) { setError(err instanceof Error ? err.message : "Failed to load tasks"); } finally { setLoading(false); } }; useEffect(() => { loadTasks(); }, []); const handleDelete = async (id: number) => { try { await deleteTask(id); setTasks(tasks.filter((t) => t.id !== id)); } catch (err) { setError(err instanceof Error ? err.message : "Failed to delete task"); } }; const stats = { total: tasks.length, pending: tasks.filter((t) => t.status === "pending").length, inProgress: tasks.filter((t) => t.status === "in_progress").length, completed: tasks.filter((t) => t.status === "completed").length, }; if (loading) { return (
Loading tasks...
); } return (
{/* Stats Overview */}
Total Tasks
{stats.total}
Pending
{stats.pending}
In Progress
{stats.inProgress}
Completed
{stats.completed}
{/* Actions */}

Tasks

{/* Error Message */} {error && (
{error}
)} {/* Task List */} {tasks.length === 0 ? (

No tasks yet

) : (
{tasks.map((task) => { const StatusIcon = statusIcons[task.status]; return (
{task.title} {task.description && (

{task.description}

)}
{task.status.replace("_", " ")} {task.priority}
); })}
)}
); }