Files
biggus-dickus/web/src/api/query-client.ts
T

45 lines
1.4 KiB
TypeScript

import {
MutationCache,
QueryClient,
type MutationMeta,
} from "@tanstack/react-query";
import i18n from "../i18n";
import { toastManager } from "../toast/toast-manager";
import { errorMessageKey } from "./error-message";
function mutationErrorMessage(
error: unknown,
meta: MutationMeta | undefined,
): string {
if (meta?.errorMessage) return i18n.t(meta.errorMessage);
const { key, opts } = errorMessageKey(error);
return i18n.t(key, opts);
}
/** Builds the app's QueryClient, including the MutationCache that bridges every
* mutation to the toast region (catch-all error toast + opt-in success toast).
* Shared by main.tsx and tests so the toast wiring stays consistent. */
export function makeQueryClient(): QueryClient {
return new QueryClient({
defaultOptions: { queries: { retry: false, refetchOnWindowFocus: false } },
mutationCache: new MutationCache({
onError: (error, _vars, _ctx, mutation) => {
if (mutation.meta?.suppressErrorToast) return;
toastManager.add({
type: "error",
description: mutationErrorMessage(error, mutation.meta),
});
},
onSuccess: (_data, _vars, _ctx, mutation) => {
if (mutation.meta?.successMessage) {
toastManager.add({
type: "success",
description: i18n.t(mutation.meta.successMessage),
});
}
},
}),
});
}