feat: board name editing

This commit is contained in:
2025-08-07 12:31:00 +04:00
parent 41f8d19d49
commit 7e2dd9763b
6 changed files with 251 additions and 128 deletions

View File

@ -7,17 +7,10 @@ import React, {
useEffect,
useState,
} from "react";
import { useMutation } from "@tanstack/react-query";
import { LexoRank } from "lexorank";
import { useProjectsContext } from "@/app/deals/contexts/ProjectsContext";
import useBoardsList from "@/hooks/useBoardsList";
import { BoardSchema } from "@/lib/client";
import {
createBoardMutation,
deleteBoardMutation,
} from "@/lib/client/@tanstack/react-query.gen";
import { notifications } from "@/lib/notifications";
import { getMaxByLexorank, getNewLexorank } from "@/utils/lexorank";
import { useBoardsOperations } from "@/hooks/useBoardsOperations";
import { BoardSchema, UpdateBoardSchema } from "@/lib/client";
type BoardsContextState = {
boards: BoardSchema[];
@ -25,8 +18,9 @@ type BoardsContextState = {
selectedBoard: BoardSchema | null;
setSelectedBoard: React.Dispatch<React.SetStateAction<BoardSchema | null>>;
refetchBoards: () => void;
onCreateBoardClick: (name: string) => void;
onDeleteBoardClick: (boardId: number) => void;
onCreateBoard: (name: string) => void;
onUpdateBoard: (boardId: number, board: UpdateBoardSchema) => void;
onDeleteBoard: (boardId: number) => void;
};
const BoardsContext = createContext<BoardsContextState | undefined>(undefined);
@ -58,57 +52,14 @@ const useBoardsContextState = () => {
}
}, [boards]);
const createBoard = useMutation({
...createBoardMutation(),
onError: error => {
console.error(error);
notifications.error({
message: error.response?.data?.detail as string | undefined,
});
refetchBoards();
},
onSuccess: res => {
setBoards([...boards, res.board]);
},
});
const onCreateBoardClick = (name: string) => {
if (!project) return;
const lastBoard = getMaxByLexorank(boards);
const newLexorank = getNewLexorank(
lastBoard ? LexoRank.parse(lastBoard.lexorank) : null
);
createBoard.mutate({
body: {
board: {
name,
projectId: project.id,
lexorank: newLexorank.toString(),
},
},
});
};
const deleteBoard = useMutation({
...deleteBoardMutation(),
onError: error => {
console.error(error);
notifications.error({
message: error.response?.data?.detail as string | undefined,
});
refetchBoards();
},
});
const onDeleteBoardClick = (boardId: number) => {
deleteBoard.mutate({
path: {
boardId,
},
});
setBoards(boards => boards.filter(board => board.id !== boardId));
};
const { onCreateBoard, onUpdateBoard, onDeleteBoard } = useBoardsOperations(
{
boards,
setBoards,
refetchBoards,
projectId: project?.id,
}
);
return {
boards,
@ -116,8 +67,9 @@ const useBoardsContextState = () => {
selectedBoard,
setSelectedBoard,
refetchBoards,
onCreateBoardClick,
onDeleteBoardClick,
onCreateBoard,
onUpdateBoard,
onDeleteBoard,
};
};