lead menu

nquiry menu
This commit is contained in:
phaichayon
2026-06-19 10:39:11 +07:00
parent 0650cf6297
commit c0cc880be2
46 changed files with 5985 additions and 420 deletions

View File

@@ -16,11 +16,16 @@ import type {
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) });
}
@@ -37,7 +42,8 @@ export async function invalidateEnquiryMutationQueries(id: string) {
await Promise.all([
invalidateEnquiryLists(),
invalidateEnquiryDetail(id),
invalidateEnquiryProjectParties(id)
invalidateEnquiryProjectParties(id),
invalidateDashboardQueries()
]);
}
@@ -45,7 +51,8 @@ export async function invalidateEnquiryFollowupMutationQueries(enquiryId: string
await Promise.all([
invalidateEnquiryLists(),
invalidateEnquiryDetail(enquiryId),
invalidateEnquiryFollowups(enquiryId)
invalidateEnquiryFollowups(enquiryId),
invalidateDashboardQueries()
]);
}
@@ -53,7 +60,7 @@ export const createEnquiryMutation = mutationOptions({
mutationFn: (data: EnquiryMutationPayload) => createEnquiry(data),
onSettled: async (_data, error) => {
if (!error) {
await invalidateEnquiryLists();
await Promise.all([invalidateEnquiryLists(), invalidateDashboardQueries()]);
}
}
});
@@ -75,7 +82,7 @@ export const deleteEnquiryMutation = mutationOptions({
getQueryClient().removeQueries({ queryKey: enquiryKeys.detail(id) });
getQueryClient().removeQueries({ queryKey: enquiryKeys.projectParties(id) });
getQueryClient().removeQueries({ queryKey: enquiryKeys.followups(id) });
await invalidateEnquiryLists();
await Promise.all([invalidateEnquiryLists(), invalidateDashboardQueries()]);
}
}
});

View File

@@ -17,6 +17,7 @@ export async function getEnquiries(filters: EnquiryFilters): Promise<EnquiryList
if (filters.page) searchParams.set('page', String(filters.page));
if (filters.limit) searchParams.set('limit', String(filters.limit));
if (filters.search) searchParams.set('search', filters.search);
if (filters.pipelineStage) searchParams.set('pipelineStage', filters.pipelineStage);
if (filters.status) searchParams.set('status', filters.status);
if (filters.productType) searchParams.set('productType', filters.productType);
if (filters.priority) searchParams.set('priority', filters.priority);

View File

@@ -54,6 +54,8 @@ export interface EnquiryAssignableUserLookup {
businessRole: string;
}
export type EnquiryPipelineStage = 'lead' | 'enquiry' | 'closed_won' | 'closed_lost';
export interface EnquiryRecord {
id: string;
organizationId: string;
@@ -78,6 +80,7 @@ export interface EnquiryRecord {
notes: string | null;
isHotProject: boolean;
isActive: boolean;
pipelineStage: EnquiryPipelineStage;
assignedToUserId: string | null;
assignedToName: string | null;
assignedAt: string | null;
@@ -95,6 +98,9 @@ export interface EnquiryListItem extends EnquiryRecord {
customerName: string;
contactName: string | null;
followupCount: number;
quotationCount: number;
nextFollowupDate: string | null;
createdByName: string | null;
}
export interface EnquiryFollowupRecord {
@@ -142,6 +148,7 @@ export interface EnquiryFilters {
page?: number;
limit?: number;
search?: string;
pipelineStage?: EnquiryPipelineStage;
status?: string;
productType?: string;
priority?: string;