import { apiCall, Task } from "@/lib"; import { AddLarge, Edit, TrashCan } from "@carbon/icons-react"; import { Button, ButtonGroup, Checkbox, Table, TableBody, TableCell, TableColumn, TableHeader, TableRow, Tooltip, } from "@heroui/react"; import { useAsyncList } from "@react-stately/data"; import { useState } from "react"; import AddTask from "./AddTask"; import EditTask from "./EditTask"; import DeleteConfirmation from "@/components/DeleteConfirmation"; import zustand from "@/Zustand"; export default function Tasks() { const [showAddTask, setShowAddTask] = useState(false); const [editTask, setEditTask] = useState(); const [deleteTask, setDeleteTask] = useState(); const tasks = useAsyncList({ async load() { const result = await apiCall("GET", "tasks"); if (result.ok) { const json = (await result.json()) as Task[]; return { items: json, }; } else { return { items: [], }; } }, async sort({ items, sortDescriptor }) { return { items: items.sort((a, b) => { let cmp = 0; switch (sortDescriptor.column) { case "text": cmp = a.taskName.localeCompare(b.taskName); break; case "enabled": if (a.enabled && !b.enabled) { cmp = -1; } else if (!a.enabled && b.enabled) { cmp = 1; } break; } if (sortDescriptor.direction === "descending") { cmp *= -1; } return cmp; }), }; }, }); function reload() { // clear the zustand zustand.getState().patch({ tasks: undefined }); // reload the tasks tasks.reload(); } async function sendDeleteTask(taskID: number | undefined) { if (taskID !== undefined) { const result = await apiCall("DELETE", "tasks", { taskID }); if (result.ok) { tasks.reload(); setDeleteTask(undefined); } } } const topContent = (
); return (
tr]:first:!shadow-border", }} > Name Enabled Edit {(task) => ( {task.taskName} )}
(!isOpen ? setEditTask(undefined) : null)} onSuccess={reload} /> (!isOpen ? setDeleteTask(undefined) : null)} itemName="Task" onDelete={() => sendDeleteTask(deleteTask?.taskID)} > {!!deleteTask ? ( <> The task{" "} {deleteTask.taskName} {" "} will be deleted. ) : null}
); }