feat: status updating on the server and statuses fetching

This commit is contained in:
2025-08-04 18:49:27 +04:00
parent 24de9f5446
commit c98a5cc811
9 changed files with 277 additions and 26 deletions

View File

@ -2,7 +2,6 @@
import React from "react";
import { useMutation } from "@tanstack/react-query";
import { AxiosError } from "axios";
import { ScrollArea } from "@mantine/core";
import Board from "@/app/deals/components/Board/Board";
import { useBoardsContext } from "@/app/deals/contexts/BoardsContext";
@ -10,17 +9,16 @@ import { BoardSchema } from "@/client";
import { updateBoardMutation } from "@/client/@tanstack/react-query.gen";
import SortableDnd from "@/components/SortableDnd";
import { notifications } from "@/lib/notifications";
import { ErrorBody } from "@/types/ErrorBody";
const Boards = () => {
const { boards, setSelectedBoard, refetchBoards } = useBoardsContext();
const updateBoard = useMutation({
...updateBoardMutation(),
onError: (error: AxiosError<ErrorBody>) => {
onError: error => {
console.error(error);
notifications.error({
message: error.response?.data?.detail,
message: error.response?.data?.detail as string | undefined,
});
refetchBoards();
},

View File

@ -1,8 +1,25 @@
"use client";
import { useMutation } from "@tanstack/react-query";
import StatusColumnsDnd from "@/app/deals/components/StatusColumnsDnd/StatusColumnsDnd";
import { useStatusesContext } from "@/app/deals/contexts/StatusesContext";
import { updateStatusMutation } from "@/client/@tanstack/react-query.gen";
import { notifications } from "@/lib/notifications";
const StatusColumns = () => {
const { refetchStatuses } = useStatusesContext();
const updateStatus = useMutation({
...updateStatusMutation(),
onError: error => {
console.error(error);
notifications.error({
message: error.response?.data?.detail as string | undefined,
});
refetchStatuses();
},
});
const onDealDragEnd = (
dealId: number,
statusId: number,
@ -19,7 +36,25 @@ const StatusColumns = () => {
);
};
const onStatusDragEnd = (statusId: number, lexorank: string) => {};
const onStatusDragEnd = (statusId: number, lexorank: string) => {
console.log(
"onStatusDragEnd, statusId:",
statusId,
", lexo:",
lexorank
);
updateStatus.mutate({
path: {
statusId,
},
body: {
status: {
lexorank,
},
},
});
};
return (
<StatusColumnsDnd

View File

@ -1,21 +1,17 @@
"use client";
import React, {
createContext,
FC,
useContext,
useEffect,
useState,
} from "react";
import React, { createContext, FC, useContext, useEffect } from "react";
import { useBoardsContext } from "@/app/deals/contexts/BoardsContext";
import { DealSchema, StatusSchema } from "@/client";
import useDealsList from "@/hooks/useDealsList";
import useStatusesList from "@/hooks/useStatusesList";
type StatusesContextState = {
statuses: StatusSchema[];
setStatuses: React.Dispatch<React.SetStateAction<StatusSchema[]>>;
deals: DealSchema[];
setDeals: React.Dispatch<React.SetStateAction<DealSchema[]>>;
refetchStatuses: () => void;
};
const StatusesContext = createContext<StatusesContextState | undefined>(
@ -23,12 +19,14 @@ const StatusesContext = createContext<StatusesContextState | undefined>(
);
const useStatusesContextState = () => {
const [statuses, setStatuses] = useState<StatusSchema[]>([]);
const { selectedBoard } = useBoardsContext();
const { statuses, setStatuses, refetch } = useStatusesList({
boardId: selectedBoard?.id,
});
const { deals, setDeals } = useDealsList({ boardId: selectedBoard?.id });
useEffect(() => {
setStatuses(selectedBoard?.statuses ?? []);
refetch();
}, [selectedBoard]);
return {
@ -36,6 +34,7 @@ const useStatusesContextState = () => {
setStatuses,
deals,
setDeals,
refetchStatuses: refetch,
};
};

View File

@ -175,7 +175,7 @@ const useDnd = (props: Props) => {
overStatusId = deal.statusId;
}
if (!overStatusId || activeStatusId === overStatusId) return;
if (!overStatusId) return;
const newRank = getNewStatusRank(activeStatusId, overStatusId);
if (!newRank) return;