2025-05-07 17:33:35 +03:00

72 lines
1.9 KiB
TypeScript

'use client';
import { addSlot, deleteSlot, getSlot, getSlots, updateSlot } from '@/actions/slots';
import { formatDate } from '@/utils/date';
// eslint-disable-next-line sonarjs/no-internal-api-use
import type * as ApolloTypes from '@repo/graphql/node_modules/@apollo/client/core';
import { useMutation, useQuery } from '@tanstack/react-query';
// eslint-disable-next-line @typescript-eslint/no-unused-vars
type FixTypescriptCringe = ApolloTypes.FetchResult;
type SlotAddInput = {
date: Date;
};
type SlotMutationInput = {
documentId: string;
};
type SlotQueryInput = {
date: Date;
masterId?: null | string;
};
export const useSlots = ({ date, masterId }: SlotQueryInput) => {
return useQuery({
queryFn: () =>
getSlots({
filters: {
date: { eq: formatDate(date).db() },
master: masterId ? { documentId: { eq: masterId } } : undefined,
},
}),
queryKey: ['slots', 'master', masterId, 'list', date],
});
};
export const useSlotQuery = ({ documentId }: SlotMutationInput) =>
useQuery({
queryFn: () => getSlot({ documentId }),
queryKey: ['slots', 'get', documentId],
});
export const useSlotMutation = ({ documentId }: SlotMutationInput) => {
const { refetch } = useSlotQuery({ documentId });
return useMutation({
mutationFn: updateSlot,
mutationKey: ['slots', 'update', documentId],
onSuccess: () => refetch(),
});
};
export const useSlotAdd = ({ date }: SlotAddInput) => {
const { refetch } = useSlots({ date });
return useMutation({
mutationFn: addSlot,
mutationKey: ['slots', 'add'],
onSuccess: () => refetch(),
});
};
export const useSlotDelete = ({ date, documentId }: SlotAddInput & SlotMutationInput) => {
const { refetch } = useSlots({ date });
return useMutation({
mutationFn: () => deleteSlot({ documentId }),
mutationKey: ['slots', 'delete', documentId],
onSuccess: () => refetch(),
});
};