/* eslint-disable unicorn/prevent-abbreviations */ 'use client'; import { createOrder, getOrder, getOrders, updateOrder } from '@/actions/api/orders'; import { useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; export const useOrderQuery = ({ documentId }: Parameters[0]) => useQuery({ queryFn: () => getOrder({ documentId }), queryKey: ['order', documentId], }); export const useOrderCreate = () => { const queryClient = useQueryClient(); return useMutation({ mutationFn: createOrder, mutationKey: ['order', 'create'], onSuccess: (data) => { queryClient.invalidateQueries({ queryKey: ['orders'] }); const documentId = data?.createOrder?.documentId; if (documentId) queryClient.prefetchQuery({ queryFn: () => getOrder({ documentId }), queryKey: ['order', documentId], }); }, }); }; export const useOrdersQuery = (variables: Parameters[0], enabled?: boolean) => useQuery({ enabled, queryFn: () => getOrders(variables), queryKey: ['orders', variables], staleTime: 60 * 1_000, }); export const useOrdersInfiniteQuery = ( variables: Omit[0], 'pagination'>, { enabled = true, pageSize = 5 }, ) => { const queryFn = ({ pageParam: page = 1 }) => getOrders({ ...variables, pagination: { page, pageSize, }, }); return useInfiniteQuery({ enabled, getNextPageParam: (lastPage, _allPages, lastPageParameter) => { if (!lastPage?.orders?.length) return undefined; return lastPageParameter + 1; }, initialPageParam: 1, queryFn, queryKey: ['orders', variables, 'infinite'], staleTime: 60 * 1_000, }); }; export const useOrderMutation = ({ documentId, }: Pick[0], 'documentId'>) => { const queryClient = useQueryClient(); return useMutation({ mutationFn: ({ data }: Pick[0], 'data'>) => updateOrder({ data, documentId }), mutationKey: ['order', 'update', documentId], onSuccess: () => { if (documentId) { queryClient.invalidateQueries({ queryKey: ['order', documentId], }); queryClient.invalidateQueries({ queryKey: ['orders'], }); } }, }); };