Files
alla-allaos-fullstack/src/features/crm-demo/api/mutations.ts
phaichayon c2a74b6764 task-d5.5.1
2026-06-25 12:16:41 +07:00

80 lines
2.4 KiB
TypeScript

import { mutationOptions } from '@tanstack/react-query';
import { getQueryClient } from '@/lib/query-client';
import {
approveQuotation,
convertOpportunityToQuotation,
createCustomer,
createQuotationRevision,
markQuotationStatus,
rejectQuotation,
revokeContactShare,
shareContact,
submitQuotationApproval,
updateCustomer
} from './service';
import { crmKeys } from './queries';
import type {
ApprovalActionPayload,
ContactSharePayload,
CustomerMutationPayload,
Quotation
} from './types';
function invalidateCrm() {
return getQueryClient().invalidateQueries({ queryKey: crmKeys.all });
}
export const createCustomerMutation = mutationOptions({
mutationFn: (payload: CustomerMutationPayload) => createCustomer(payload),
onSuccess: invalidateCrm
});
export const updateCustomerMutation = mutationOptions({
mutationFn: ({ id, values }: { id: string; values: CustomerMutationPayload }) =>
updateCustomer(id, values),
onSuccess: invalidateCrm
});
export const convertOpportunityMutation = mutationOptions({
mutationFn: (opportunityId: string) => convertOpportunityToQuotation(opportunityId),
onSuccess: invalidateCrm
});
export const submitApprovalMutation = mutationOptions({
mutationFn: (quotationId: string) => submitQuotationApproval(quotationId),
onSuccess: invalidateCrm
});
export const approveQuotationMutation = mutationOptions({
mutationFn: (payload: ApprovalActionPayload) => approveQuotation(payload),
onSuccess: invalidateCrm
});
export const rejectQuotationMutation = mutationOptions({
mutationFn: (payload: ApprovalActionPayload) => rejectQuotation(payload),
onSuccess: invalidateCrm
});
export const createQuotationRevisionMutation = mutationOptions({
mutationFn: (quotationId: string) => createQuotationRevision(quotationId),
onSuccess: invalidateCrm
});
export const markQuotationStatusMutation = mutationOptions({
mutationFn: ({ quotationId, status }: { quotationId: string; status: Quotation['status'] }) =>
markQuotationStatus(quotationId, status),
onSuccess: invalidateCrm
});
export const shareContactMutation = mutationOptions({
mutationFn: (payload: ContactSharePayload) => shareContact(payload),
onSuccess: invalidateCrm
});
export const revokeContactShareMutation = mutationOptions({
mutationFn: ({ contactId, shareId }: { contactId: string; shareId: string }) =>
revokeContactShare(contactId, shareId),
onSuccess: invalidateCrm
});