task-f
This commit is contained in:
84
src/features/foundation/approval/mutations.ts
Normal file
84
src/features/foundation/approval/mutations.ts
Normal file
@@ -0,0 +1,84 @@
|
||||
import { mutationOptions } from '@tanstack/react-query';
|
||||
import { getQueryClient } from '@/lib/query-client';
|
||||
import {
|
||||
approveApproval,
|
||||
cancelApproval,
|
||||
rejectApproval,
|
||||
returnApproval,
|
||||
submitApproval,
|
||||
submitQuotationForApproval
|
||||
} from './service';
|
||||
import { approvalKeys } from './queries';
|
||||
import { quotationKeys } from '@/features/crm/quotations/api/queries';
|
||||
import type { ApprovalActionPayload, SubmitApprovalPayload } from './types';
|
||||
|
||||
function invalidateQuotationQueries(quotationId: string) {
|
||||
const queryClient = getQueryClient();
|
||||
queryClient.invalidateQueries({ queryKey: quotationKeys.all });
|
||||
queryClient.invalidateQueries({ queryKey: quotationKeys.detail(quotationId) });
|
||||
}
|
||||
|
||||
function invalidateRelatedEntityQueries(approvalId: string) {
|
||||
const queryClient = getQueryClient();
|
||||
const cachedDetail = queryClient.getQueryData<{ approval: { request: { entityType: string; entityId: string } } }>(
|
||||
approvalKeys.detail(approvalId)
|
||||
);
|
||||
|
||||
if (cachedDetail?.approval.request.entityType === 'quotation') {
|
||||
invalidateQuotationQueries(cachedDetail.approval.request.entityId);
|
||||
}
|
||||
}
|
||||
|
||||
export const submitApprovalMutation = mutationOptions({
|
||||
mutationFn: (data: SubmitApprovalPayload) => submitApproval(data),
|
||||
onSuccess: () => {
|
||||
getQueryClient().invalidateQueries({ queryKey: approvalKeys.all });
|
||||
}
|
||||
});
|
||||
|
||||
export const submitQuotationApprovalMutation = mutationOptions({
|
||||
mutationFn: ({ id, remark }: { id: string; remark?: string }) => submitQuotationForApproval(id, remark),
|
||||
onSuccess: (_data, variables) => {
|
||||
getQueryClient().invalidateQueries({ queryKey: approvalKeys.all });
|
||||
invalidateQuotationQueries(variables.id);
|
||||
}
|
||||
});
|
||||
|
||||
export const cancelApprovalMutation = mutationOptions({
|
||||
mutationFn: (id: string) => cancelApproval(id),
|
||||
onSuccess: (_data, id) => {
|
||||
getQueryClient().invalidateQueries({ queryKey: approvalKeys.all });
|
||||
getQueryClient().invalidateQueries({ queryKey: approvalKeys.detail(id) });
|
||||
invalidateRelatedEntityQueries(id);
|
||||
}
|
||||
});
|
||||
|
||||
export const approveApprovalMutation = mutationOptions({
|
||||
mutationFn: ({ id, values }: { id: string; values: ApprovalActionPayload }) =>
|
||||
approveApproval(id, values),
|
||||
onSuccess: (_data, variables) => {
|
||||
getQueryClient().invalidateQueries({ queryKey: approvalKeys.all });
|
||||
getQueryClient().invalidateQueries({ queryKey: approvalKeys.detail(variables.id) });
|
||||
invalidateRelatedEntityQueries(variables.id);
|
||||
}
|
||||
});
|
||||
|
||||
export const rejectApprovalMutation = mutationOptions({
|
||||
mutationFn: ({ id, values }: { id: string; values: ApprovalActionPayload }) =>
|
||||
rejectApproval(id, values),
|
||||
onSuccess: (_data, variables) => {
|
||||
getQueryClient().invalidateQueries({ queryKey: approvalKeys.all });
|
||||
getQueryClient().invalidateQueries({ queryKey: approvalKeys.detail(variables.id) });
|
||||
invalidateRelatedEntityQueries(variables.id);
|
||||
}
|
||||
});
|
||||
|
||||
export const returnApprovalMutation = mutationOptions({
|
||||
mutationFn: ({ id, values }: { id: string; values: ApprovalActionPayload }) =>
|
||||
returnApproval(id, values),
|
||||
onSuccess: (_data, variables) => {
|
||||
getQueryClient().invalidateQueries({ queryKey: approvalKeys.all });
|
||||
getQueryClient().invalidateQueries({ queryKey: approvalKeys.detail(variables.id) });
|
||||
invalidateRelatedEntityQueries(variables.id);
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user