From a72f51ae6cf9d9f3ac2637eb8a22e13964f00fc2 Mon Sep 17 00:00:00 2001 From: Marie <51697796+ijreilly@users.noreply.github.com> Date: Sun, 27 Oct 2024 14:56:08 +0100 Subject: [PATCH] Fix support custom object renaming (#8089) In this PR 1) (FE) fixing update of name not taken into account if toggle value is changed in the same transaction 2) (BE) moving same nameSingular and namePlural validation before effective update --- .../SettingsDataModelObjectAboutForm.tsx | 6 ++- .../data-model/SettingsObjectEdit.tsx | 19 ++++++---- .../object-metadata.service.ts | 38 +++++++++++-------- 3 files changed, 38 insertions(+), 25 deletions(-) diff --git a/packages/twenty-front/src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx b/packages/twenty-front/src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx index 858931019..aed21d0ee 100644 --- a/packages/twenty-front/src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx +++ b/packages/twenty-front/src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx @@ -102,6 +102,8 @@ const StyledLabel = styled.span` const infoCircleElementId = 'info-circle-id'; +export const IS_LABEL_SYNCED_WITH_NAME_LABEL = 'isLabelSyncedWithName'; + export const SettingsDataModelObjectAboutForm = ({ disabled, disableNameEdit, @@ -115,7 +117,7 @@ export const SettingsDataModelObjectAboutForm = ({ isAdvancedModeEnabled, ); - const isLabelSyncedWithName = watch('isLabelSyncedWithName'); + const isLabelSyncedWithName = watch(IS_LABEL_SYNCED_WITH_NAME_LABEL); const labelSingular = watch('labelSingular'); const labelPlural = watch('labelPlural'); const apiNameTooltipText = isLabelSyncedWithName @@ -318,7 +320,7 @@ export const SettingsDataModelObjectAboutForm = ({ ), )} { formValues: SettingsDataModelObjectEditFormValues, ) => { let values = formValues; - if ( - formValues.isLabelSyncedWithName === true || - activeObjectMetadataItem.isLabelSyncedWithName === true - ) { + const dirtyFieldKeys = Object.keys( + formConfig.formState.dirtyFields, + ) as (keyof SettingsDataModelObjectEditFormValues)[]; + const shouldComputeNamesFromLabels: boolean = dirtyFieldKeys.includes( + IS_LABEL_SYNCED_WITH_NAME_LABEL, + ) + ? (formValues.isLabelSyncedWithName as boolean) + : activeObjectMetadataItem.isLabelSyncedWithName; + + if (shouldComputeNamesFromLabels) { values = { ...values, ...(values.labelSingular @@ -104,10 +111,6 @@ export const SettingsObjectEdit = () => { }; } - const dirtyFieldKeys = Object.keys( - formConfig.formState.dirtyFields, - ) as (keyof SettingsDataModelObjectEditFormValues)[]; - return settingsUpdateObjectInputSchema.parse( pick(values, [ ...dirtyFieldKeys, diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts index 7e05d25f9..56c3d549b 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts @@ -447,6 +447,15 @@ export class ObjectMetadataService extends TypeOrmQueryService { + if ( + fullObjectMetadataAfterUpdate.nameSingular === + fullObjectMetadataAfterUpdate.namePlural + ) { + throw new ObjectMetadataException( + 'The singular and plural name cannot be the same for an object', + ObjectMetadataExceptionCode.INVALID_OBJECT_INPUT, + ); + } + }; }