feat: drawers registry

This commit is contained in:
2025-08-22 17:04:59 +04:00
parent cb67c913ad
commit b5753ed3a2
28 changed files with 680 additions and 285 deletions

View File

@ -0,0 +1,78 @@
"use client";
import React, { createContext, FC, useContext } from "react";
import useStatusesList from "@/hooks/useStatusesList";
import { useStatusesOperations } from "@/hooks/useStatusesOperations";
import { BoardSchema, StatusSchema, UpdateStatusSchema } from "@/lib/client";
type BoardStatusesContextState = {
board: BoardSchema;
statuses: StatusSchema[];
setStatuses: React.Dispatch<React.SetStateAction<StatusSchema[]>>;
refetchStatuses: () => void;
onCreateStatus: (name: string) => void;
onUpdateStatus: (statusId: number, status: UpdateStatusSchema) => void;
onDeleteStatus: (status: StatusSchema) => void;
};
const BoardStatusesContext = createContext<
BoardStatusesContextState | undefined
>(undefined);
type Props = {
board: BoardSchema;
};
const useBoardStatusesContextState = ({ board }: Props) => {
const {
statuses,
setStatuses,
refetch: refetchStatuses,
} = useStatusesList({
boardId: board.id,
});
const { onCreateStatus, onUpdateStatus, onDeleteStatus } =
useStatusesOperations({
statuses,
setStatuses,
refetchStatuses,
boardId: board.id,
});
return {
board,
statuses,
setStatuses,
refetchStatuses,
onCreateStatus,
onUpdateStatus,
onDeleteStatus,
};
};
type BoardStatusesContextProviderProps = {
children: React.ReactNode;
} & Props;
export const BoardStatusesContextProvider: FC<
BoardStatusesContextProviderProps
> = ({ children, ...props }) => {
const state = useBoardStatusesContextState(props);
return (
<BoardStatusesContext.Provider value={state}>
{children}
</BoardStatusesContext.Provider>
);
};
export const useBoardStatusesContext = () => {
const context = useContext(BoardStatusesContext);
if (!context) {
throw new Error(
"useBoardStatusesContext must be used within a BoardStatusesContextProvider"
);
}
return context;
};