diff --git a/src/app/deals/components/Board/BoardMenu.tsx b/src/app/deals/components/Board/BoardMenu.tsx index c81cde9..db7e176 100644 --- a/src/app/deals/components/Board/BoardMenu.tsx +++ b/src/app/deals/components/Board/BoardMenu.tsx @@ -27,17 +27,13 @@ const BoardMenu: FC = ({ isHovered, board, startEditing }) => { : 0, cursor: "pointer", }} - onClick={e => { - e.preventDefault(); - e.stopPropagation(); - }}> + onClick={e => e.stopPropagation()}> { - e.preventDefault(); e.stopPropagation(); startEditing(); }}> @@ -46,7 +42,11 @@ const BoardMenu: FC = ({ isHovered, board, startEditing }) => { Переименовать - onDeleteBoard(board.id)}> + { + e.stopPropagation(); + onDeleteBoard(board); + }}> Удалить diff --git a/src/app/deals/components/StatusColumnWrapper/StatusMenu.tsx b/src/app/deals/components/StatusColumnWrapper/StatusMenu.tsx index 5476f5f..781a40d 100644 --- a/src/app/deals/components/StatusColumnWrapper/StatusMenu.tsx +++ b/src/app/deals/components/StatusColumnWrapper/StatusMenu.tsx @@ -20,17 +20,13 @@ const StatusMenu: FC = ({ status, handleEdit }) => { style={{ cursor: "pointer", }} - onClick={e => { - e.preventDefault(); - e.stopPropagation(); - }}> + onClick={e => e.stopPropagation()}> { - e.preventDefault(); e.stopPropagation(); handleEdit(); }}> @@ -39,7 +35,11 @@ const StatusMenu: FC = ({ status, handleEdit }) => { Переименовать - onDeleteStatus(status.id)}> + { + e.stopPropagation(); + onDeleteStatus(status); + }}> Удалить diff --git a/src/app/deals/contexts/BoardsContext.tsx b/src/app/deals/contexts/BoardsContext.tsx index cfc010f..38dc146 100644 --- a/src/app/deals/contexts/BoardsContext.tsx +++ b/src/app/deals/contexts/BoardsContext.tsx @@ -20,7 +20,7 @@ type BoardsContextState = { refetchBoards: () => void; onCreateBoard: (name: string) => void; onUpdateBoard: (boardId: number, board: UpdateBoardSchema) => void; - onDeleteBoard: (boardId: number) => void; + onDeleteBoard: (board: BoardSchema) => void; }; const BoardsContext = createContext(undefined); diff --git a/src/app/deals/contexts/StatusesContext.tsx b/src/app/deals/contexts/StatusesContext.tsx index c3a79af..fb5f085 100644 --- a/src/app/deals/contexts/StatusesContext.tsx +++ b/src/app/deals/contexts/StatusesContext.tsx @@ -28,7 +28,7 @@ type StatusesContextState = { refetchStatuses: () => void; onCreateStatus: (name: string) => void; onUpdateStatus: (statusId: number, status: UpdateStatusSchema) => void; - onDeleteStatus: (statusId: number) => void; + onDeleteStatus: (status: StatusSchema) => void; }; const StatusesContext = createContext( diff --git a/src/hooks/useBoardsOperations.ts b/src/hooks/useBoardsOperations.tsx similarity index 78% rename from src/hooks/useBoardsOperations.ts rename to src/hooks/useBoardsOperations.tsx index 2aeb5e3..650d8e9 100644 --- a/src/hooks/useBoardsOperations.ts +++ b/src/hooks/useBoardsOperations.tsx @@ -2,6 +2,8 @@ import React from "react"; import { useMutation } from "@tanstack/react-query"; import { AxiosError } from "axios"; import { LexoRank } from "lexorank"; +import { Text } from "@mantine/core"; +import { modals } from "@mantine/modals"; import { BoardSchema, HttpValidationError, @@ -93,11 +95,23 @@ export const useBoardsOperations = ({ ); }; - const onDeleteBoard = (boardId: number) => { - deleteBoard.mutate({ - path: { boardId }, + const onDeleteBoard = (board: BoardSchema) => { + modals.openConfirmModal({ + title: "Удаление доски", + children: ( + + Вы уверены, что хотите удалить доску "{board.name}"? + + ), + labels: { confirm: "Да", cancel: "Нет" }, + confirmProps: { color: "red" }, + onConfirm: () => { + deleteBoard.mutate({ + path: { boardId: board.id }, + }); + setBoards(boards => boards.filter(b => b.id !== board.id)); + }, }); - setBoards(boards => boards.filter(board => board.id !== boardId)); }; return { diff --git a/src/hooks/useStatusesOperations.ts b/src/hooks/useStatusesOperations.tsx similarity index 77% rename from src/hooks/useStatusesOperations.ts rename to src/hooks/useStatusesOperations.tsx index 0ab66de..3ac4ef5 100644 --- a/src/hooks/useStatusesOperations.ts +++ b/src/hooks/useStatusesOperations.tsx @@ -2,6 +2,8 @@ import React from "react"; import { useMutation } from "@tanstack/react-query"; import { AxiosError } from "axios"; import { LexoRank } from "lexorank"; +import { Text } from "@mantine/core"; +import { modals } from "@mantine/modals"; import { HttpValidationError, StatusSchema, @@ -93,13 +95,25 @@ export const useStatusesOperations = ({ ); }; - const onDeleteStatus = (statusId: number) => { - deleteStatus.mutate({ - path: { statusId }, + const onDeleteStatus = (status: StatusSchema) => { + modals.openConfirmModal({ + title: "Удаление колонки", + children: ( + + Вы уверены, что хотите удалить колонку "{status.name}"? + + ), + labels: { confirm: "Да", cancel: "Нет" }, + confirmProps: { color: "red" }, + onConfirm: () => { + deleteStatus.mutate({ + path: { statusId: status.id }, + }); + setStatuses(statuses => + statuses.filter(s => s.id !== status.id) + ); + }, }); - setStatuses(statuses => - statuses.filter(status => status.id !== statusId) - ); }; return {