"use client"; import { Tag, TagId, Task, TaskId, Status } from "@/lib/types"; import { Color } from "@/lib/ui/color"; import BoardView from "./board/BoardView"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "../ui/tabs"; import { TableView } from "./table/TableView"; import EditView from "./edit/EditView"; import { Button } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, DropdownMenuSeparator, } from "@/components/ui/dropdown-menu"; import { FileDown } from "lucide-react"; import { downloadFile, exportTodoAsJson, exportTodoAsCsv, exportTodoAsMarkdown, } from "@/lib/export"; import { useEffect, useState } from "react"; export type TaskViewProps = { tags: Record; tasks: Record; statuses: Status[]; /** Update entire tasks record */ setTasks: (tasks: Record) => void; /** Update tags */ setTags: (tags: Record) => void; /** Update statuses */ setStatuses: (statuses: Status[]) => void; /** Create a new task with a status */ createTask: (statusId: string) => void; /** Entity name for export */ entityName?: string; }; export default function TaskView({ tags, tasks, statuses, setTasks, setTags, setStatuses, createTask, entityName = "Tasks", }: TaskViewProps) { const [isExporting, setIsExporting] = useState(false); const handleExport = (format: "json" | "csv" | "markdown") => { const todoEntity = { id: "", type: "todo" as const, name: entityName, config: { statuses }, tags, tasks, createdAt: Date.now(), updatedAt: Date.now(), }; let content = ""; let filename = `${entityName.replace(/\s+/g, "_")}_${Date.now()}`; switch (format) { case "json": content = exportTodoAsJson(todoEntity); filename += ".json"; break; case "csv": content = exportTodoAsCsv(todoEntity); filename += ".csv"; break; case "markdown": content = exportTodoAsMarkdown(todoEntity); filename += ".md"; break; } downloadFile(content, filename, "text/plain"); }; return (
Board Table Edit handleExport("csv")}> Export as CSV handleExport("markdown")}> Export as Markdown handleExport("json")}> Export as JSON
); }