diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/validation-schemas/__tests__/phonesFieldDefaultValueSchema.test.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/validation-schemas/__tests__/phonesFieldDefaultValueSchema.test.ts new file mode 100644 index 0000000000..ff311c3f2b --- /dev/null +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/validation-schemas/__tests__/phonesFieldDefaultValueSchema.test.ts @@ -0,0 +1,27 @@ +import { phonesFieldDefaultValueSchema } from '@/object-record/record-field/ui/validation-schemas/phonesFieldDefaultValueSchema'; +import { phonesFieldValueSchema } from '@/object-record/record-field/ui/validation-schemas/phonesFieldValueSchema'; + +describe('phonesFieldDefaultValueSchema', () => { + it('should accept a fully populated default value', () => { + const value = { + primaryPhoneNumber: "'123456'", + primaryPhoneCountryCode: "'FR'", + primaryPhoneCallingCode: "'33'", + additionalPhones: null, + }; + + expect(phonesFieldDefaultValueSchema.safeParse(value).success).toBe(true); + }); + + it('should accept a default value with null primary phone subfields', () => { + const value = { + primaryPhoneNumber: null, + primaryPhoneCountryCode: "'FR'", + primaryPhoneCallingCode: "'33'", + additionalPhones: null, + }; + + expect(phonesFieldDefaultValueSchema.safeParse(value).success).toBe(true); + expect(phonesFieldValueSchema.safeParse(value).success).toBe(false); + }); +}); diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/validation-schemas/phonesFieldDefaultValueSchema.ts b/packages/twenty-front/src/modules/object-record/record-field/ui/validation-schemas/phonesFieldDefaultValueSchema.ts new file mode 100644 index 0000000000..a444d0dfdd --- /dev/null +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/validation-schemas/phonesFieldDefaultValueSchema.ts @@ -0,0 +1,16 @@ +import { z } from 'zod'; + +export const phonesFieldDefaultValueSchema = z.object({ + primaryPhoneNumber: z.string().nullable(), + primaryPhoneCountryCode: z.string().nullable(), + primaryPhoneCallingCode: z.string().nullable().optional(), + additionalPhones: z + .array( + z.object({ + number: z.string(), + callingCode: z.string(), + countryCode: z.string(), + }), + ) + .nullable(), +}); diff --git a/packages/twenty-front/src/modules/settings/data-model/fields/forms/phones/components/SettingsDataModelFieldPhonesForm.tsx b/packages/twenty-front/src/modules/settings/data-model/fields/forms/phones/components/SettingsDataModelFieldPhonesForm.tsx index 365215a080..2a088613b8 100644 --- a/packages/twenty-front/src/modules/settings/data-model/fields/forms/phones/components/SettingsDataModelFieldPhonesForm.tsx +++ b/packages/twenty-front/src/modules/settings/data-model/fields/forms/phones/components/SettingsDataModelFieldPhonesForm.tsx @@ -1,7 +1,7 @@ import { Controller, useFormContext } from 'react-hook-form'; import { useFieldMetadataItemById } from '@/object-metadata/hooks/useFieldMetadataItemById'; -import { phonesFieldValueSchema } from '@/object-record/record-field/ui/validation-schemas/phonesFieldValueSchema'; +import { phonesFieldDefaultValueSchema } from '@/object-record/record-field/ui/validation-schemas/phonesFieldDefaultValueSchema'; import { SettingsOptionCardContentSelect } from '@/settings/components/SettingsOptions/SettingsOptionCardContentSelect'; import { mergeSettingsSchemas } from '@/settings/data-model/fields/forms/utils/mergeSettingsSchema'; import { settingsDataModelFieldMaxValuesSchema } from '@/settings/data-model/fields/forms/utils/settingsDataModelFieldMaxValuesSchema'; @@ -28,7 +28,7 @@ type SettingsDataModelFieldPhonesFormProps = { export const settingsDataModelFieldPhonesFormSchema = z .object({ - defaultValue: phonesFieldValueSchema, + defaultValue: phonesFieldDefaultValueSchema, }) .merge( mergeSettingsSchemas( @@ -91,7 +91,7 @@ export const SettingsDataModelFieldPhonesForm = ({ dropdownId="selectDefaultCountryCode" value={stripSimpleQuotesFromString( - value?.primaryPhoneCountryCode, + value?.primaryPhoneCountryCode ?? '', )} onChange={(newPhoneCountryCode) => onChange({