'use client'; import { useCustomerQuery } from './customers'; import { createSlot, deleteSlot, getSlot, getSlots, updateSlot } from '@/actions/api/slots'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; export const useSlotsQuery = (variables: Parameters[0]) => { const { data: { customer } = {} } = useCustomerQuery(); const masterId = variables.filters?.master?.documentId?.eq || customer?.documentId; const date = variables.filters?.date?.eq; return useQuery({ queryFn: () => getSlots(variables), queryKey: ['slots', { date: date?.toISOString(), masterId }], }); }; export const useSlotQuery = (variables: Parameters[0]) => { const { documentId } = variables; return useQuery({ queryFn: () => getSlot(variables), queryKey: ['slot', documentId], }); }; export const useSlotMutation = ({ documentId, }: Pick[0], 'documentId'>) => { const queryClient = useQueryClient(); return useMutation({ mutationFn: ({ data }: Pick[0], 'data'>) => updateSlot({ data, documentId }), mutationKey: ['slot', 'update', documentId], onSuccess: () => { if (documentId) { queryClient.invalidateQueries({ queryKey: ['slot', documentId] }); } }, }); }; export const useSlotCreate = () => { const { data: { customer } = {} } = useCustomerQuery(); const masterId = customer?.documentId; const queryClient = useQueryClient(); return useMutation({ mutationFn: createSlot, mutationKey: ['slot', 'create'], onSuccess: masterId ? (data) => { queryClient.invalidateQueries({ queryKey: ['slots', { date: data?.createSlot?.date?.toISOString(), masterId }], }); } : undefined, }); }; export const useSlotDelete = ({ documentId }: Parameters[0]) => { const { data: { slot } = {} } = useSlotQuery({ documentId }); const queryClient = useQueryClient(); return useMutation({ mutationFn: () => deleteSlot({ documentId }), mutationKey: ['slot', 'delete', documentId], onSuccess: () => { const date = slot?.date; const masterId = slot?.master; if (date && masterId) { queryClient.invalidateQueries({ queryKey: ['slots', { date: date?.toISOString(), masterId }], }); queryClient.invalidateQueries({ queryKey: ['slot', documentId], }); } }, }); };