refactor: base crud hook
This commit is contained in:
@ -39,14 +39,12 @@ const useBoardsContextState = () => {
|
|||||||
setSelectedBoardId(boards[0].id);
|
setSelectedBoardId(boards[0].id);
|
||||||
}
|
}
|
||||||
|
|
||||||
const { onCreateBoard, onUpdateBoard, onDeleteBoard } = useBoardsOperations(
|
const { onCreate, onUpdate, onDelete } = useBoardsOperations({
|
||||||
{
|
|
||||||
boards,
|
boards,
|
||||||
setBoards,
|
setBoards,
|
||||||
refetchBoards,
|
refetchBoards,
|
||||||
projectId: project?.id,
|
projectId: project?.id,
|
||||||
}
|
});
|
||||||
);
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
boards,
|
boards,
|
||||||
@ -54,9 +52,9 @@ const useBoardsContextState = () => {
|
|||||||
selectedBoard,
|
selectedBoard,
|
||||||
setSelectedBoardId,
|
setSelectedBoardId,
|
||||||
refetchBoards,
|
refetchBoards,
|
||||||
onCreateBoard,
|
onCreateBoard: onCreate,
|
||||||
onUpdateBoard,
|
onUpdateBoard: onUpdate,
|
||||||
onDeleteBoard,
|
onDeleteBoard: onDelete,
|
||||||
isEditorDrawerOpened,
|
isEditorDrawerOpened,
|
||||||
setIsEditorDrawerOpened,
|
setIsEditorDrawerOpened,
|
||||||
};
|
};
|
||||||
|
|||||||
@ -36,8 +36,7 @@ const useProjectsContextState = () => {
|
|||||||
setSelectedProjectId(projects[0].id);
|
setSelectedProjectId(projects[0].id);
|
||||||
}
|
}
|
||||||
|
|
||||||
const { onCreateProject, onUpdateProject, onDeleteProject } =
|
const { onCreate, onUpdate, onDelete } = useProjectsOperations({
|
||||||
useProjectsOperations({
|
|
||||||
projects,
|
projects,
|
||||||
setProjects,
|
setProjects,
|
||||||
refetchProjects,
|
refetchProjects,
|
||||||
@ -48,9 +47,9 @@ const useProjectsContextState = () => {
|
|||||||
selectedProject,
|
selectedProject,
|
||||||
refetchProjects,
|
refetchProjects,
|
||||||
setSelectedProjectId,
|
setSelectedProjectId,
|
||||||
onCreateProject,
|
onCreateProject: onCreate,
|
||||||
onUpdateProject,
|
onUpdateProject: onUpdate,
|
||||||
onDeleteProject,
|
onDeleteProject: onDelete,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -29,8 +29,7 @@ const useStatusesContextState = () => {
|
|||||||
boardId: selectedBoard?.id,
|
boardId: selectedBoard?.id,
|
||||||
});
|
});
|
||||||
|
|
||||||
const { onCreateStatus, onUpdateStatus, onDeleteStatus } =
|
const { onCreate, onUpdate, onDelete } = useStatusesOperations({
|
||||||
useStatusesOperations({
|
|
||||||
statuses,
|
statuses,
|
||||||
setStatuses,
|
setStatuses,
|
||||||
refetchStatuses,
|
refetchStatuses,
|
||||||
@ -41,9 +40,9 @@ const useStatusesContextState = () => {
|
|||||||
statuses,
|
statuses,
|
||||||
setStatuses,
|
setStatuses,
|
||||||
refetchStatuses,
|
refetchStatuses,
|
||||||
onCreateStatus,
|
onCreateStatus: onCreate,
|
||||||
onUpdateStatus,
|
onUpdateStatus: onUpdate,
|
||||||
onDeleteStatus,
|
onDeleteStatus: onDelete,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -32,8 +32,7 @@ const useBoardStatusesContextState = ({ board }: Props) => {
|
|||||||
boardId: board.id,
|
boardId: board.id,
|
||||||
});
|
});
|
||||||
|
|
||||||
const { onCreateStatus, onUpdateStatus, onDeleteStatus } =
|
const { onCreate, onUpdate, onDelete } = useStatusesOperations({
|
||||||
useStatusesOperations({
|
|
||||||
statuses,
|
statuses,
|
||||||
setStatuses,
|
setStatuses,
|
||||||
refetchStatuses,
|
refetchStatuses,
|
||||||
@ -45,9 +44,9 @@ const useBoardStatusesContextState = ({ board }: Props) => {
|
|||||||
statuses,
|
statuses,
|
||||||
setStatuses,
|
setStatuses,
|
||||||
refetchStatuses,
|
refetchStatuses,
|
||||||
onCreateStatus,
|
onCreateStatus: onCreate,
|
||||||
onUpdateStatus,
|
onUpdateStatus: onUpdate,
|
||||||
onDeleteStatus,
|
onDeleteStatus: onDelete,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -30,23 +30,21 @@ const useProjectBoardsContextState = ({ project }: Props) => {
|
|||||||
refetch: refetchBoards,
|
refetch: refetchBoards,
|
||||||
} = useBoardsList({ projectId: project?.id });
|
} = useBoardsList({ projectId: project?.id });
|
||||||
|
|
||||||
const { onCreateBoard, onUpdateBoard, onDeleteBoard } = useBoardsOperations(
|
const { onCreate, onUpdate, onDelete } = useBoardsOperations({
|
||||||
{
|
|
||||||
boards,
|
boards,
|
||||||
setBoards,
|
setBoards,
|
||||||
refetchBoards,
|
refetchBoards,
|
||||||
projectId: project?.id,
|
projectId: project?.id,
|
||||||
}
|
});
|
||||||
);
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
boards,
|
boards,
|
||||||
setBoards,
|
setBoards,
|
||||||
project,
|
project,
|
||||||
refetchBoards,
|
refetchBoards,
|
||||||
onCreateBoard,
|
onCreateBoard: onCreate,
|
||||||
onUpdateBoard,
|
onUpdateBoard: onUpdate,
|
||||||
onDeleteBoard,
|
onDeleteBoard: onDelete,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
3
src/hooks/base/index.ts
Normal file
3
src/hooks/base/index.ts
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import useCrudOperations from "./useCrudOperations";
|
||||||
|
|
||||||
|
export { useCrudOperations };
|
||||||
161
src/hooks/base/useCrudOperations.tsx
Normal file
161
src/hooks/base/useCrudOperations.tsx
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
import React from "react";
|
||||||
|
import { useMutation, UseMutationOptions } from "@tanstack/react-query";
|
||||||
|
import { AxiosError } from "axios";
|
||||||
|
import { Text } from "@mantine/core";
|
||||||
|
import { modals } from "@mantine/modals";
|
||||||
|
import { HttpValidationError, Options } from "@/lib/client";
|
||||||
|
import { notifications } from "@/lib/notifications";
|
||||||
|
import { sortByLexorank } from "@/utils/lexorank";
|
||||||
|
|
||||||
|
type BaseEntity = {
|
||||||
|
id: number;
|
||||||
|
name: string;
|
||||||
|
lexorank?: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type CreateMutationOptions = Options<{
|
||||||
|
body: any;
|
||||||
|
query: undefined;
|
||||||
|
path: undefined;
|
||||||
|
url: string;
|
||||||
|
}>;
|
||||||
|
|
||||||
|
type UpdateMutationOptions = Options<{
|
||||||
|
body: any;
|
||||||
|
query: undefined;
|
||||||
|
path: {
|
||||||
|
pk: number;
|
||||||
|
};
|
||||||
|
url: string;
|
||||||
|
}>;
|
||||||
|
|
||||||
|
type DeleteMutationOptions = Options<{
|
||||||
|
body: undefined;
|
||||||
|
query: undefined;
|
||||||
|
path: {
|
||||||
|
pk: number;
|
||||||
|
};
|
||||||
|
url: string;
|
||||||
|
}>;
|
||||||
|
|
||||||
|
type UseEntityOperationsProps<
|
||||||
|
TEntity extends BaseEntity,
|
||||||
|
TUpdate,
|
||||||
|
TCreate,
|
||||||
|
> = {
|
||||||
|
entities: TEntity[];
|
||||||
|
setEntities: React.Dispatch<React.SetStateAction<TEntity[]>>;
|
||||||
|
refetch: () => void;
|
||||||
|
mutations: {
|
||||||
|
create: UseMutationOptions<
|
||||||
|
any,
|
||||||
|
AxiosError<HttpValidationError>,
|
||||||
|
CreateMutationOptions
|
||||||
|
>;
|
||||||
|
update: UseMutationOptions<
|
||||||
|
any,
|
||||||
|
AxiosError<HttpValidationError>,
|
||||||
|
UpdateMutationOptions
|
||||||
|
>;
|
||||||
|
delete: UseMutationOptions<
|
||||||
|
any,
|
||||||
|
AxiosError<HttpValidationError>,
|
||||||
|
DeleteMutationOptions
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
getCreateEntity: (name: string) => TCreate | null;
|
||||||
|
getUpdateEntity: (oldEntity: TEntity, update: TUpdate) => TEntity;
|
||||||
|
getDeleteConfirmTitle: (entity: TEntity) => string;
|
||||||
|
};
|
||||||
|
|
||||||
|
const useCrudOperations = <
|
||||||
|
TEntity extends BaseEntity,
|
||||||
|
TUpdate extends object,
|
||||||
|
TCreate extends object,
|
||||||
|
>({
|
||||||
|
entities,
|
||||||
|
setEntities,
|
||||||
|
refetch,
|
||||||
|
mutations,
|
||||||
|
getCreateEntity,
|
||||||
|
getUpdateEntity,
|
||||||
|
getDeleteConfirmTitle,
|
||||||
|
}: UseEntityOperationsProps<TEntity, TUpdate, TCreate>) => {
|
||||||
|
const onError = (error: AxiosError<HttpValidationError>) => {
|
||||||
|
console.error(error);
|
||||||
|
notifications.error({
|
||||||
|
message: error.response?.data?.detail as string | undefined,
|
||||||
|
});
|
||||||
|
refetch();
|
||||||
|
};
|
||||||
|
|
||||||
|
const createMutation = useMutation({
|
||||||
|
...mutations.create,
|
||||||
|
onError,
|
||||||
|
onSuccess: (res: { entity: TEntity }) => {
|
||||||
|
setEntities([...entities, res.entity]);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const updateMutation = useMutation({
|
||||||
|
...mutations.update,
|
||||||
|
onError,
|
||||||
|
});
|
||||||
|
|
||||||
|
const deleteMutation = useMutation({
|
||||||
|
...mutations.delete,
|
||||||
|
onError,
|
||||||
|
});
|
||||||
|
|
||||||
|
const onCreate = (name: string) => {
|
||||||
|
const entity = getCreateEntity(name);
|
||||||
|
if (!entity) return;
|
||||||
|
createMutation.mutate({
|
||||||
|
body: {
|
||||||
|
entity,
|
||||||
|
},
|
||||||
|
path: undefined,
|
||||||
|
query: undefined,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const onUpdate = (id: number, update: TUpdate) => {
|
||||||
|
updateMutation.mutate({
|
||||||
|
body: {
|
||||||
|
entity: update,
|
||||||
|
},
|
||||||
|
path: { pk: id },
|
||||||
|
query: undefined,
|
||||||
|
});
|
||||||
|
setEntities(prev => {
|
||||||
|
const updated = prev.map(entity =>
|
||||||
|
entity.id === id ? getUpdateEntity(entity, update) : entity
|
||||||
|
);
|
||||||
|
if ("lexorank" in update) {
|
||||||
|
return sortByLexorank(
|
||||||
|
updated as (TEntity & { lexorank: string })[]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return updated;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const onDelete = (entity: TEntity) => {
|
||||||
|
modals.openConfirmModal({
|
||||||
|
title: getDeleteConfirmTitle(entity),
|
||||||
|
children: (
|
||||||
|
<Text>Вы уверены, что хотите удалить "{entity.name}"?</Text>
|
||||||
|
),
|
||||||
|
labels: { confirm: "Да", cancel: "Нет" },
|
||||||
|
confirmProps: { color: "red" },
|
||||||
|
onConfirm: () => {
|
||||||
|
deleteMutation.mutate({ path: { pk: entity.id } } as any);
|
||||||
|
setEntities(prev => prev.filter(e => e.id !== entity.id));
|
||||||
|
},
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
return { onCreate, onUpdate, onDelete };
|
||||||
|
};
|
||||||
|
|
||||||
|
export default useCrudOperations;
|
||||||
@ -1,12 +1,9 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { useMutation } from "@tanstack/react-query";
|
|
||||||
import { AxiosError } from "axios";
|
|
||||||
import { LexoRank } from "lexorank";
|
import { LexoRank } from "lexorank";
|
||||||
import { Text } from "@mantine/core";
|
import { useCrudOperations } from "@/hooks/base";
|
||||||
import { modals } from "@mantine/modals";
|
|
||||||
import {
|
import {
|
||||||
BoardSchema,
|
BoardSchema,
|
||||||
HttpValidationError,
|
CreateBoardSchema,
|
||||||
UpdateBoardSchema,
|
UpdateBoardSchema,
|
||||||
} from "@/lib/client";
|
} from "@/lib/client";
|
||||||
import {
|
import {
|
||||||
@ -14,12 +11,7 @@ import {
|
|||||||
deleteBoardMutation,
|
deleteBoardMutation,
|
||||||
updateBoardMutation,
|
updateBoardMutation,
|
||||||
} from "@/lib/client/@tanstack/react-query.gen";
|
} from "@/lib/client/@tanstack/react-query.gen";
|
||||||
import { notifications } from "@/lib/notifications";
|
import { getMaxByLexorank, getNewLexorank } from "@/utils/lexorank";
|
||||||
import {
|
|
||||||
getMaxByLexorank,
|
|
||||||
getNewLexorank,
|
|
||||||
sortByLexorank,
|
|
||||||
} from "@/utils/lexorank";
|
|
||||||
|
|
||||||
type UseBoardsOperationsProps = {
|
type UseBoardsOperationsProps = {
|
||||||
boards: BoardSchema[];
|
boards: BoardSchema[];
|
||||||
@ -29,9 +21,9 @@ type UseBoardsOperationsProps = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
type BoardsOperations = {
|
type BoardsOperations = {
|
||||||
onCreateBoard: (name: string) => void;
|
onCreate: (name: string) => void;
|
||||||
onUpdateBoard: (boardId: number, board: UpdateBoardSchema) => void;
|
onUpdate: (boardId: number, board: UpdateBoardSchema) => void;
|
||||||
onDeleteBoard: (board: BoardSchema) => void;
|
onDelete: (board: BoardSchema) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const useBoardsOperations = ({
|
export const useBoardsOperations = ({
|
||||||
@ -40,95 +32,34 @@ export const useBoardsOperations = ({
|
|||||||
refetchBoards,
|
refetchBoards,
|
||||||
projectId,
|
projectId,
|
||||||
}: UseBoardsOperationsProps): BoardsOperations => {
|
}: UseBoardsOperationsProps): BoardsOperations => {
|
||||||
const onError = (error: AxiosError<HttpValidationError>) => {
|
return useCrudOperations<BoardSchema, UpdateBoardSchema, CreateBoardSchema>(
|
||||||
console.error(error);
|
{
|
||||||
notifications.error({
|
entities: boards,
|
||||||
message: error.response?.data?.detail as string | undefined,
|
setEntities: setBoards,
|
||||||
});
|
refetch: refetchBoards,
|
||||||
refetchBoards();
|
mutations: {
|
||||||
};
|
create: createBoardMutation(),
|
||||||
|
update: updateBoardMutation(),
|
||||||
const createBoard = useMutation({
|
delete: deleteBoardMutation(),
|
||||||
...createBoardMutation(),
|
|
||||||
onError,
|
|
||||||
onSuccess: res => {
|
|
||||||
setBoards([...boards, res.board]);
|
|
||||||
},
|
},
|
||||||
});
|
getCreateEntity: name => {
|
||||||
|
if (!projectId) return null;
|
||||||
const updateBoard = useMutation({
|
|
||||||
...updateBoardMutation(),
|
|
||||||
onError,
|
|
||||||
});
|
|
||||||
|
|
||||||
const deleteBoard = useMutation({
|
|
||||||
...deleteBoardMutation(),
|
|
||||||
onError,
|
|
||||||
});
|
|
||||||
|
|
||||||
const onCreateBoard = (name: string) => {
|
|
||||||
if (!projectId) return;
|
|
||||||
const lastBoard = getMaxByLexorank(boards);
|
const lastBoard = getMaxByLexorank(boards);
|
||||||
const newLexorank = getNewLexorank(
|
const newLexorank = getNewLexorank(
|
||||||
lastBoard ? LexoRank.parse(lastBoard.lexorank) : null
|
lastBoard ? LexoRank.parse(lastBoard.lexorank) : null
|
||||||
);
|
);
|
||||||
|
return {
|
||||||
createBoard.mutate({
|
|
||||||
body: {
|
|
||||||
board: {
|
|
||||||
name,
|
name,
|
||||||
projectId,
|
projectId,
|
||||||
lexorank: newLexorank.toString(),
|
lexorank: newLexorank.toString(),
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
},
|
||||||
const onUpdateBoard = (boardId: number, board: UpdateBoardSchema) => {
|
getUpdateEntity: (old, update) => ({
|
||||||
updateBoard.mutate({
|
...old,
|
||||||
path: { boardId },
|
name: update.name ?? old.name,
|
||||||
body: { board },
|
lexorank: update.lexorank ?? old.lexorank,
|
||||||
});
|
}),
|
||||||
|
getDeleteConfirmTitle: () => "Удаление доски",
|
||||||
setBoards(boards =>
|
|
||||||
sortByLexorank(
|
|
||||||
boards.map(oldBoard =>
|
|
||||||
oldBoard.id !== boardId
|
|
||||||
? oldBoard
|
|
||||||
: {
|
|
||||||
id: oldBoard.id,
|
|
||||||
name: board.name ? board.name : oldBoard.name,
|
|
||||||
lexorank: board.lexorank
|
|
||||||
? board.lexorank
|
|
||||||
: oldBoard.lexorank,
|
|
||||||
}
|
}
|
||||||
)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
};
|
|
||||||
|
|
||||||
const onDeleteBoard = (board: BoardSchema) => {
|
|
||||||
modals.openConfirmModal({
|
|
||||||
title: "Удаление доски",
|
|
||||||
children: (
|
|
||||||
<Text>
|
|
||||||
Вы уверены, что хотите удалить доску "{board.name}"?
|
|
||||||
</Text>
|
|
||||||
),
|
|
||||||
labels: { confirm: "Да", cancel: "Нет" },
|
|
||||||
confirmProps: { color: "red" },
|
|
||||||
onConfirm: () => {
|
|
||||||
deleteBoard.mutate({
|
|
||||||
path: { boardId: board.id },
|
|
||||||
});
|
|
||||||
setBoards(boards => boards.filter(b => b.id !== board.id));
|
|
||||||
},
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
|
||||||
onCreateBoard,
|
|
||||||
onUpdateBoard,
|
|
||||||
onDeleteBoard,
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,10 +1,7 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { useMutation } from "@tanstack/react-query";
|
import { useCrudOperations } from "@/hooks/base";
|
||||||
import { AxiosError } from "axios";
|
|
||||||
import { Text } from "@mantine/core";
|
|
||||||
import { modals } from "@mantine/modals";
|
|
||||||
import {
|
import {
|
||||||
HttpValidationError,
|
CreateProjectSchema,
|
||||||
ProjectSchema,
|
ProjectSchema,
|
||||||
UpdateProjectSchema,
|
UpdateProjectSchema,
|
||||||
} from "@/lib/client";
|
} from "@/lib/client";
|
||||||
@ -13,7 +10,6 @@ import {
|
|||||||
deleteProjectMutation,
|
deleteProjectMutation,
|
||||||
updateProjectMutation,
|
updateProjectMutation,
|
||||||
} from "@/lib/client/@tanstack/react-query.gen";
|
} from "@/lib/client/@tanstack/react-query.gen";
|
||||||
import { notifications } from "@/lib/notifications";
|
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
projects: ProjectSchema[];
|
projects: ProjectSchema[];
|
||||||
@ -22,9 +18,9 @@ type Props = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
type ProjectsOperations = {
|
type ProjectsOperations = {
|
||||||
onCreateProject: (name: string) => void;
|
onCreate: (name: string) => void;
|
||||||
onUpdateProject: (projectId: number, project: UpdateProjectSchema) => void;
|
onUpdate: (projectId: number, project: UpdateProjectSchema) => void;
|
||||||
onDeleteProject: (project: ProjectSchema) => void;
|
onDelete: (project: ProjectSchema) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const useProjectsOperations = ({
|
export const useProjectsOperations = ({
|
||||||
@ -32,87 +28,24 @@ export const useProjectsOperations = ({
|
|||||||
setProjects,
|
setProjects,
|
||||||
refetchProjects,
|
refetchProjects,
|
||||||
}: Props): ProjectsOperations => {
|
}: Props): ProjectsOperations => {
|
||||||
const onError = (error: AxiosError<HttpValidationError>) => {
|
return useCrudOperations<
|
||||||
console.error(error);
|
ProjectSchema,
|
||||||
notifications.error({
|
UpdateProjectSchema,
|
||||||
message: error.response?.data?.detail as string | undefined,
|
CreateProjectSchema
|
||||||
});
|
>({
|
||||||
refetchProjects();
|
entities: projects,
|
||||||
};
|
setEntities: setProjects,
|
||||||
|
refetch: refetchProjects,
|
||||||
const createProject = useMutation({
|
mutations: {
|
||||||
...createProjectMutation(),
|
create: createProjectMutation(),
|
||||||
onError,
|
update: updateProjectMutation(),
|
||||||
onSuccess: res => {
|
delete: deleteProjectMutation(),
|
||||||
setProjects([...projects, res.project]);
|
|
||||||
},
|
},
|
||||||
|
getCreateEntity: name => ({ name }),
|
||||||
|
getUpdateEntity: (old, update) => ({
|
||||||
|
...old,
|
||||||
|
name: update.name ?? old.name,
|
||||||
|
}),
|
||||||
|
getDeleteConfirmTitle: () => "Удаление проекта",
|
||||||
});
|
});
|
||||||
|
|
||||||
const updateProject = useMutation({
|
|
||||||
...updateProjectMutation(),
|
|
||||||
onError,
|
|
||||||
});
|
|
||||||
|
|
||||||
const deleteProject = useMutation({
|
|
||||||
...deleteProjectMutation(),
|
|
||||||
onError,
|
|
||||||
});
|
|
||||||
|
|
||||||
const onCreateProject = (name: string) => {
|
|
||||||
createProject.mutate({
|
|
||||||
body: {
|
|
||||||
project: {
|
|
||||||
name,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const onUpdateProject = (
|
|
||||||
projectId: number,
|
|
||||||
project: UpdateProjectSchema
|
|
||||||
) => {
|
|
||||||
updateProject.mutate({
|
|
||||||
query: { projectId },
|
|
||||||
body: { project },
|
|
||||||
});
|
|
||||||
|
|
||||||
setProjects(boards =>
|
|
||||||
boards.map(oldProject =>
|
|
||||||
oldProject.id !== projectId
|
|
||||||
? oldProject
|
|
||||||
: {
|
|
||||||
id: oldProject.id,
|
|
||||||
name: project.name ? project.name : oldProject.name,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const onDeleteProject = (project: ProjectSchema) => {
|
|
||||||
modals.openConfirmModal({
|
|
||||||
title: "Удаление проекта",
|
|
||||||
children: (
|
|
||||||
<Text>
|
|
||||||
Вы уверены, что хотите удалить проект "{project.name}"?
|
|
||||||
</Text>
|
|
||||||
),
|
|
||||||
labels: { confirm: "Да", cancel: "Нет" },
|
|
||||||
confirmProps: { color: "red" },
|
|
||||||
onConfirm: () => {
|
|
||||||
deleteProject.mutate({
|
|
||||||
query: { projectId: project.id },
|
|
||||||
});
|
|
||||||
setProjects(projects =>
|
|
||||||
projects.filter(p => p.id !== project.id)
|
|
||||||
);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
|
||||||
onCreateProject,
|
|
||||||
onUpdateProject,
|
|
||||||
onDeleteProject,
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,11 +1,8 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { useMutation } from "@tanstack/react-query";
|
|
||||||
import { AxiosError } from "axios";
|
|
||||||
import { LexoRank } from "lexorank";
|
import { LexoRank } from "lexorank";
|
||||||
import { Text } from "@mantine/core";
|
import { useCrudOperations } from "@/hooks/base";
|
||||||
import { modals } from "@mantine/modals";
|
|
||||||
import {
|
import {
|
||||||
HttpValidationError,
|
CreateStatusSchema,
|
||||||
StatusSchema,
|
StatusSchema,
|
||||||
UpdateStatusSchema,
|
UpdateStatusSchema,
|
||||||
} from "@/lib/client";
|
} from "@/lib/client";
|
||||||
@ -14,12 +11,7 @@ import {
|
|||||||
deleteStatusMutation,
|
deleteStatusMutation,
|
||||||
updateStatusMutation,
|
updateStatusMutation,
|
||||||
} from "@/lib/client/@tanstack/react-query.gen";
|
} from "@/lib/client/@tanstack/react-query.gen";
|
||||||
import { notifications } from "@/lib/notifications";
|
import { getMaxByLexorank, getNewLexorank } from "@/utils/lexorank";
|
||||||
import {
|
|
||||||
getMaxByLexorank,
|
|
||||||
getNewLexorank,
|
|
||||||
sortByLexorank,
|
|
||||||
} from "@/utils/lexorank";
|
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
statuses: StatusSchema[];
|
statuses: StatusSchema[];
|
||||||
@ -29,9 +21,9 @@ type Props = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
type StatusesOperations = {
|
type StatusesOperations = {
|
||||||
onCreateStatus: (name: string) => void;
|
onCreate: (name: string) => void;
|
||||||
onUpdateStatus: (statusId: number, status: UpdateStatusSchema) => void;
|
onUpdate: (statusId: number, status: UpdateStatusSchema) => void;
|
||||||
onDeleteStatus: (status: StatusSchema) => void;
|
onDelete: (status: StatusSchema) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const useStatusesOperations = ({
|
export const useStatusesOperations = ({
|
||||||
@ -40,97 +32,36 @@ export const useStatusesOperations = ({
|
|||||||
refetchStatuses,
|
refetchStatuses,
|
||||||
boardId,
|
boardId,
|
||||||
}: Props): StatusesOperations => {
|
}: Props): StatusesOperations => {
|
||||||
const onError = (error: AxiosError<HttpValidationError>) => {
|
return useCrudOperations<
|
||||||
console.error(error);
|
StatusSchema,
|
||||||
notifications.error({
|
UpdateStatusSchema,
|
||||||
message: error.response?.data?.detail as string | undefined,
|
CreateStatusSchema
|
||||||
});
|
>({
|
||||||
refetchStatuses();
|
entities: statuses,
|
||||||
};
|
setEntities: setStatuses,
|
||||||
|
refetch: refetchStatuses,
|
||||||
const createStatus = useMutation({
|
mutations: {
|
||||||
...createStatusMutation(),
|
create: createStatusMutation(),
|
||||||
onError,
|
update: updateStatusMutation(),
|
||||||
onSuccess: res => {
|
delete: deleteStatusMutation(),
|
||||||
setStatuses([...statuses, res.status]);
|
|
||||||
},
|
},
|
||||||
});
|
getCreateEntity: name => {
|
||||||
|
if (!boardId) return null;
|
||||||
const updateStatus = useMutation({
|
const lastBoard = getMaxByLexorank(statuses);
|
||||||
...updateStatusMutation(),
|
|
||||||
onError,
|
|
||||||
});
|
|
||||||
|
|
||||||
const deleteStatus = useMutation({
|
|
||||||
...deleteStatusMutation(),
|
|
||||||
onError,
|
|
||||||
});
|
|
||||||
|
|
||||||
const onCreateStatus = (name: string) => {
|
|
||||||
if (!boardId) return;
|
|
||||||
const lastStatus = getMaxByLexorank(statuses);
|
|
||||||
const newLexorank = getNewLexorank(
|
const newLexorank = getNewLexorank(
|
||||||
lastStatus ? LexoRank.parse(lastStatus.lexorank) : null
|
lastBoard ? LexoRank.parse(lastBoard.lexorank) : null
|
||||||
);
|
);
|
||||||
|
return {
|
||||||
createStatus.mutate({
|
|
||||||
body: {
|
|
||||||
status: {
|
|
||||||
name,
|
name,
|
||||||
boardId,
|
boardId,
|
||||||
lexorank: newLexorank.toString(),
|
lexorank: newLexorank.toString(),
|
||||||
|
};
|
||||||
},
|
},
|
||||||
},
|
getUpdateEntity: (old, update) => ({
|
||||||
|
...old,
|
||||||
|
name: update.name ?? old.name,
|
||||||
|
lexorank: update.lexorank ?? old.lexorank,
|
||||||
|
}),
|
||||||
|
getDeleteConfirmTitle: () => "Удаление статуса",
|
||||||
});
|
});
|
||||||
};
|
|
||||||
|
|
||||||
const onUpdateStatus = (statusId: number, status: UpdateStatusSchema) => {
|
|
||||||
updateStatus.mutate({
|
|
||||||
path: { statusId },
|
|
||||||
body: { status },
|
|
||||||
});
|
|
||||||
|
|
||||||
setStatuses(statuses =>
|
|
||||||
sortByLexorank(
|
|
||||||
statuses.map(oldStatus =>
|
|
||||||
oldStatus.id !== statusId
|
|
||||||
? oldStatus
|
|
||||||
: {
|
|
||||||
id: oldStatus.id,
|
|
||||||
name: status.name ? status.name : oldStatus.name,
|
|
||||||
lexorank: status.lexorank
|
|
||||||
? status.lexorank
|
|
||||||
: oldStatus.lexorank,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const onDeleteStatus = (status: StatusSchema) => {
|
|
||||||
modals.openConfirmModal({
|
|
||||||
title: "Удаление колонки",
|
|
||||||
children: (
|
|
||||||
<Text>
|
|
||||||
Вы уверены, что хотите удалить колонку "{status.name}"?
|
|
||||||
</Text>
|
|
||||||
),
|
|
||||||
labels: { confirm: "Да", cancel: "Нет" },
|
|
||||||
confirmProps: { color: "red" },
|
|
||||||
onConfirm: () => {
|
|
||||||
deleteStatus.mutate({
|
|
||||||
path: { statusId: status.id },
|
|
||||||
});
|
|
||||||
setStatuses(statuses =>
|
|
||||||
statuses.filter(s => s.id !== status.id)
|
|
||||||
);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
|
||||||
onCreateStatus,
|
|
||||||
onUpdateStatus,
|
|
||||||
onDeleteStatus,
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|||||||
@ -161,7 +161,7 @@ export const deleteBoard = <ThrowOnError extends boolean = false>(
|
|||||||
responseValidator: async data => {
|
responseValidator: async data => {
|
||||||
return await zDeleteBoardResponse2.parseAsync(data);
|
return await zDeleteBoardResponse2.parseAsync(data);
|
||||||
},
|
},
|
||||||
url: "/board/{boardId}",
|
url: "/board/{pk}",
|
||||||
...options,
|
...options,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@ -184,7 +184,7 @@ export const updateBoard = <ThrowOnError extends boolean = false>(
|
|||||||
responseValidator: async data => {
|
responseValidator: async data => {
|
||||||
return await zUpdateBoardResponse2.parseAsync(data);
|
return await zUpdateBoardResponse2.parseAsync(data);
|
||||||
},
|
},
|
||||||
url: "/board/{boardId}",
|
url: "/board/{pk}",
|
||||||
...options,
|
...options,
|
||||||
headers: {
|
headers: {
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
@ -311,7 +311,7 @@ export const deleteProject = <ThrowOnError extends boolean = false>(
|
|||||||
responseValidator: async data => {
|
responseValidator: async data => {
|
||||||
return await zDeleteProjectResponse2.parseAsync(data);
|
return await zDeleteProjectResponse2.parseAsync(data);
|
||||||
},
|
},
|
||||||
url: "/project/{projectId}",
|
url: "/project/{pk}",
|
||||||
...options,
|
...options,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@ -334,7 +334,7 @@ export const updateProject = <ThrowOnError extends boolean = false>(
|
|||||||
responseValidator: async data => {
|
responseValidator: async data => {
|
||||||
return await zUpdateProjectResponse2.parseAsync(data);
|
return await zUpdateProjectResponse2.parseAsync(data);
|
||||||
},
|
},
|
||||||
url: "/project/{projectId}",
|
url: "/project/{pk}",
|
||||||
...options,
|
...options,
|
||||||
headers: {
|
headers: {
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
@ -411,7 +411,7 @@ export const deleteStatus = <ThrowOnError extends boolean = false>(
|
|||||||
responseValidator: async data => {
|
responseValidator: async data => {
|
||||||
return await zDeleteStatusResponse2.parseAsync(data);
|
return await zDeleteStatusResponse2.parseAsync(data);
|
||||||
},
|
},
|
||||||
url: "/status/{statusId}",
|
url: "/status/{pk}",
|
||||||
...options,
|
...options,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@ -434,7 +434,7 @@ export const updateStatus = <ThrowOnError extends boolean = false>(
|
|||||||
responseValidator: async data => {
|
responseValidator: async data => {
|
||||||
return await zUpdateStatusResponse2.parseAsync(data);
|
return await zUpdateStatusResponse2.parseAsync(data);
|
||||||
},
|
},
|
||||||
url: "/status/{statusId}",
|
url: "/status/{pk}",
|
||||||
...options,
|
...options,
|
||||||
headers: {
|
headers: {
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
|
|||||||
@ -22,7 +22,7 @@ export type BoardSchema = {
|
|||||||
* CreateBoardRequest
|
* CreateBoardRequest
|
||||||
*/
|
*/
|
||||||
export type CreateBoardRequest = {
|
export type CreateBoardRequest = {
|
||||||
board: CreateBoardSchema;
|
entity: CreateBoardSchema;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -33,7 +33,7 @@ export type CreateBoardResponse = {
|
|||||||
* Message
|
* Message
|
||||||
*/
|
*/
|
||||||
message: string;
|
message: string;
|
||||||
board: BoardSchema;
|
entity: BoardSchema;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -58,7 +58,7 @@ export type CreateBoardSchema = {
|
|||||||
* CreateProjectRequest
|
* CreateProjectRequest
|
||||||
*/
|
*/
|
||||||
export type CreateProjectRequest = {
|
export type CreateProjectRequest = {
|
||||||
project: CreateProjectSchema;
|
entity: CreateProjectSchema;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -69,7 +69,7 @@ export type CreateProjectResponse = {
|
|||||||
* Message
|
* Message
|
||||||
*/
|
*/
|
||||||
message: string;
|
message: string;
|
||||||
project: ProjectSchema;
|
entity: ProjectSchema;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -86,7 +86,7 @@ export type CreateProjectSchema = {
|
|||||||
* CreateStatusRequest
|
* CreateStatusRequest
|
||||||
*/
|
*/
|
||||||
export type CreateStatusRequest = {
|
export type CreateStatusRequest = {
|
||||||
status: CreateStatusSchema;
|
entity: CreateStatusSchema;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -97,7 +97,7 @@ export type CreateStatusResponse = {
|
|||||||
* Message
|
* Message
|
||||||
*/
|
*/
|
||||||
message: string;
|
message: string;
|
||||||
status: StatusSchema;
|
entity: StatusSchema;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -256,7 +256,7 @@ export type StatusSchema = {
|
|||||||
* UpdateBoardRequest
|
* UpdateBoardRequest
|
||||||
*/
|
*/
|
||||||
export type UpdateBoardRequest = {
|
export type UpdateBoardRequest = {
|
||||||
board: UpdateBoardSchema;
|
entity: UpdateBoardSchema;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -322,7 +322,7 @@ export type UpdateDealSchema = {
|
|||||||
* UpdateProjectRequest
|
* UpdateProjectRequest
|
||||||
*/
|
*/
|
||||||
export type UpdateProjectRequest = {
|
export type UpdateProjectRequest = {
|
||||||
project: UpdateProjectSchema;
|
entity: UpdateProjectSchema;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -349,7 +349,7 @@ export type UpdateProjectSchema = {
|
|||||||
* UpdateStatusRequest
|
* UpdateStatusRequest
|
||||||
*/
|
*/
|
||||||
export type UpdateStatusRequest = {
|
export type UpdateStatusRequest = {
|
||||||
status: UpdateStatusSchema;
|
entity: UpdateStatusSchema;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -454,12 +454,12 @@ export type DeleteBoardData = {
|
|||||||
body?: never;
|
body?: never;
|
||||||
path: {
|
path: {
|
||||||
/**
|
/**
|
||||||
* Boardid
|
* Pk
|
||||||
*/
|
*/
|
||||||
boardId: number;
|
pk: number;
|
||||||
};
|
};
|
||||||
query?: never;
|
query?: never;
|
||||||
url: "/board/{boardId}";
|
url: "/board/{pk}";
|
||||||
};
|
};
|
||||||
|
|
||||||
export type DeleteBoardErrors = {
|
export type DeleteBoardErrors = {
|
||||||
@ -485,12 +485,12 @@ export type UpdateBoardData = {
|
|||||||
body: UpdateBoardRequest;
|
body: UpdateBoardRequest;
|
||||||
path: {
|
path: {
|
||||||
/**
|
/**
|
||||||
* Boardid
|
* Pk
|
||||||
*/
|
*/
|
||||||
boardId: number;
|
pk: number;
|
||||||
};
|
};
|
||||||
query?: never;
|
query?: never;
|
||||||
url: "/board/{boardId}";
|
url: "/board/{pk}";
|
||||||
};
|
};
|
||||||
|
|
||||||
export type UpdateBoardErrors = {
|
export type UpdateBoardErrors = {
|
||||||
@ -618,14 +618,14 @@ export type CreateProjectResponse2 =
|
|||||||
|
|
||||||
export type DeleteProjectData = {
|
export type DeleteProjectData = {
|
||||||
body?: never;
|
body?: never;
|
||||||
path?: never;
|
path: {
|
||||||
query: {
|
|
||||||
/**
|
/**
|
||||||
* Projectid
|
* Pk
|
||||||
*/
|
*/
|
||||||
projectId: number;
|
pk: number;
|
||||||
};
|
};
|
||||||
url: "/project/{projectId}";
|
query?: never;
|
||||||
|
url: "/project/{pk}";
|
||||||
};
|
};
|
||||||
|
|
||||||
export type DeleteProjectErrors = {
|
export type DeleteProjectErrors = {
|
||||||
@ -649,14 +649,14 @@ export type DeleteProjectResponse2 =
|
|||||||
|
|
||||||
export type UpdateProjectData = {
|
export type UpdateProjectData = {
|
||||||
body: UpdateProjectRequest;
|
body: UpdateProjectRequest;
|
||||||
path?: never;
|
path: {
|
||||||
query: {
|
|
||||||
/**
|
/**
|
||||||
* Projectid
|
* Pk
|
||||||
*/
|
*/
|
||||||
projectId: number;
|
pk: number;
|
||||||
};
|
};
|
||||||
url: "/project/{projectId}";
|
query?: never;
|
||||||
|
url: "/project/{pk}";
|
||||||
};
|
};
|
||||||
|
|
||||||
export type UpdateProjectErrors = {
|
export type UpdateProjectErrors = {
|
||||||
@ -739,12 +739,12 @@ export type DeleteStatusData = {
|
|||||||
body?: never;
|
body?: never;
|
||||||
path: {
|
path: {
|
||||||
/**
|
/**
|
||||||
* Statusid
|
* Pk
|
||||||
*/
|
*/
|
||||||
statusId: number;
|
pk: number;
|
||||||
};
|
};
|
||||||
query?: never;
|
query?: never;
|
||||||
url: "/status/{statusId}";
|
url: "/status/{pk}";
|
||||||
};
|
};
|
||||||
|
|
||||||
export type DeleteStatusErrors = {
|
export type DeleteStatusErrors = {
|
||||||
@ -770,12 +770,12 @@ export type UpdateStatusData = {
|
|||||||
body: UpdateStatusRequest;
|
body: UpdateStatusRequest;
|
||||||
path: {
|
path: {
|
||||||
/**
|
/**
|
||||||
* Statusid
|
* Pk
|
||||||
*/
|
*/
|
||||||
statusId: number;
|
pk: number;
|
||||||
};
|
};
|
||||||
query?: never;
|
query?: never;
|
||||||
url: "/status/{statusId}";
|
url: "/status/{pk}";
|
||||||
};
|
};
|
||||||
|
|
||||||
export type UpdateStatusErrors = {
|
export type UpdateStatusErrors = {
|
||||||
|
|||||||
@ -24,7 +24,7 @@ export const zCreateBoardSchema = z.object({
|
|||||||
* CreateBoardRequest
|
* CreateBoardRequest
|
||||||
*/
|
*/
|
||||||
export const zCreateBoardRequest = z.object({
|
export const zCreateBoardRequest = z.object({
|
||||||
board: zCreateBoardSchema,
|
entity: zCreateBoardSchema,
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -32,7 +32,7 @@ export const zCreateBoardRequest = z.object({
|
|||||||
*/
|
*/
|
||||||
export const zCreateBoardResponse = z.object({
|
export const zCreateBoardResponse = z.object({
|
||||||
message: z.string(),
|
message: z.string(),
|
||||||
board: zBoardSchema,
|
entity: zBoardSchema,
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -46,7 +46,7 @@ export const zCreateProjectSchema = z.object({
|
|||||||
* CreateProjectRequest
|
* CreateProjectRequest
|
||||||
*/
|
*/
|
||||||
export const zCreateProjectRequest = z.object({
|
export const zCreateProjectRequest = z.object({
|
||||||
project: zCreateProjectSchema,
|
entity: zCreateProjectSchema,
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -62,7 +62,7 @@ export const zProjectSchema = z.object({
|
|||||||
*/
|
*/
|
||||||
export const zCreateProjectResponse = z.object({
|
export const zCreateProjectResponse = z.object({
|
||||||
message: z.string(),
|
message: z.string(),
|
||||||
project: zProjectSchema,
|
entity: zProjectSchema,
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -78,7 +78,7 @@ export const zCreateStatusSchema = z.object({
|
|||||||
* CreateStatusRequest
|
* CreateStatusRequest
|
||||||
*/
|
*/
|
||||||
export const zCreateStatusRequest = z.object({
|
export const zCreateStatusRequest = z.object({
|
||||||
status: zCreateStatusSchema,
|
entity: zCreateStatusSchema,
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -95,7 +95,7 @@ export const zStatusSchema = z.object({
|
|||||||
*/
|
*/
|
||||||
export const zCreateStatusResponse = z.object({
|
export const zCreateStatusResponse = z.object({
|
||||||
message: z.string(),
|
message: z.string(),
|
||||||
status: zStatusSchema,
|
entity: zStatusSchema,
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -185,7 +185,7 @@ export const zUpdateBoardSchema = z.object({
|
|||||||
* UpdateBoardRequest
|
* UpdateBoardRequest
|
||||||
*/
|
*/
|
||||||
export const zUpdateBoardRequest = z.object({
|
export const zUpdateBoardRequest = z.object({
|
||||||
board: zUpdateBoardSchema,
|
entity: zUpdateBoardSchema,
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -229,7 +229,7 @@ export const zUpdateProjectSchema = z.object({
|
|||||||
* UpdateProjectRequest
|
* UpdateProjectRequest
|
||||||
*/
|
*/
|
||||||
export const zUpdateProjectRequest = z.object({
|
export const zUpdateProjectRequest = z.object({
|
||||||
project: zUpdateProjectSchema,
|
entity: zUpdateProjectSchema,
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -251,7 +251,7 @@ export const zUpdateStatusSchema = z.object({
|
|||||||
* UpdateStatusRequest
|
* UpdateStatusRequest
|
||||||
*/
|
*/
|
||||||
export const zUpdateStatusRequest = z.object({
|
export const zUpdateStatusRequest = z.object({
|
||||||
status: zUpdateStatusSchema,
|
entity: zUpdateStatusSchema,
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -288,7 +288,7 @@ export const zCreateBoardResponse2 = zCreateBoardResponse;
|
|||||||
export const zDeleteBoardData = z.object({
|
export const zDeleteBoardData = z.object({
|
||||||
body: z.optional(z.never()),
|
body: z.optional(z.never()),
|
||||||
path: z.object({
|
path: z.object({
|
||||||
boardId: z.int(),
|
pk: z.int(),
|
||||||
}),
|
}),
|
||||||
query: z.optional(z.never()),
|
query: z.optional(z.never()),
|
||||||
});
|
});
|
||||||
@ -301,7 +301,7 @@ export const zDeleteBoardResponse2 = zDeleteBoardResponse;
|
|||||||
export const zUpdateBoardData = z.object({
|
export const zUpdateBoardData = z.object({
|
||||||
body: zUpdateBoardRequest,
|
body: zUpdateBoardRequest,
|
||||||
path: z.object({
|
path: z.object({
|
||||||
boardId: z.int(),
|
pk: z.int(),
|
||||||
}),
|
}),
|
||||||
query: z.optional(z.never()),
|
query: z.optional(z.never()),
|
||||||
});
|
});
|
||||||
@ -361,10 +361,10 @@ export const zCreateProjectResponse2 = zCreateProjectResponse;
|
|||||||
|
|
||||||
export const zDeleteProjectData = z.object({
|
export const zDeleteProjectData = z.object({
|
||||||
body: z.optional(z.never()),
|
body: z.optional(z.never()),
|
||||||
path: z.optional(z.never()),
|
path: z.object({
|
||||||
query: z.object({
|
pk: z.int(),
|
||||||
projectId: z.int(),
|
|
||||||
}),
|
}),
|
||||||
|
query: z.optional(z.never()),
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -374,10 +374,10 @@ export const zDeleteProjectResponse2 = zDeleteProjectResponse;
|
|||||||
|
|
||||||
export const zUpdateProjectData = z.object({
|
export const zUpdateProjectData = z.object({
|
||||||
body: zUpdateProjectRequest,
|
body: zUpdateProjectRequest,
|
||||||
path: z.optional(z.never()),
|
path: z.object({
|
||||||
query: z.object({
|
pk: z.int(),
|
||||||
projectId: z.int(),
|
|
||||||
}),
|
}),
|
||||||
|
query: z.optional(z.never()),
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -412,7 +412,7 @@ export const zCreateStatusResponse2 = zCreateStatusResponse;
|
|||||||
export const zDeleteStatusData = z.object({
|
export const zDeleteStatusData = z.object({
|
||||||
body: z.optional(z.never()),
|
body: z.optional(z.never()),
|
||||||
path: z.object({
|
path: z.object({
|
||||||
statusId: z.int(),
|
pk: z.int(),
|
||||||
}),
|
}),
|
||||||
query: z.optional(z.never()),
|
query: z.optional(z.never()),
|
||||||
});
|
});
|
||||||
@ -425,7 +425,7 @@ export const zDeleteStatusResponse2 = zDeleteStatusResponse;
|
|||||||
export const zUpdateStatusData = z.object({
|
export const zUpdateStatusData = z.object({
|
||||||
body: zUpdateStatusRequest,
|
body: zUpdateStatusRequest,
|
||||||
path: z.object({
|
path: z.object({
|
||||||
statusId: z.int(),
|
pk: z.int(),
|
||||||
}),
|
}),
|
||||||
query: z.optional(z.never()),
|
query: z.optional(z.never()),
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user