From 28004dc2a04d14847b6787cd494ec737c2d87301 Mon Sep 17 00:00:00 2001 From: AlexSserb Date: Thu, 14 Aug 2025 16:15:10 +0400 Subject: [PATCH] refactor: return types for hooks --- src/app/deals/hooks/useDealsAndStatusesDnd.ts | 11 +++++++- src/app/deals/hooks/useGetNewRank.ts | 27 ++++++++++++++++--- src/hooks/useBoardsOperations.tsx | 8 +++++- src/hooks/useIsMobile.ts | 2 +- src/hooks/useProjectsOperations.tsx | 8 +++++- src/hooks/useStatusesOperations.tsx | 8 +++++- src/modals/EnterNameModal/EnterNameModal.tsx | 4 +-- 7 files changed, 57 insertions(+), 11 deletions(-) diff --git a/src/app/deals/hooks/useDealsAndStatusesDnd.ts b/src/app/deals/hooks/useDealsAndStatusesDnd.ts index 0e1aac9..d891a31 100644 --- a/src/app/deals/hooks/useDealsAndStatusesDnd.ts +++ b/src/app/deals/hooks/useDealsAndStatusesDnd.ts @@ -8,7 +8,16 @@ import { getStatusId, isStatusId } from "@/app/deals/utils/statusId"; import { DealSchema, StatusSchema } from "@/lib/client"; import { sortByLexorank } from "@/utils/lexorank"; -const useDealsAndStatusesDnd = () => { +type ReturnType = { + sortedStatuses: StatusSchema[]; + handleDragStart: ({ active }: DragStartEvent) => void; + handleDragOver: ({ active, over }: DragOverEvent) => void; + handleDragEnd: ({ active, over }: DragOverEvent) => void; + activeStatus: StatusSchema | null; + activeDeal: DealSchema | null; +}; + +const useDealsAndStatusesDnd = (): ReturnType => { const [activeDeal, setActiveDeal] = useState(null); const [activeStatus, setActiveStatus] = useState(null); const { statuses, setStatuses, updateStatus } = useStatusesContext(); diff --git a/src/app/deals/hooks/useGetNewRank.ts b/src/app/deals/hooks/useGetNewRank.ts index dd5b059..b5a7534 100644 --- a/src/app/deals/hooks/useGetNewRank.ts +++ b/src/app/deals/hooks/useGetNewRank.ts @@ -3,14 +3,30 @@ import { useStatusesContext } from "@/app/deals/contexts/StatusesContext"; import { DealSchema } from "@/lib/client"; import { getNewLexorank, sortByLexorank } from "@/utils/lexorank"; -const useGetNewRank = () => { +type NewRankGetters = { + getNewRankForSameStatus: ( + statusDeals: DealSchema[], + overDealIndex: number, + activeDealId: number + ) => string; + getNewRankForAnotherStatus: ( + statusDeals: DealSchema[], + overDealIndex: number + ) => string; + getNewStatusRank: ( + activeStatusId: number, + overStatusId: number + ) => string | null; +}; + +const useGetNewRank = (): NewRankGetters => { const { statuses } = useStatusesContext(); const getNewRankForSameStatus = ( statusDeals: DealSchema[], overDealIndex: number, activeDealId: number - ) => { + ): string => { const activeDealIndex = statusDeals.findIndex( deal => deal.id === activeDealId ); @@ -34,7 +50,7 @@ const useGetNewRank = () => { const getNewRankForAnotherStatus = ( statusDeals: DealSchema[], overDealIndex: number - ) => { + ): string => { const leftLexorank = overDealIndex > 0 ? LexoRank.parse(statusDeals[overDealIndex - 1].lexorank) @@ -46,7 +62,10 @@ const useGetNewRank = () => { return getNewLexorank(leftLexorank, rightLexorank).toString(); }; - const getNewStatusRank = (activeStatusId: number, overStatusId: number) => { + const getNewStatusRank = ( + activeStatusId: number, + overStatusId: number + ): string | null => { const sortedStatusList = sortByLexorank(statuses); const overIndex = sortedStatusList.findIndex( s => s.id === overStatusId diff --git a/src/hooks/useBoardsOperations.tsx b/src/hooks/useBoardsOperations.tsx index 650d8e9..0c20bdd 100644 --- a/src/hooks/useBoardsOperations.tsx +++ b/src/hooks/useBoardsOperations.tsx @@ -24,12 +24,18 @@ type UseBoardsOperationsProps = { projectId?: number; }; +type BoardsOperations = { + onCreateBoard: (name: string) => void; + onUpdateBoard: (boardId: number, board: UpdateBoardSchema) => void; + onDeleteBoard: (board: BoardSchema) => void; +}; + export const useBoardsOperations = ({ boards, setBoards, refetchBoards, projectId, -}: UseBoardsOperationsProps) => { +}: UseBoardsOperationsProps): BoardsOperations => { const onError = (error: AxiosError) => { console.error(error); notifications.error({ diff --git a/src/hooks/useIsMobile.ts b/src/hooks/useIsMobile.ts index 4b38be0..e83a6f0 100644 --- a/src/hooks/useIsMobile.ts +++ b/src/hooks/useIsMobile.ts @@ -1,6 +1,6 @@ import { useMediaQuery } from "@mantine/hooks"; -const useIsMobile = () => { +const useIsMobile = (): boolean => { return useMediaQuery("(max-width: 48em)"); }; diff --git a/src/hooks/useProjectsOperations.tsx b/src/hooks/useProjectsOperations.tsx index 9d46498..89d5ffe 100644 --- a/src/hooks/useProjectsOperations.tsx +++ b/src/hooks/useProjectsOperations.tsx @@ -21,11 +21,17 @@ type Props = { refetchProjects: () => void; }; +type ProjectsOperations = { + onCreateProject: (name: string) => void; + onUpdateProject: (projectId: number, project: UpdateProjectSchema) => void; + onDeleteProject: (project: ProjectSchema) => void; +}; + export const useProjectsOperations = ({ projects, setProjects, refetchProjects, -}: Props) => { +}: Props): ProjectsOperations => { const onError = (error: AxiosError) => { console.error(error); notifications.error({ diff --git a/src/hooks/useStatusesOperations.tsx b/src/hooks/useStatusesOperations.tsx index 3ac4ef5..166255f 100644 --- a/src/hooks/useStatusesOperations.tsx +++ b/src/hooks/useStatusesOperations.tsx @@ -24,12 +24,18 @@ type Props = { boardId?: number; }; +type StatusesOperations = { + onCreateStatus: (name: string) => void; + onUpdateStatus: (statusId: number, status: UpdateStatusSchema) => void; + onDeleteStatus: (status: StatusSchema) => void; +}; + export const useStatusesOperations = ({ statuses, setStatuses, refetchStatuses, boardId, -}: Props) => { +}: Props): StatusesOperations => { const onError = (error: AxiosError) => { console.error(error); notifications.error({ diff --git a/src/modals/EnterNameModal/EnterNameModal.tsx b/src/modals/EnterNameModal/EnterNameModal.tsx index e92a346..f77966b 100644 --- a/src/modals/EnterNameModal/EnterNameModal.tsx +++ b/src/modals/EnterNameModal/EnterNameModal.tsx @@ -10,7 +10,7 @@ type Props = { }; type FormType = { - name?: string; + name: string; }; const EnterNameModal = ({ @@ -28,7 +28,7 @@ const EnterNameModal = ({ }); const onSubmit = (values: FormType) => { - innerProps.onComplete(values.name!); + innerProps.onComplete(values.name); context.closeModal(id); };