diff --git a/src/pages/taskmanager/components/Column.tsx b/src/pages/taskmanager/components/Column.tsx index 8c64bc2..5b35ab9 100644 --- a/src/pages/taskmanager/components/Column.tsx +++ b/src/pages/taskmanager/components/Column.tsx @@ -54,7 +54,7 @@ const Column: FC = ({ const items = tasksData?.pages.flatMap((page) => page.data?.items ?? []) ?? []; return [...items] - .sort((a, b) => (a.order ?? a.priority ?? 0) - (b.order ?? b.priority ?? 0)) + .sort((a, b) => (a.priority ?? a.order ?? 0) - (b.priority ?? b.order ?? 0)) .map((task, index) => mapTaskItemToTask(task as TaskItemType, column.id, index)); }, [tasksData?.pages, column.id]); diff --git a/src/pages/taskmanager/task/utils/mapTaskItemToTask.ts b/src/pages/taskmanager/task/utils/mapTaskItemToTask.ts index bdc055c..3856576 100644 --- a/src/pages/taskmanager/task/utils/mapTaskItemToTask.ts +++ b/src/pages/taskmanager/task/utils/mapTaskItemToTask.ts @@ -4,7 +4,7 @@ import type { TaskItemType } from "../types/TaskTypes"; export const mapTaskItemToTask = (task: TaskItemType, taskPhaseId: string, fallbackOrder: number): Task => ({ id: task.id, columnId: task.taskPhaseId ?? taskPhaseId, - order: task.order ?? task.priority ?? fallbackOrder, + order: task.priority ?? task.order ?? fallbackOrder, title: task.title, tag: task.tag ?? "", dateRange: task.dateRange ?? "", diff --git a/src/pages/taskmanager/utils/getPriorityDestinationTaskId.ts b/src/pages/taskmanager/utils/getPriorityDestinationTaskId.ts index b03783a..255af6c 100644 --- a/src/pages/taskmanager/utils/getPriorityDestinationTaskId.ts +++ b/src/pages/taskmanager/utils/getPriorityDestinationTaskId.ts @@ -1,6 +1,5 @@ import type { TaskItemType } from "../task/types/TaskTypes"; - -const getTaskSortOrder = (task: TaskItemType) => task.order ?? task.priority ?? 0; +import { getTaskSortOrder } from "./getTaskSortOrder"; export const getPriorityDestinationTaskId = ( items: TaskItemType[], @@ -9,16 +8,19 @@ export const getPriorityDestinationTaskId = ( removeSource = true, ): string | null => { const sorted = [...items].sort((a, b) => getTaskSortOrder(a) - getTaskSortOrder(b)); - const sourceIndex = sorted.findIndex((item) => item.id === sourceId); - if (removeSource && sourceIndex === destIndex) return null; - - const list = removeSource ? sorted.filter((item) => item.id !== sourceId) : sorted; - if (list.length === 0) return null; - - if (destIndex >= list.length) { - return list[list.length - 1].id; + if (!removeSource) { + if (sorted.length === 0) return null; + if (destIndex >= sorted.length) return sorted[sorted.length - 1].id; + return sorted[destIndex].id; } - return list[destIndex].id; + const sourceIndex = sorted.findIndex((item) => item.id === sourceId); + if (sourceIndex === -1 || sourceIndex === destIndex) return null; + + // Dest is the task currently at the drop index (مقصد), not after removing source. + const destTask = sorted[destIndex]; + if (!destTask || destTask.id === sourceId) return null; + + return destTask.id; }; diff --git a/src/pages/taskmanager/utils/getTaskSortOrder.ts b/src/pages/taskmanager/utils/getTaskSortOrder.ts new file mode 100644 index 0000000..8ded837 --- /dev/null +++ b/src/pages/taskmanager/utils/getTaskSortOrder.ts @@ -0,0 +1,4 @@ +import type { TaskItemType } from "../task/types/TaskTypes"; + +export const getTaskSortOrder = (task: Pick) => + task.priority ?? task.order ?? 0; diff --git a/src/pages/taskmanager/utils/reorderTaskItems.ts b/src/pages/taskmanager/utils/reorderTaskItems.ts index 24994ea..7296d10 100644 --- a/src/pages/taskmanager/utils/reorderTaskItems.ts +++ b/src/pages/taskmanager/utils/reorderTaskItems.ts @@ -1,6 +1,5 @@ import type { TaskItemType } from "../task/types/TaskTypes"; - -const getTaskSortOrder = (task: TaskItemType) => task.order ?? task.priority ?? 0; +import { getTaskSortOrder } from "./getTaskSortOrder"; export const reorderTaskItems = ( tasks: TaskItemType[],