2025-02-10 16:29:12 +03:00

71 lines
1.9 KiB
TypeScript

'use client';
import { addSlot, deleteSlot, getSlot, getSlots, updateSlot } from '@/actions/slots';
import { ScheduleSlotsContext } from '@/context/schedule-slots';
import { combineDateTime } 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';
import { use } from 'react';
// eslint-disable-next-line @typescript-eslint/no-unused-vars
type FixTypescriptCringe = ApolloTypes.FetchResult;
export const useSlots = () => {
const { selectedDate } = use(ScheduleSlotsContext);
const dayStart = combineDateTime(selectedDate, '00:00');
const dayEnd = combineDateTime(selectedDate, '23:59');
return useQuery({
queryFn: () =>
getSlots({
filters: {
datestart: {
gte: dayStart,
lte: dayEnd,
},
},
}),
queryKey: ['schedule', 'slots', 'list', selectedDate],
});
};
type Props = {
documentId: string;
};
export const useSlotQuery = ({ documentId }: Props) =>
useQuery({
queryFn: () => getSlot({ documentId }),
queryKey: ['schedule', 'slots', 'get', documentId],
});
export const useSlotMutation = ({ documentId }: Props) => {
const { refetch } = useSlotQuery({ documentId });
return useMutation({
mutationFn: updateSlot,
mutationKey: ['schedule', 'slots', 'update', documentId],
onSuccess: () => refetch(),
});
};
export const useSlotAdd = () => {
const { refetch } = useSlots();
return useMutation({
mutationFn: addSlot,
mutationKey: ['schedule', 'slots', 'add'],
onSuccess: () => refetch(),
});
};
export const useSlotDelete = ({ documentId }: Props) => {
const { refetch } = useSlots();
return useMutation({
mutationFn: () => deleteSlot({ documentId }),
mutationKey: ['schedule', 'slots', 'delete', documentId],
onSuccess: () => refetch(),
});
};