import { useResourceByName } from "../../../react-openapi"; import { api } from "../../../react-openapi/api/client"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import type { ResolveAmbiguityPayload } from "./fetch-requests.models"; export function useFetchRequestsList(params?: { status?: string; account_name?: string; source_type?: string; }) { const { useList } = useResourceByName("fetch-requests"); return useList(params); } export function useFetchRequest(id: string) { const { useRead } = useResourceByName("fetch-requests"); return useRead(id); } export function useCreateFetchRequest() { const { useCreate } = useResourceByName("fetch-requests"); return useCreate(); } export function useUpdateFetchRequest() { const { usePatch } = useResourceByName("fetch-requests"); return usePatch(); } export function useDeleteFetchRequest() { const { useDelete } = useResourceByName("fetch-requests"); return useDelete(); } export function useUploadFile() { return useMutation({ mutationFn: async (file: File) => { const arrayBuffer = await file.arrayBuffer(); const binary = new Uint8Array(arrayBuffer); const res = await api.post("/uploads", binary, { headers: { "Content-Type": file.type, "Content-Disposition": `attachment; filename="${file.name}"`, }, }); return res.data; }, }); } export function useFetchRequestAmbiguities(fetchRequestId: string) { return useQuery({ queryKey: ["fetch-requests", fetchRequestId, "ambiguities"], queryFn: async () => { const res = await api.get( `/fetch-requests/${fetchRequestId}/ambiguities` ); return res.data; }, enabled: !!fetchRequestId, }); } export function useResolveAmbiguity() { const queryClient = useQueryClient(); return useMutation({ mutationFn: async ({ ambiguityId, payload, }: { ambiguityId: string; payload: ResolveAmbiguityPayload; }) => { const res = await api.post( `/ambiguities/${ambiguityId}/resolve`, payload ); return res.data; }, onSuccess: (data: any) => { queryClient.invalidateQueries({ queryKey: ["fetch-requests", data.fetch_request, "ambiguities"], }); queryClient.invalidateQueries({ queryKey: ["fetch-requests", "detail", data.fetch_request], }); }, }); }