This commit is contained in:
@@ -10,12 +10,14 @@ 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 } from "./task/hooks/useTaskData";
|
||||
import { useChangeTaskPhase, useChangeTaskPriority } from "./task/hooks/useTaskData";
|
||||
import type { TaskPhaseItemType } from "./task-phase/types/TaskPhaseTypes";
|
||||
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,
|
||||
@@ -26,6 +28,7 @@ const Workspace: FC = () => {
|
||||
const { slug: projectId = "" } = useParams<{ slug: string }>();
|
||||
const { data: project, isPending } = useGetProject(projectId);
|
||||
const changeTaskPhase = useChangeTaskPhase();
|
||||
const changeTaskPriority = useChangeTaskPriority();
|
||||
const updateTaskPhase = useUpdateTaskPhase();
|
||||
const [columns, setColumns] = useState<ColumnType[]>([]);
|
||||
const [draggedTask, setDraggedTask] = useState<Task | null>(null);
|
||||
@@ -65,9 +68,30 @@ const Workspace: FC = () => {
|
||||
setDraggedTask(null);
|
||||
|
||||
if (!columnChanged) {
|
||||
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)),
|
||||
);
|
||||
|
||||
changeTaskPriority.mutate(
|
||||
{ srcId: activeTask.id, destId: destTaskId, taskPhaseId: columnId, projectId },
|
||||
{
|
||||
onError: (error: ErrorType) => {
|
||||
if (previousData) {
|
||||
queryClient.setQueryData(["tasks-by-task-phase", columnId], previousData);
|
||||
}
|
||||
toast.error(error.response?.data?.error.message[0]);
|
||||
},
|
||||
},
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -100,6 +124,13 @@ const Workspace: FC = () => {
|
||||
}, index),
|
||||
);
|
||||
|
||||
const destTaskId = getPriorityDestinationTaskId(
|
||||
getTaskPhaseItems(previousDest),
|
||||
activeTask.id,
|
||||
index,
|
||||
false,
|
||||
);
|
||||
|
||||
if (selectedTask?.id === activeTask.id) {
|
||||
setSelectedTask({ ...activeTask, columnId });
|
||||
}
|
||||
@@ -108,6 +139,20 @@ const Workspace: FC = () => {
|
||||
{ id: activeTask.id, params: { taskPhaseId: columnId }, projectId },
|
||||
{
|
||||
onSuccess: () => {
|
||||
if (destTaskId) {
|
||||
changeTaskPriority.mutate(
|
||||
{ srcId: activeTask.id, destId: destTaskId, taskPhaseId: columnId, projectId },
|
||||
{
|
||||
onError: (error: ErrorType) => {
|
||||
queryClient.invalidateQueries({ queryKey: ["tasks-by-task-phase", sourceColumnId] });
|
||||
queryClient.invalidateQueries({ queryKey: ["tasks-by-task-phase", columnId] });
|
||||
toast.error(error.response?.data?.error.message[0]);
|
||||
},
|
||||
},
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
queryClient.invalidateQueries({ queryKey: ["tasks-by-task-phase", sourceColumnId] });
|
||||
queryClient.invalidateQueries({ queryKey: ["tasks-by-task-phase", columnId] });
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user