task-h
This commit is contained in:
@@ -44,11 +44,8 @@ function toDefaultValues(
|
||||
priority:
|
||||
enquiry?.priority ?? referenceData.priorities[1]?.id ?? referenceData.priorities[0]?.id ?? '',
|
||||
leadChannel: enquiry?.leadChannel ?? undefined,
|
||||
estimatedValue: enquiry?.estimatedValue ? String(enquiry.estimatedValue) : '',
|
||||
chancePercent:
|
||||
enquiry?.chancePercent !== null && enquiry?.chancePercent !== undefined
|
||||
? String(enquiry.chancePercent)
|
||||
: '',
|
||||
estimatedValue: enquiry?.estimatedValue ?? undefined,
|
||||
chancePercent: enquiry?.chancePercent ?? undefined,
|
||||
expectedCloseDate: enquiry?.expectedCloseDate ? enquiry.expectedCloseDate.slice(0, 10) : '',
|
||||
competitor: enquiry?.competitor ?? '',
|
||||
source: enquiry?.source ?? '',
|
||||
@@ -121,8 +118,10 @@ export function EnquiryFormSheet({
|
||||
status: value.status,
|
||||
priority: value.priority,
|
||||
leadChannel: value.leadChannel || null,
|
||||
estimatedValue: value.estimatedValue ? Number(value.estimatedValue) : null,
|
||||
chancePercent: value.chancePercent ? Number(value.chancePercent) : null,
|
||||
estimatedValue:
|
||||
typeof value.estimatedValue === 'number' ? value.estimatedValue : null,
|
||||
chancePercent:
|
||||
typeof value.chancePercent === 'number' ? value.chancePercent : null,
|
||||
expectedCloseDate: value.expectedCloseDate || null,
|
||||
competitor: value.competitor,
|
||||
source: value.source,
|
||||
|
||||
@@ -1,5 +1,29 @@
|
||||
import * as z from 'zod';
|
||||
|
||||
function coerceOptionalNumber(message: string) {
|
||||
return z.preprocess((value) => {
|
||||
if (value === '' || value === null || value === undefined) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
if (typeof value === 'number') {
|
||||
return value;
|
||||
}
|
||||
|
||||
if (typeof value === 'string') {
|
||||
const trimmed = value.trim();
|
||||
|
||||
if (!trimmed) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return Number(trimmed);
|
||||
}
|
||||
|
||||
return value;
|
||||
}, z.number().refine((value) => !Number.isNaN(value), message).optional());
|
||||
}
|
||||
|
||||
export const enquirySchema = z.object({
|
||||
customerId: z.string().min(1, 'Please select a customer'),
|
||||
contactId: z.string().optional().nullable(),
|
||||
@@ -13,18 +37,14 @@ export const enquirySchema = z.object({
|
||||
status: z.string().min(1, 'Please select a status'),
|
||||
priority: z.string().min(1, 'Please select a priority'),
|
||||
leadChannel: z.string().optional().nullable(),
|
||||
estimatedValue: z
|
||||
.string()
|
||||
.optional()
|
||||
.refine((value) => !value || !Number.isNaN(Number(value)), 'Estimated value must be a number'),
|
||||
chancePercent: z
|
||||
.string()
|
||||
.optional()
|
||||
.refine((value) => !value || !Number.isNaN(Number(value)), 'Chance percent must be a number')
|
||||
.refine(
|
||||
(value) => !value || (Number(value) >= 0 && Number(value) <= 100),
|
||||
'Chance percent must be between 0 and 100'
|
||||
),
|
||||
estimatedValue: coerceOptionalNumber('Estimated value must be a number').refine(
|
||||
(value) => value === undefined || value >= 0,
|
||||
'Estimated value must be 0 or greater'
|
||||
),
|
||||
chancePercent: coerceOptionalNumber('Chance percent must be a number').refine(
|
||||
(value) => value === undefined || (value >= 0 && value <= 100),
|
||||
'Chance percent must be between 0 and 100'
|
||||
),
|
||||
expectedCloseDate: z.string().optional().nullable(),
|
||||
competitor: z.string().optional(),
|
||||
source: z.string().optional(),
|
||||
|
||||
Reference in New Issue
Block a user