import { useEffect, useState, type ReactElement } from 'react'; import { KanbanBoard } from '@/components/tasks/kanban-board'; import { TaskDetailModal } from '@/components/tasks/task-detail-modal'; import { TaskListView } from '@/components/tasks/task-list-view'; import { api } from '@/lib/api'; import { cn } from '@/lib/cn'; import type { Task } from '@/lib/types'; import { getErrorMessage } from './page-errors'; type ViewMode = 'list' | 'kanban'; export function TasksPage(): ReactElement { const [tasks, setTasks] = useState([]); const [view, setView] = useState('kanban'); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [selectedTask, setSelectedTask] = useState(null); useEffect(() => { let cancelled = false; void api('/api/tasks') .then((response) => { if (cancelled) return; setTasks(response); }) .catch((caught: unknown) => { if (cancelled) return; setError(getErrorMessage(caught, 'Failed to load tasks.')); }) .finally(() => { if (cancelled) return; setLoading(false); }); return () => { cancelled = true; }; }, []); return (

Tasks

{error ? (
{error}
) : null} {loading ? (

Loading tasks...

) : view === 'kanban' ? ( ) : ( )} {selectedTask ? ( setSelectedTask(null)} /> ) : null}
); }