import { type FC, useState } from "react"; import TaskDetailAttachmentPopover from "./attachment/TaskDetailAttachmentPopover"; import { DEFAULT_DATE_RANGE } from "./date/constants"; import TaskDetailDatePopover from "./date/TaskDetailDatePopover"; import type DateObject from "react-date-object"; import { DEFAULT_CHECKLISTS } from "./checklist/constants"; import TaskDetailChecklistPopover from "./checklist/TaskDetailChecklistPopover"; import type { TaskChecklist } from "./checklist/types"; import { DEFAULT_LABELS } from "./labels/constants"; import TaskDetailLabelsPopover from "./labels/TaskDetailLabelsPopover"; import type { LabelsView, TaskLabel } from "./labels/types"; import TaskDetailActionBar from "./TaskDetailActionBar"; import TaskDetailMetadataPreview from "./TaskDetailMetadataPreview"; import type { TaskDetailTab } from "./types"; import { DEFAULT_USERS } from "./users/constants"; import TaskDetailUsersPopover from "./users/TaskDetailUsersPopover"; type Props = { activeTab: TaskDetailTab | null; onTabChange: (tab: TaskDetailTab) => void; }; const TaskDetailToolbar: FC = ({ activeTab, onTabChange }) => { const [labelsView, setLabelsView] = useState("list"); const [labels, setLabels] = useState(DEFAULT_LABELS); const [selectedLabelIds, setSelectedLabelIds] = useState>(new Set(["1"])); const [selectedUserIds, setSelectedUserIds] = useState>(new Set(["1"])); const [checklists, setChecklists] = useState(DEFAULT_CHECKLISTS); const [startDate, setStartDate] = useState(DEFAULT_DATE_RANGE.startDate); const [endDate, setEndDate] = useState(DEFAULT_DATE_RANGE.endDate); const selectedLabels = labels.filter((label) => selectedLabelIds.has(label.id)); const selectedUsers = DEFAULT_USERS.filter((user) => selectedUserIds.has(user.id)); const isLabelsOpen = activeTab === "labels"; const isUsersOpen = activeTab === "users"; const isChecklistOpen = activeTab === "checklist"; const isAttachmentOpen = activeTab === "attachment"; const isDateOpen = activeTab === "date"; const handleTabChange = (tab: TaskDetailTab) => { if (tab === "labels" && activeTab !== "labels") { setLabelsView("list"); } onTabChange(tab); }; const handleLabelToggle = (id: string) => { setSelectedLabelIds((prev) => { const next = new Set(prev); if (next.has(id)) { next.delete(id); } else { next.add(id); } return next; }); }; const handleUserToggle = (id: string) => { setSelectedUserIds((prev) => { const next = new Set(prev); if (next.has(id)) { next.delete(id); } else { next.add(id); } return next; }); }; const handleCreate = (title: string, color: string) => { const newLabel: TaskLabel = { id: crypto.randomUUID(), title, color, }; setLabels((prev) => [...prev, newLabel]); setSelectedLabelIds((prev) => new Set([...prev, newLabel.id])); setLabelsView("list"); }; const handleChecklistClose = () => { if (isChecklistOpen) onTabChange("checklist"); }; const handleChecklistCreate = (title: string, _copyFromId: string) => { const newChecklist: TaskChecklist = { id: crypto.randomUUID(), title, }; setChecklists((prev) => [...prev, newChecklist]); handleChecklistClose(); }; const handleAttachmentClose = () => { if (isAttachmentOpen) onTabChange("attachment"); }; const handleAttachmentCreate = (_data: { file?: File; title: string; linkId: string }) => { handleAttachmentClose(); }; const handleDateClose = () => { if (isDateOpen) onTabChange("date"); }; const handleDateSubmit = (data: { startDate: DateObject | null; endDate: DateObject | null }) => { setStartDate(data.startDate); setEndDate(data.endDate); handleDateClose(); }; return (
) : null } usersPopover={ isUsersOpen ? ( ) : null } checklistPopover={ isChecklistOpen ? ( ) : null } attachmentPopover={ isAttachmentOpen ? ( ) : null } datePopover={ isDateOpen ? ( ) : null } />
); }; export default TaskDetailToolbar;