"use client"; import { useState, useEffect } 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 { CreateItemDialog } from "@/components/create-item-dialog"; import { useCreateDialogStore } from "@/lib/stores/use-create-dialog-store"; import { RealtimeProvider } from "@/components/realtime-provider"; 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 { 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 return (

Tasks

Move work forward without losing the thread.

{domains.length > 1 && ( )} setView(v as "kanban" | "list")}>
{domainId && (view === "kanban" ? : )} (o ? openCreate("task") : closeCreate())} onCreated={() => setRefreshKey((k) => k + 1)} />
); }