import { useMemo, useState, type FC } from "react"; import { useParams } from "react-router-dom"; import AddNewColumn from "./components/AddNewColumn"; import Column from "./components/Column"; import HeaderWorkspace from "./components/HeaderWorkspace"; import TaskDetailModal from "./components/task-detail/TaskDetailModal"; import tasksData from "./data/tasks.json"; import type { TaskPhaseItemType } from "./task-phase/types/TaskPhaseTypes"; import type { Task, WorkspaceData } from "./types"; import { reorderColumns } from "./utils/reorderColumns"; import { reorderTasks } from "./utils/reorderTasks"; const Workspace: FC = () => { const { slug: projectId = "" } = useParams<{ slug: string }>(); const [columns, setColumns] = useState( (tasksData as WorkspaceData).columns, ); const [tasks, setTasks] = useState(tasksData.tasks as Task[]); const [draggedTaskId, setDraggedTaskId] = useState(null); const [draggedColumnId, setDraggedColumnId] = useState(null); const [selectedTask, setSelectedTask] = useState(null); const tasksByColumn = useMemo(() => { return columns.reduce>((acc, column) => { acc[column.id] = tasks .filter((task) => task.columnId === column.id) .sort((a, b) => a.order - b.order); return acc; }, {}); }, [columns, tasks]); const handleDragStart = (taskId: string) => { setDraggedTaskId(taskId); }; const handleDragEnd = () => { setDraggedTaskId(null); }; const handleDrop = (columnId: string, index: number) => { if (!draggedTaskId) return; setTasks((prev) => reorderTasks(prev, draggedTaskId, columnId, index)); setDraggedTaskId(null); }; const handleColumnDragStart = (columnId: string) => { setDraggedColumnId(columnId); }; const handleColumnDragEnd = () => { setDraggedColumnId(null); }; const handleColumnDrop = (overColumnId: string) => { if (!draggedColumnId || draggedColumnId === overColumnId) return; setColumns((prev) => reorderColumns(prev, draggedColumnId, overColumnId)); setDraggedColumnId(null); }; const handleColumnCreated = (phase: TaskPhaseItemType) => { setColumns((prev) => [ ...prev, { id: phase.id, title: phase.name, color: phase.color, order: phase.order, }, ]); }; const handleColumnDeleted = (columnId: string) => { setColumns((prev) => prev.filter((column) => column.id !== columnId)); setTasks((prev) => prev.filter((task) => task.columnId !== columnId)); if (selectedTask?.columnId === columnId) { setSelectedTask(null); } }; const selectedTaskColumn = selectedTask ? columns.find((column) => column.id === selectedTask.columnId) : null; return (
{columns.map((column) => ( ))}
setSelectedTask(null)} />
); }; export default Workspace;