"use client"; import { useState, useEffect, useCallback } from "react"; import { LayoutGrid, List, Plus } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { TasksKanbanView } from "@/components/tasks/tasks-kanban-view"; import { TasksListView } from "@/components/tasks/tasks-list-view"; import { TaskCreateDialog } from "@/components/tasks/task-create-dialog"; import { useCreateDialogStore } from "@/lib/stores/use-create-dialog-store"; export default function TasksPage() { const [view, setView] = useState<"kanban" | "list">("kanban"); const [refreshKey, setRefreshKey] = useState(0); const [domainId, setDomainId] = useState(null); const [domains, setDomains] = useState<{ id: string; name: string; color: string | null }[]>([]); const [createOpen, setCreateOpen] = useState(false); const [createStatus, setCreateStatus] = useState('todo'); const { open, openCreate, closeCreate } = useCreateDialogStore(); // Fetch domains and select first one useEffect(() => { fetch('/api/domains?sort=sort_order') .then((res) => res.json()) .then((data) => { const items = data.items || []; setDomains(items); if (items.length > 0 && !domainId) { setDomainId(items[0].id); } }) .catch(() => {}); }, []); // eslint-disable-line react-hooks/exhaustive-deps // Listen for custom event to open create dialog with pre-filled status useEffect(() => { const handler = (e: Event) => { const detail = (e as CustomEvent).detail; if (detail?.status) setCreateStatus(detail.status); if (detail?.domainId) setDomainId(detail.domainId); setCreateOpen(true); }; document.addEventListener('open-create-task', handler); return () => document.removeEventListener('open-create-task', handler); }, []); const handleRefresh = useCallback(() => { setRefreshKey((k) => k + 1); }, []); return (

Tasks

Move work forward without losing the thread.

{/* Domain selector */} {domains.length > 1 && ( )} setView(v as "kanban" | "list")}>
{domainId ? ( view === "kanban" ? ( ) : ( ) ) : (

No domains found. Create one in Settings first.

)} {/* Create dialog */} {/* Legacy create dialog for backward compat */}
openCreate('task')} />
); }