Files
alla-allaos-fullstack/src/features/foundation/master-options/api/mutations.ts
2026-06-27 22:14:16 +07:00

60 lines
1.7 KiB
TypeScript

import { mutationOptions } from '@tanstack/react-query';
import { getQueryClient } from '@/lib/query-client';
import {
createMasterOption,
deleteMasterOption,
updateMasterOption
} from './service';
import { masterOptionKeys } from './queries';
import type { MasterOptionMutationPayload } from './types';
async function invalidateMasterOptionLists() {
const queryClient = getQueryClient();
await Promise.all([
queryClient.invalidateQueries({ queryKey: masterOptionKeys.lists() }),
queryClient.invalidateQueries({ queryKey: masterOptionKeys.categories() })
]);
}
async function invalidateMasterOptionDetail(id: string) {
await getQueryClient().invalidateQueries({ queryKey: masterOptionKeys.detail(id) });
}
export const createMasterOptionMutation = mutationOptions({
mutationFn: (data: MasterOptionMutationPayload) => createMasterOption(data),
onSettled: async (_data, error) => {
if (!error) {
await invalidateMasterOptionLists();
}
}
});
export const updateMasterOptionMutation = mutationOptions({
mutationFn: ({
id,
values
}: {
id: string;
values: Partial<MasterOptionMutationPayload>;
}) => updateMasterOption(id, values),
onSettled: async (_data, error, variables) => {
if (!error) {
await Promise.all([
invalidateMasterOptionLists(),
invalidateMasterOptionDetail(variables.id)
]);
}
}
});
export const deleteMasterOptionMutation = mutationOptions({
mutationFn: (id: string) => deleteMasterOption(id),
onSettled: async (_data, error, id) => {
if (!error) {
const queryClient = getQueryClient();
await invalidateMasterOptionLists();
queryClient.removeQueries({ queryKey: masterOptionKeys.detail(id) });
}
}
});