62 lines
1.7 KiB
TypeScript
62 lines
1.7 KiB
TypeScript
'use client';
|
|
|
|
import { createOrder, getOrder, getOrders, updateOrder } from '@/actions/api/orders';
|
|
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
|
|
|
export const useOrderQuery = ({ documentId }: Parameters<typeof getOrder>[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<typeof getOrders>[0], enabled?: boolean) =>
|
|
useQuery({
|
|
enabled,
|
|
queryFn: () => getOrders(variables),
|
|
queryKey: ['orders', variables],
|
|
staleTime: 60 * 1_000,
|
|
});
|
|
|
|
export const useOrderMutation = ({
|
|
documentId,
|
|
}: Pick<Parameters<typeof updateOrder>[0], 'documentId'>) => {
|
|
const queryClient = useQueryClient();
|
|
|
|
return useMutation({
|
|
mutationFn: ({ data }: Pick<Parameters<typeof updateOrder>[0], 'data'>) =>
|
|
updateOrder({ data, documentId }),
|
|
mutationKey: ['order', 'update', documentId],
|
|
onSuccess: () => {
|
|
if (documentId) {
|
|
queryClient.invalidateQueries({
|
|
queryKey: ['order', documentId],
|
|
});
|
|
|
|
queryClient.invalidateQueries({
|
|
queryKey: ['orders'],
|
|
});
|
|
}
|
|
},
|
|
});
|
|
};
|