"use client"; import { useState, useEffect } from "react"; import { Plus, Trash2, Eye, CheckCircle2, Circle } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog"; import { getTasks, createTask, deleteTask, getTask, Task } from "@/lib/api"; export default function Home() { const [tasks, setTasks] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); // Add task form state const [newTitle, setNewTitle] = useState(""); const [newDescription, setNewDescription] = useState(""); const [addDialogOpen, setAddDialogOpen] = useState(false); const [adding, setAdding] = useState(false); // View task state const [viewTask, setViewTask] = useState(null); const [viewDialogOpen, setViewDialogOpen] = useState(false); const [viewLoading, setViewLoading] = useState(false); // Delete state const [deletingId, setDeletingId] = useState(null); useEffect(() => { loadTasks(); }, []); async function loadTasks() { try { setLoading(true); const data = await getTasks(); setTasks(data); setError(null); } catch (err) { setError(err instanceof Error ? err.message : "Failed to load tasks"); } finally { setLoading(false); } } async function handleAddTask(e: React.FormEvent) { e.preventDefault(); if (!newTitle.trim()) return; try { setAdding(true); const task = await createTask(newTitle.trim(), newDescription.trim()); setTasks((prev) => [...prev, task]); setNewTitle(""); setNewDescription(""); setAddDialogOpen(false); } catch (err) { setError(err instanceof Error ? err.message : "Failed to add task"); } finally { setAdding(false); } } async function handleDeleteTask(id: number) { try { setDeletingId(id); await deleteTask(id); setTasks((prev) => prev.filter((t) => t.id !== id)); } catch (err) { setError(err instanceof Error ? err.message : "Failed to delete task"); } finally { setDeletingId(null); } } async function handleViewTask(id: number) { try { setViewLoading(true); setViewDialogOpen(true); const task = await getTask(id); setViewTask(task); } catch (err) { setError(err instanceof Error ? err.message : "Failed to load task"); setViewDialogOpen(false); } finally { setViewLoading(false); } } return (
{/* Header */}

Task Manager

Organize and track your tasks efficiently

{/* Add Task Dialog */}
Add New Task Create a new task to track. Fill in the details below.
setNewTitle(e.target.value)} required />