'use client'; import { useEffect, useState } from 'react'; import { CheckCircle2, Circle, ListTodo } from 'lucide-react'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { useRouter } from 'next/navigation'; interface Task { id: string; title: string; status: string; priority: string; domainId?: string; domain?: string; } interface Domain { id: string; name: string; color: string; } export function TodayTasksWidget() { const [tasks, setTasks] = useState([]); const [loading, setLoading] = useState(true); const [domainMap, setDomainMap] = useState>(new Map()); const router = useRouter(); useEffect(() => { fetchTasks(); fetchDomains(); }, []); async function fetchDomains() { try { const res = await fetch("/api/domains?sort=sort_order"); if (res.ok) { const data = await res.json(); const map = new Map(); for (const d of data.items || []) map.set(d.id, d.name); setDomainMap(map); } } catch {} } async function fetchTasks() { try { const response = await fetch( '/api/tasks?status=todo,in_progress&perPage=5&sort=-priority' ); if (response.ok) { const data = await response.json(); setTasks(data.items || []); } } catch (error) { console.error('Failed to fetch tasks:', error); } finally { setLoading(false); } } async function toggleTask(id: string, currentStatus: string) { const newStatus = currentStatus === 'done' ? 'todo' : 'done'; try { await fetch(`/api/tasks/${id}`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ status: newStatus }), }); fetchTasks(); } catch (error) { console.error('Failed to toggle task:', error); } } return (
{loading ? (

Loading...

) : tasks.length === 0 ? (

No tasks for today

) : (
{tasks.map((task) => (
{task.title} {domainMap.get(task.domainId ?? task.domain ?? '') || task.domainId || task.domain}
))}
)}
); }