151 lines
4.5 KiB
TypeScript
151 lines
4.5 KiB
TypeScript
import { mutationOptions } from '@tanstack/react-query';
|
|
import { getQueryClient } from '@/lib/query-client';
|
|
import {
|
|
assignEnquiry,
|
|
createEnquiry,
|
|
createEnquiryFollowup,
|
|
deleteEnquiry,
|
|
deleteEnquiryFollowup,
|
|
reassignEnquiry,
|
|
updateEnquiry,
|
|
updateEnquiryFollowup
|
|
} from './service';
|
|
import { enquiryKeys } from './queries';
|
|
import type {
|
|
EnquiryAssignmentMutationPayload,
|
|
EnquiryFollowupMutationPayload,
|
|
EnquiryMutationPayload
|
|
} from './types';
|
|
import { crmDashboardKeys } from '@/features/crm/dashboard/api/queries';
|
|
|
|
async function invalidateEnquiryLists() {
|
|
await getQueryClient().invalidateQueries({ queryKey: enquiryKeys.lists() });
|
|
}
|
|
|
|
async function invalidateDashboardQueries() {
|
|
await getQueryClient().invalidateQueries({ queryKey: crmDashboardKeys.all });
|
|
}
|
|
|
|
async function invalidateEnquiryDetail(id: string) {
|
|
await getQueryClient().invalidateQueries({ queryKey: enquiryKeys.detail(id) });
|
|
}
|
|
|
|
async function invalidateEnquiryProjectParties(id: string) {
|
|
await getQueryClient().invalidateQueries({ queryKey: enquiryKeys.projectParties(id) });
|
|
}
|
|
|
|
async function invalidateEnquiryFollowups(id: string) {
|
|
await getQueryClient().invalidateQueries({ queryKey: enquiryKeys.followups(id) });
|
|
}
|
|
|
|
export async function invalidateEnquiryMutationQueries(id: string) {
|
|
await Promise.all([
|
|
invalidateEnquiryLists(),
|
|
invalidateEnquiryDetail(id),
|
|
invalidateEnquiryProjectParties(id),
|
|
invalidateDashboardQueries()
|
|
]);
|
|
}
|
|
|
|
export async function invalidateEnquiryFollowupMutationQueries(enquiryId: string) {
|
|
await Promise.all([
|
|
invalidateEnquiryLists(),
|
|
invalidateEnquiryDetail(enquiryId),
|
|
invalidateEnquiryFollowups(enquiryId),
|
|
invalidateDashboardQueries()
|
|
]);
|
|
}
|
|
|
|
export const createEnquiryMutation = mutationOptions({
|
|
mutationFn: (data: EnquiryMutationPayload) => createEnquiry(data),
|
|
onSettled: async (_data, error) => {
|
|
if (!error) {
|
|
await Promise.all([invalidateEnquiryLists(), invalidateDashboardQueries()]);
|
|
}
|
|
}
|
|
});
|
|
|
|
export const updateEnquiryMutation = mutationOptions({
|
|
mutationFn: ({ id, values }: { id: string; values: EnquiryMutationPayload }) =>
|
|
updateEnquiry(id, values),
|
|
onSettled: async (_data, error, variables) => {
|
|
if (!error) {
|
|
await invalidateEnquiryMutationQueries(variables.id);
|
|
}
|
|
}
|
|
});
|
|
|
|
export const deleteEnquiryMutation = mutationOptions({
|
|
mutationFn: (id: string) => deleteEnquiry(id),
|
|
onSettled: async (_data, error, id) => {
|
|
if (!error) {
|
|
getQueryClient().removeQueries({ queryKey: enquiryKeys.detail(id) });
|
|
getQueryClient().removeQueries({ queryKey: enquiryKeys.projectParties(id) });
|
|
getQueryClient().removeQueries({ queryKey: enquiryKeys.followups(id) });
|
|
await Promise.all([invalidateEnquiryLists(), invalidateDashboardQueries()]);
|
|
}
|
|
}
|
|
});
|
|
|
|
export const assignEnquiryMutation = mutationOptions({
|
|
mutationFn: ({ id, values }: { id: string; values: EnquiryAssignmentMutationPayload }) =>
|
|
assignEnquiry(id, values),
|
|
onSettled: async (_data, error, variables) => {
|
|
if (!error) {
|
|
await invalidateEnquiryMutationQueries(variables.id);
|
|
}
|
|
}
|
|
});
|
|
|
|
export const reassignEnquiryMutation = mutationOptions({
|
|
mutationFn: ({ id, values }: { id: string; values: EnquiryAssignmentMutationPayload }) =>
|
|
reassignEnquiry(id, values),
|
|
onSettled: async (_data, error, variables) => {
|
|
if (!error) {
|
|
await invalidateEnquiryMutationQueries(variables.id);
|
|
}
|
|
}
|
|
});
|
|
|
|
export const createEnquiryFollowupMutation = mutationOptions({
|
|
mutationFn: ({
|
|
enquiryId,
|
|
values
|
|
}: {
|
|
enquiryId: string;
|
|
values: EnquiryFollowupMutationPayload;
|
|
}) => createEnquiryFollowup(enquiryId, values),
|
|
onSettled: async (_data, error, variables) => {
|
|
if (!error) {
|
|
await invalidateEnquiryFollowupMutationQueries(variables.enquiryId);
|
|
}
|
|
}
|
|
});
|
|
|
|
export const updateEnquiryFollowupMutation = mutationOptions({
|
|
mutationFn: ({
|
|
enquiryId,
|
|
followupId,
|
|
values
|
|
}: {
|
|
enquiryId: string;
|
|
followupId: string;
|
|
values: EnquiryFollowupMutationPayload;
|
|
}) => updateEnquiryFollowup(enquiryId, followupId, values),
|
|
onSettled: async (_data, error, variables) => {
|
|
if (!error) {
|
|
await invalidateEnquiryFollowupMutationQueries(variables.enquiryId);
|
|
}
|
|
}
|
|
});
|
|
|
|
export const deleteEnquiryFollowupMutation = mutationOptions({
|
|
mutationFn: ({ enquiryId, followupId }: { enquiryId: string; followupId: string }) =>
|
|
deleteEnquiryFollowup(enquiryId, followupId),
|
|
onSettled: async (_data, error, variables) => {
|
|
if (!error) {
|
|
await invalidateEnquiryFollowupMutationQueries(variables.enquiryId);
|
|
}
|
|
}
|
|
});
|