track time

This commit is contained in:
hamid zarghami
2026-07-15 10:24:05 +03:30
parent a4b263cfd7
commit 443d97f898
14 changed files with 339 additions and 56 deletions
+26 -49
View File
@@ -10,18 +10,13 @@ import HeaderWorkspace from "./components/HeaderWorkspace";
import TaskDetailModal from "./components/task-detail/TaskDetailModal";
import { useGetProject } from "./project/hooks/useProjectData";
import { useUpdateTaskPhase } from "./task-phase/hooks/useTaskPhaseData";
import { useChangeTaskPhase, useChangeTaskPriority } from "./task/hooks/useTaskData";
import type { TaskPhaseItemType } from "./task-phase/types/TaskPhaseTypes";
import { useChangeTaskPhase, useChangeTaskPriority } from "./task/hooks/useTaskData";
import type { Column as ColumnType, Task } from "./types";
import { getPriorityDestinationTaskId } from "./utils/getPriorityDestinationTaskId";
import { reorderColumns } from "./utils/reorderColumns";
import { reorderTaskItems } from "./utils/reorderTaskItems";
import {
getTaskPhaseItems,
insertTaskPhaseItem,
type TasksByTaskPhaseInfiniteData,
updateTaskPhaseItems,
} from "./utils/taskPhaseQueryCache";
import { getTaskPhaseItems, insertTaskPhaseItem, updateTaskPhaseItems, type TasksByTaskPhaseInfiniteData } from "./utils/taskPhaseQueryCache";
const Workspace: FC = () => {
const queryClient = useQueryClient();
@@ -68,18 +63,13 @@ const Workspace: FC = () => {
setDraggedTask(null);
if (!columnChanged) {
const previousData = queryClient.getQueryData<TasksByTaskPhaseInfiniteData>([
"tasks-by-task-phase",
columnId,
]);
const previousData = queryClient.getQueryData<TasksByTaskPhaseInfiniteData>(["tasks-by-task-phase", columnId]);
const currentItems = getTaskPhaseItems(previousData);
const destTaskId = getPriorityDestinationTaskId(currentItems, activeTask.id, index);
if (!destTaskId) return;
queryClient.setQueryData<TasksByTaskPhaseInfiniteData>(["tasks-by-task-phase", columnId], (current) =>
updateTaskPhaseItems(current, (items) => reorderTaskItems(items, activeTask.id, index)),
);
queryClient.setQueryData<TasksByTaskPhaseInfiniteData>(["tasks-by-task-phase", columnId], (current) => updateTaskPhaseItems(current, (items) => reorderTaskItems(items, activeTask.id, index)));
changeTaskPriority.mutate(
{ srcId: activeTask.id, destId: destTaskId, taskPhaseId: columnId, projectId },
@@ -95,41 +85,34 @@ const Workspace: FC = () => {
return;
}
const previousSource = queryClient.getQueryData<TasksByTaskPhaseInfiniteData>([
"tasks-by-task-phase",
sourceColumnId,
]);
const previousDest = queryClient.getQueryData<TasksByTaskPhaseInfiniteData>([
"tasks-by-task-phase",
columnId,
]);
const previousSource = queryClient.getQueryData<TasksByTaskPhaseInfiniteData>(["tasks-by-task-phase", sourceColumnId]);
const previousDest = queryClient.getQueryData<TasksByTaskPhaseInfiniteData>(["tasks-by-task-phase", columnId]);
queryClient.setQueryData<TasksByTaskPhaseInfiniteData>(["tasks-by-task-phase", sourceColumnId], (current) =>
updateTaskPhaseItems(current, (items) => items.filter((task) => task.id !== activeTask.id)),
);
queryClient.setQueryData<TasksByTaskPhaseInfiniteData>(["tasks-by-task-phase", columnId], (current) =>
insertTaskPhaseItem(current, {
id: activeTask.id,
title: activeTask.title,
taskPhaseId: columnId,
order: index,
priority: index,
tag: activeTask.tag,
dateRange: activeTask.dateRange,
color: activeTask.color,
attachments: activeTask.attachments,
checklistDone: activeTask.checklistDone,
checklistTotal: activeTask.checklistTotal,
}, index),
insertTaskPhaseItem(
current,
{
id: activeTask.id,
title: activeTask.title,
taskPhaseId: columnId,
order: index,
priority: index,
tag: activeTask.tag,
dateRange: activeTask.dateRange,
color: activeTask.color,
attachments: activeTask.attachments,
checklistDone: activeTask.checklistDone,
checklistTotal: activeTask.checklistTotal,
},
index,
),
);
const destTaskId = getPriorityDestinationTaskId(
getTaskPhaseItems(previousDest),
activeTask.id,
index,
false,
);
const destTaskId = getPriorityDestinationTaskId(getTaskPhaseItems(previousDest), activeTask.id, index, false);
if (selectedTask?.id === activeTask.id) {
setSelectedTask({ ...activeTask, columnId });
@@ -214,16 +197,10 @@ const Workspace: FC = () => {
);
};
const nextColumnOrder = columns.length
? Math.max(...columns.map((column) => column.order ?? 0)) + 1
: 1;
const nextColumnOrder = columns.length ? Math.max(...columns.map((column) => column.order ?? 0)) + 1 : 1;
const handleColumnCreated = (phase: TaskPhaseItemType) => {
setColumns((prev) =>
[...prev, { id: phase.id, title: phase.name, color: phase.color, order: phase.order }].sort(
(a, b) => (a.order ?? 0) - (b.order ?? 0),
),
);
setColumns((prev) => [...prev, { id: phase.id, title: phase.name, color: phase.color, order: phase.order }].sort((a, b) => (a.order ?? 0) - (b.order ?? 0)));
};
const handleColumnDeleted = (columnId: string) => {