36 lines
1.4 KiB
TypeScript
36 lines
1.4 KiB
TypeScript
import { useQuery } from "@tanstack/react-query";
|
|
import { api, ApiError } from "@/lib/api";
|
|
import type { BatchDiff } from "@/types";
|
|
|
|
/**
|
|
* React Query binding for the side-by-side batch diff.
|
|
*
|
|
* Query key: ``["batch-diff", a, b]`` so picking different batches
|
|
* automatically produces a separate cache entry. ``enabled`` short-
|
|
* circuits when either id is missing — the page disables the Run
|
|
* button until both pickers are filled in, but we double-check here
|
|
* so a half-picked URL can't fire an empty query.
|
|
*
|
|
* 404s from the backend are surfaced as ``ApiError(404)`` — the page
|
|
* branches on ``error.status === 404`` to render the "one of these
|
|
* batches was deleted out from under you" state instead of the
|
|
* generic error toast. Matches the same convention used by the
|
|
* claim detail drawer.
|
|
*/
|
|
export function useBatchDiff(a: string | null, b: string | null) {
|
|
return useQuery<BatchDiff, ApiError>({
|
|
queryKey: ["batch-diff", a, b],
|
|
queryFn: () => api.getBatchDiff(a as string, b as string),
|
|
enabled:
|
|
api.isConfigured &&
|
|
typeof a === "string" &&
|
|
a.length > 0 &&
|
|
typeof b === "string" &&
|
|
b.length > 0,
|
|
// Refetch on window focus would be nice in production; for the
|
|
// diff view it's pointless because the underlying batches don't
|
|
// change shape without a fresh ingest.
|
|
refetchOnWindowFocus: false,
|
|
});
|
|
}
|