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

@@ -64,12 +64,14 @@ export function EnquiryFormSheet({
enquiry,
open,
onOpenChange,
referenceData
referenceData,
workspace = 'enquiry'
}: {
enquiry?: EnquiryRecord;
open: boolean;
onOpenChange: (open: boolean) => void;
referenceData: EnquiryReferenceData;
workspace?: 'lead' | 'enquiry';
}) {
const isEdit = !!enquiry;
const defaultValues = useMemo(
@@ -88,21 +90,21 @@ export function EnquiryFormSheet({
const createMutation = useMutation({
...createEnquiryMutation,
onSuccess: () => {
toast.success('Enquiry created successfully');
toast.success(`${recordLabel} created successfully`);
onOpenChange(false);
},
onError: (error) =>
toast.error(error instanceof Error ? error.message : 'Failed to create enquiry')
toast.error(error instanceof Error ? error.message : `Failed to create ${recordLabel.toLowerCase()}`)
});
const updateMutation = useMutation({
...updateEnquiryMutation,
onSuccess: () => {
toast.success('Enquiry updated successfully');
toast.success(`${recordLabel} updated successfully`);
onOpenChange(false);
},
onError: (error) =>
toast.error(error instanceof Error ? error.message : 'Failed to update enquiry')
toast.error(error instanceof Error ? error.message : `Failed to update ${recordLabel.toLowerCase()}`)
});
const contactsForCustomer = referenceData.contacts.filter(
@@ -177,13 +179,17 @@ export function EnquiryFormSheet({
const isPending = createMutation.isPending || updateMutation.isPending;
const recordLabel = workspace === 'lead' ? 'Lead' : 'Enquiry';
return (
<Sheet open={open} onOpenChange={onOpenChange}>
<SheetContent className='flex flex-col sm:max-w-4xl'>
<SheetHeader>
<SheetTitle>{isEdit ? 'Edit Enquiry' : 'New Enquiry'}</SheetTitle>
<SheetTitle>{isEdit ? `Edit ${recordLabel}` : `New ${recordLabel}`}</SheetTitle>
<SheetDescription>
Capture the opportunity details before quotation and approval stages begin.
{workspace === 'lead'
? 'Capture marketing lead details before assignment to sales.'
: 'Capture sales enquiry details before quotation work begins.'}
</SheetDescription>
</SheetHeader>
@@ -261,7 +267,7 @@ export function EnquiryFormSheet({
name='title'
label='Title'
required
placeholder='Warehouse crane upgrade opportunity'
placeholder='Warehouse crane upgrade enquiry'
/>
<FormTextField
name='projectName'
@@ -338,7 +344,7 @@ export function EnquiryFormSheet({
<FormTextareaField
name='description'
label='Description'
placeholder='High-level summary of the opportunity'
placeholder='High-level summary of the lead or enquiry'
/>
</div>
<div className='md:col-span-2'>
@@ -352,19 +358,19 @@ export function EnquiryFormSheet({
<FormTextareaField
name='notes'
label='Notes'
placeholder='Internal notes, blockers, or guidance for the sales team'
placeholder='Internal notes, blockers, or handoff guidance'
/>
</div>
<div className='md:col-span-2 grid gap-4 md:grid-cols-2'>
<FormSwitchField
name='isHotProject'
label='Hot Project'
description='Use for urgent or highly strategic opportunities.'
description='Use for urgent or highly strategic enquiries.'
/>
<FormSwitchField
name='isActive'
label='Active Record'
description='Inactive enquiries stay in history but should not progress further.'
description='Inactive leads and enquiries stay in history but should not progress further.'
/>
</div>
<div className='md:col-span-2'>
@@ -385,7 +391,7 @@ export function EnquiryFormSheet({
</Button>
<Button type='submit' form='enquiry-form-sheet' isLoading={isPending}>
<Icons.check className='mr-2 h-4 w-4' />
{isEdit ? 'Update Enquiry' : 'Create Enquiry'}
{isEdit ? `Update ${recordLabel}` : `Create ${recordLabel}`}
</Button>
</SheetFooter>
</SheetContent>
@@ -394,18 +400,25 @@ export function EnquiryFormSheet({
}
export function EnquiryFormSheetTrigger({
referenceData
referenceData,
workspace = 'enquiry'
}: {
referenceData: EnquiryReferenceData;
workspace?: 'lead' | 'enquiry';
}) {
const [open, setOpen] = React.useState(false);
return (
<>
<Button onClick={() => setOpen(true)}>
<Icons.add className='mr-2 h-4 w-4' /> Add Enquiry
<Icons.add className='mr-2 h-4 w-4' /> {workspace === 'lead' ? 'Add Lead' : 'Add Enquiry'}
</Button>
<EnquiryFormSheet open={open} onOpenChange={setOpen} referenceData={referenceData} />
<EnquiryFormSheet
open={open}
onOpenChange={setOpen}
referenceData={referenceData}
workspace={workspace}
/>
</>
);
}