From 944b2b0254907747eaba80028e7f13d1b28808eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tha=C3=AFs?= Date: Wed, 22 May 2024 09:53:15 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20reset=20default=20value=20on=20field=20t?= =?UTF-8?q?ype=20switch=20in=20Settings/Data=20Model=20=E2=80=A6=20(#5436)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …field form Closes #5412 --- ...SettingsDataModelFieldSettingsFormCard.tsx | 22 +++++++-------- .../SettingsDataModelFieldBooleanForm.tsx} | 12 ++++++--- .../SettingsDataModelFieldCurrencyForm.tsx | 27 ++++++++++++++++--- .../SettingsDataModelFieldRelationForm.tsx} | 7 ++--- ...DataModelFieldRelationSettingsFormCard.tsx | 4 +-- .../SettingsDataModelFieldSelectForm.tsx} | 13 ++++++--- ...ingsDataModelFieldSelectFormOptionRow.tsx} | 6 ++--- ...gsDataModelFieldSelectSettingsFormCard.tsx | 2 +- .../utils/getFieldDefaultPreviewValue.ts | 13 +++++---- 9 files changed, 68 insertions(+), 38 deletions(-) rename packages/twenty-front/src/modules/settings/data-model/{components/SettingsDataModelDefaultValue.tsx => fields/forms/components/boolean/SettingsDataModelFieldBooleanForm.tsx} (87%) rename packages/twenty-front/src/modules/settings/data-model/fields/forms/components/{ => currency}/SettingsDataModelFieldCurrencyForm.tsx (75%) rename packages/twenty-front/src/modules/settings/data-model/{components/SettingsObjectFieldRelationForm.tsx => fields/forms/components/relation/SettingsDataModelFieldRelationForm.tsx} (96%) rename packages/twenty-front/src/modules/settings/data-model/fields/forms/components/{ => relation}/SettingsDataModelFieldRelationSettingsFormCard.tsx (97%) rename packages/twenty-front/src/modules/settings/data-model/{components/SettingsObjectFieldSelectForm.tsx => fields/forms/components/select/SettingsDataModelFieldSelectForm.tsx} (94%) rename packages/twenty-front/src/modules/settings/data-model/{components/SettingsObjectFieldSelectFormOptionRow.tsx => fields/forms/components/select/SettingsDataModelFieldSelectFormOptionRow.tsx} (96%) rename packages/twenty-front/src/modules/settings/data-model/fields/forms/components/{ => select}/SettingsDataModelFieldSelectSettingsFormCard.tsx (95%) diff --git a/packages/twenty-front/src/modules/settings/data-model/fields/forms/components/SettingsDataModelFieldSettingsFormCard.tsx b/packages/twenty-front/src/modules/settings/data-model/fields/forms/components/SettingsDataModelFieldSettingsFormCard.tsx index c799bdb62..650378b99 100644 --- a/packages/twenty-front/src/modules/settings/data-model/fields/forms/components/SettingsDataModelFieldSettingsFormCard.tsx +++ b/packages/twenty-front/src/modules/settings/data-model/fields/forms/components/SettingsDataModelFieldSettingsFormCard.tsx @@ -3,23 +3,23 @@ import omit from 'lodash.omit'; import { z } from 'zod'; import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; +import { SettingsDataModelPreviewFormCard } from '@/settings/data-model/components/SettingsDataModelPreviewFormCard'; +import { SETTINGS_FIELD_TYPE_CONFIGS } from '@/settings/data-model/constants/SettingsFieldTypeConfigs'; import { SettingsDataModelFieldBooleanForm, settingsDataModelFieldBooleanFormSchema, -} from '@/settings/data-model/components/SettingsDataModelDefaultValue'; -import { SettingsDataModelPreviewFormCard } from '@/settings/data-model/components/SettingsDataModelPreviewFormCard'; -import { settingsDataModelFieldRelationFormSchema } from '@/settings/data-model/components/SettingsObjectFieldRelationForm'; -import { - settingsDataModelFieldMultiSelectFormSchema, - settingsDataModelFieldSelectFormSchema, -} from '@/settings/data-model/components/SettingsObjectFieldSelectForm'; -import { SETTINGS_FIELD_TYPE_CONFIGS } from '@/settings/data-model/constants/SettingsFieldTypeConfigs'; +} from '@/settings/data-model/fields/forms/components/boolean/SettingsDataModelFieldBooleanForm'; import { SettingsDataModelFieldCurrencyForm, settingsDataModelFieldCurrencyFormSchema, -} from '@/settings/data-model/fields/forms/components/SettingsDataModelFieldCurrencyForm'; -import { SettingsDataModelFieldRelationSettingsFormCard } from '@/settings/data-model/fields/forms/components/SettingsDataModelFieldRelationSettingsFormCard'; -import { SettingsDataModelFieldSelectSettingsFormCard } from '@/settings/data-model/fields/forms/components/SettingsDataModelFieldSelectSettingsFormCard'; +} from '@/settings/data-model/fields/forms/components/currency/SettingsDataModelFieldCurrencyForm'; +import { settingsDataModelFieldRelationFormSchema } from '@/settings/data-model/fields/forms/components/relation/SettingsDataModelFieldRelationForm'; +import { SettingsDataModelFieldRelationSettingsFormCard } from '@/settings/data-model/fields/forms/components/relation/SettingsDataModelFieldRelationSettingsFormCard'; +import { + settingsDataModelFieldMultiSelectFormSchema, + settingsDataModelFieldSelectFormSchema, +} from '@/settings/data-model/fields/forms/components/select/SettingsDataModelFieldSelectForm'; +import { SettingsDataModelFieldSelectSettingsFormCard } from '@/settings/data-model/fields/forms/components/select/SettingsDataModelFieldSelectSettingsFormCard'; import { SettingsDataModelFieldPreviewCard, SettingsDataModelFieldPreviewCardProps, diff --git a/packages/twenty-front/src/modules/settings/data-model/components/SettingsDataModelDefaultValue.tsx b/packages/twenty-front/src/modules/settings/data-model/fields/forms/components/boolean/SettingsDataModelFieldBooleanForm.tsx similarity index 87% rename from packages/twenty-front/src/modules/settings/data-model/components/SettingsDataModelDefaultValue.tsx rename to packages/twenty-front/src/modules/settings/data-model/fields/forms/components/boolean/SettingsDataModelFieldBooleanForm.tsx index 7f7cffc26..806e3d16f 100644 --- a/packages/twenty-front/src/modules/settings/data-model/components/SettingsDataModelDefaultValue.tsx +++ b/packages/twenty-front/src/modules/settings/data-model/fields/forms/components/boolean/SettingsDataModelFieldBooleanForm.tsx @@ -1,3 +1,4 @@ +import { useEffect } from 'react'; import { Controller, useFormContext } from 'react-hook-form'; import styled from '@emotion/styled'; import { IconCheck, IconX } from 'twenty-ui'; @@ -8,8 +9,6 @@ import { Select } from '@/ui/input/components/Select'; import { CardContent } from '@/ui/layout/card/components/CardContent'; import { isDefined } from '~/utils/isDefined'; -// TODO: rename to SettingsDataModelFieldBooleanForm and move to settings/data-model/fields/forms/components - export const settingsDataModelFieldBooleanFormSchema = z.object({ defaultValue: z.boolean(), }); @@ -33,18 +32,23 @@ const StyledLabel = styled.span` font-size: ${({ theme }) => theme.font.size.xs}; font-weight: ${({ theme }) => theme.font.weight.semiBold}; margin-bottom: 6px; - margin-top: ${({ theme }) => theme.spacing(1)}; `; export const SettingsDataModelFieldBooleanForm = ({ className, fieldMetadataItem, }: SettingsDataModelFieldBooleanFormProps) => { - const { control } = useFormContext(); + const { control, resetField } = + useFormContext(); const isEditMode = isDefined(fieldMetadataItem?.defaultValue); const initialValue = fieldMetadataItem?.defaultValue ?? true; + // Reset defaultValue on mount, so it doesn't conflict with other field types. + useEffect(() => { + resetField('defaultValue', { defaultValue: initialValue }); + }, [initialValue, resetField]); + return ( Default Value diff --git a/packages/twenty-front/src/modules/settings/data-model/fields/forms/components/SettingsDataModelFieldCurrencyForm.tsx b/packages/twenty-front/src/modules/settings/data-model/fields/forms/components/currency/SettingsDataModelFieldCurrencyForm.tsx similarity index 75% rename from packages/twenty-front/src/modules/settings/data-model/fields/forms/components/SettingsDataModelFieldCurrencyForm.tsx rename to packages/twenty-front/src/modules/settings/data-model/fields/forms/components/currency/SettingsDataModelFieldCurrencyForm.tsx index d89d447ac..7c09c9ac0 100644 --- a/packages/twenty-front/src/modules/settings/data-model/fields/forms/components/SettingsDataModelFieldCurrencyForm.tsx +++ b/packages/twenty-front/src/modules/settings/data-model/fields/forms/components/currency/SettingsDataModelFieldCurrencyForm.tsx @@ -1,3 +1,4 @@ +import { useEffect } from 'react'; import { Controller, useFormContext } from 'react-hook-form'; import { z } from 'zod'; @@ -13,6 +14,7 @@ import { simpleQuotesStringSchema } from '~/utils/validation-schemas/simpleQuote export const settingsDataModelFieldCurrencyFormSchema = z.object({ defaultValue: z.object({ + amountMicros: z.null(), currencyCode: simpleQuotesStringSchema.refine( (value) => currencyCodeSchema.safeParse(stripSimpleQuotesFromString(value)) @@ -43,19 +45,38 @@ export const SettingsDataModelFieldCurrencyForm = ({ disabled, fieldMetadataItem, }: SettingsDataModelFieldCurrencyFormProps) => { - const { control } = + const { control, resetField } = useFormContext(); - const initialValue = + const initialAmountMicrosValue = null; + const initialCurrencyCode = (fieldMetadataItem?.defaultValue?.currencyCode as CurrencyCode) ?? CurrencyCode.USD; + const initialCurrencyCodeValue = + applySimpleQuotesToString(initialCurrencyCode); + + // Reset defaultValue on mount, so it doesn't conflict with other field types. + useEffect(() => { + resetField('defaultValue', { + defaultValue: { + amountMicros: initialAmountMicrosValue, + currencyCode: initialCurrencyCodeValue, + }, + }); + }, [initialCurrencyCodeValue, resetField]); return ( + <>} + /> (