Migrate from Zod v3 to v4 (#14639)
Closes [#1526](https://github.com/twentyhq/core-team-issues/issues/1526) --------- Co-authored-by: Félix Malfait <felix@twenty.com> Co-authored-by: Félix Malfait <felix.malfait@gmail.com>
This commit is contained in:
+18
-18
@@ -39,56 +39,56 @@ const isUniqueFieldFormSchema = z.object({
|
||||
|
||||
const booleanFieldFormSchema = z
|
||||
.object({ type: z.literal(FieldMetadataType.BOOLEAN) })
|
||||
.merge(settingsDataModelFieldBooleanFormSchema);
|
||||
.extend(settingsDataModelFieldBooleanFormSchema.shape);
|
||||
|
||||
const currencyFieldFormSchema = z
|
||||
.object({ type: z.literal(FieldMetadataType.CURRENCY) })
|
||||
.merge(settingsDataModelFieldCurrencyFormSchema);
|
||||
.extend(settingsDataModelFieldCurrencyFormSchema.shape);
|
||||
|
||||
const dateFieldFormSchema = z
|
||||
.object({ type: z.literal(FieldMetadataType.DATE) })
|
||||
.merge(settingsDataModelFieldDateFormSchema)
|
||||
.merge(isUniqueFieldFormSchema);
|
||||
.extend(settingsDataModelFieldDateFormSchema.shape)
|
||||
.extend(isUniqueFieldFormSchema.shape);
|
||||
|
||||
const dateTimeFieldFormSchema = z
|
||||
.object({ type: z.literal(FieldMetadataType.DATE_TIME) })
|
||||
.merge(settingsDataModelFieldDateFormSchema)
|
||||
.merge(isUniqueFieldFormSchema);
|
||||
.extend(settingsDataModelFieldDateFormSchema.shape)
|
||||
.extend(isUniqueFieldFormSchema.shape);
|
||||
|
||||
const relationFieldFormSchema = z
|
||||
.object({ type: z.literal(FieldMetadataType.RELATION) })
|
||||
.merge(settingsDataModelFieldRelationFormSchema);
|
||||
.extend(settingsDataModelFieldRelationFormSchema.shape);
|
||||
|
||||
const morphRelationFieldFormSchema = z
|
||||
.object({ type: z.literal(FieldMetadataType.MORPH_RELATION) })
|
||||
.merge(settingsDataModelFieldMorphRelationFormSchema);
|
||||
.extend(settingsDataModelFieldMorphRelationFormSchema.shape);
|
||||
|
||||
const selectFieldFormSchema = z
|
||||
.object({ type: z.literal(FieldMetadataType.SELECT) })
|
||||
.merge(settingsDataModelFieldSelectFormSchema);
|
||||
.extend(settingsDataModelFieldSelectFormSchema.shape);
|
||||
|
||||
const multiSelectFieldFormSchema = z
|
||||
.object({ type: z.literal(FieldMetadataType.MULTI_SELECT) })
|
||||
.merge(settingsDataModelFieldMultiSelectFormSchema);
|
||||
.extend(settingsDataModelFieldMultiSelectFormSchema.shape);
|
||||
|
||||
const numberFieldFormSchema = z
|
||||
.object({ type: z.literal(FieldMetadataType.NUMBER) })
|
||||
.merge(settingsDataModelFieldNumberFormSchema)
|
||||
.merge(isUniqueFieldFormSchema);
|
||||
.extend(settingsDataModelFieldNumberFormSchema.shape)
|
||||
.extend(isUniqueFieldFormSchema.shape);
|
||||
|
||||
const textFieldFormSchema = z
|
||||
.object({ type: z.literal(FieldMetadataType.TEXT) })
|
||||
.merge(settingsDataModelFieldTextFormSchema)
|
||||
.merge(isUniqueFieldFormSchema);
|
||||
.extend(settingsDataModelFieldTextFormSchema.shape)
|
||||
.extend(isUniqueFieldFormSchema.shape);
|
||||
|
||||
const addressFieldFormSchema = z
|
||||
.object({ type: z.literal(FieldMetadataType.ADDRESS) })
|
||||
.merge(settingsDataModelFieldAddressFormSchema);
|
||||
.extend(settingsDataModelFieldAddressFormSchema.shape);
|
||||
|
||||
const phonesFieldFormSchema = z
|
||||
.object({ type: z.literal(FieldMetadataType.PHONES) })
|
||||
.merge(settingsDataModelFieldPhonesFormSchema)
|
||||
.merge(isUniqueFieldFormSchema);
|
||||
.extend(settingsDataModelFieldPhonesFormSchema.shape)
|
||||
.extend(isUniqueFieldFormSchema.shape);
|
||||
|
||||
const otherFieldsFormSchema = z
|
||||
.object({
|
||||
@@ -111,7 +111,7 @@ const otherFieldsFormSchema = z
|
||||
) as [FieldMetadataType, ...FieldMetadataType[]],
|
||||
),
|
||||
})
|
||||
.merge(isUniqueFieldFormSchema);
|
||||
.extend(isUniqueFieldFormSchema.shape);
|
||||
|
||||
export const settingsDataModelFieldSettingsFormSchema = z.discriminatedUnion(
|
||||
'type',
|
||||
|
||||
+1
-1
@@ -25,7 +25,7 @@ import { isDefined } from 'twenty-shared/utils';
|
||||
import { RelationType } from '~/generated-metadata/graphql';
|
||||
|
||||
export const settingsDataModelFieldMorphRelationFormSchema = z.object({
|
||||
morphRelationObjectMetadataIds: z.array(z.string().uuid()).min(2),
|
||||
morphRelationObjectMetadataIds: z.array(z.uuid()).min(2),
|
||||
relationType: z.enum(
|
||||
Object.keys(RELATION_TYPES) as [RelationType, ...RelationType[]],
|
||||
),
|
||||
|
||||
+3
-3
@@ -25,15 +25,15 @@ export const settingsDataModelFieldRelationFormSchema = z.object({
|
||||
label: true,
|
||||
})
|
||||
// NOT SURE IF THIS IS CORRECT
|
||||
.merge(
|
||||
.extend(
|
||||
fieldMetadataItemSchema()
|
||||
.pick({
|
||||
name: true,
|
||||
isLabelSyncedWithName: true,
|
||||
})
|
||||
.partial(),
|
||||
.partial().shape,
|
||||
),
|
||||
objectMetadataId: z.string().uuid(),
|
||||
objectMetadataId: z.uuid(),
|
||||
type: z.enum(
|
||||
Object.keys(RELATION_TYPES) as [RelationType, ...RelationType[]],
|
||||
),
|
||||
|
||||
+5
-3
@@ -7,8 +7,10 @@ import { settingsDataModelFieldTypeFormSchema } from '~/pages/settings/data-mode
|
||||
export const settingsFieldFormSchema = (existingOtherLabels?: string[]) => {
|
||||
return z
|
||||
.object({})
|
||||
.merge(settingsDataModelFieldIconLabelFormSchema(existingOtherLabels))
|
||||
.merge(settingsDataModelFieldDescriptionFormSchema())
|
||||
.merge(settingsDataModelFieldTypeFormSchema)
|
||||
.extend(
|
||||
settingsDataModelFieldIconLabelFormSchema(existingOtherLabels).shape,
|
||||
)
|
||||
.extend(settingsDataModelFieldDescriptionFormSchema().shape)
|
||||
.extend(settingsDataModelFieldTypeFormSchema.shape)
|
||||
.and(settingsDataModelFieldSettingsFormSchema);
|
||||
};
|
||||
|
||||
+3
-2
@@ -27,8 +27,9 @@ export const getMultiSelectFieldPreviewValue = ({
|
||||
|
||||
return multiSelectFieldDefaultValueSchema(fieldMetadataItem.options)
|
||||
.refine(isDefined)
|
||||
.transform((value) =>
|
||||
value.map(stripSimpleQuotesFromString).filter(isNonEmptyString),
|
||||
.transform(
|
||||
(value) =>
|
||||
value?.map(stripSimpleQuotesFromString).filter(isNonEmptyString) ?? [],
|
||||
)
|
||||
.refine(isNonEmptyArray)
|
||||
.catch(allOptionValues)
|
||||
|
||||
+1
-1
@@ -26,7 +26,7 @@ export const getSelectFieldPreviewValue = ({
|
||||
|
||||
return selectFieldDefaultValueSchema(fieldMetadataItem.options)
|
||||
.refine(isDefined)
|
||||
.transform(stripSimpleQuotesFromString)
|
||||
.transform((value) => stripSimpleQuotesFromString(value ?? ''))
|
||||
.refine(isNonEmptyString)
|
||||
.catch(firstOptionValue)
|
||||
.parse(fieldMetadataItem.defaultValue);
|
||||
|
||||
Reference in New Issue
Block a user