diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/useFieldMetadataItem.ts b/packages/twenty-front/src/modules/object-metadata/hooks/useFieldMetadataItem.ts index 2c0a196fb..c33c1b288 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/useFieldMetadataItem.ts +++ b/packages/twenty-front/src/modules/object-metadata/hooks/useFieldMetadataItem.ts @@ -17,7 +17,7 @@ export const useFieldMetadataItem = () => { const { deleteOneFieldMetadataItem } = useDeleteOneFieldMetadataItem(); const createMetadataField = ( - input: Pick & { + input: Pick & { defaultValue?: unknown; objectMetadataId: string; options?: Omit[]; @@ -26,7 +26,9 @@ export const useFieldMetadataItem = () => { ) => { const formatedInput = formatFieldMetadataItemInput(input); const defaultValue = input.defaultValue - ? `'${input.defaultValue}'` + ? typeof input.defaultValue == 'string' + ? `'${input.defaultValue}'` + : input.defaultValue : formatedInput.defaultValue ?? undefined; return createOneFieldMetadataItem({ @@ -38,14 +40,25 @@ export const useFieldMetadataItem = () => { }; const editMetadataField = ( - input: Pick & { + input: Pick< + Field, + 'id' | 'label' | 'icon' | 'description' | 'defaultValue' + > & { options?: FieldMetadataOption[]; }, - ) => - updateOneFieldMetadataItem({ + ) => { + const formatedInput = formatFieldMetadataItemInput(input); + const defaultValue = input.defaultValue + ? typeof input.defaultValue == 'string' + ? `'${input.defaultValue}'` + : input.defaultValue + : formatedInput.defaultValue ?? undefined; + + return updateOneFieldMetadataItem({ fieldMetadataIdToUpdate: input.id, updatePayload: formatFieldMetadataItemInput({ ...input, + defaultValue, // In Edit mode, all options need an id, // so we generate an id for newly created options. options: input.options?.map((option) => @@ -53,6 +66,7 @@ export const useFieldMetadataItem = () => { ), }), }); + }; const activateMetadataField = (metadataField: FieldMetadataItem) => updateOneFieldMetadataItem({ diff --git a/packages/twenty-front/src/modules/object-metadata/utils/formatFieldMetadataItemInput.ts b/packages/twenty-front/src/modules/object-metadata/utils/formatFieldMetadataItemInput.ts index 7b72e8b23..3107b96e4 100644 --- a/packages/twenty-front/src/modules/object-metadata/utils/formatFieldMetadataItemInput.ts +++ b/packages/twenty-front/src/modules/object-metadata/utils/formatFieldMetadataItemInput.ts @@ -45,7 +45,7 @@ export const formatFieldMetadataItemInput = ( return { defaultValue: defaultOption ? `'${getOptionValueFromLabel(defaultOption.label)}'` - : undefined, + : input.defaultValue, description: input.description?.trim() ?? null, icon: input.icon, label: input.label.trim(), diff --git a/packages/twenty-front/src/modules/settings/data-model/components/SettingsDataModelDefaultValue.tsx b/packages/twenty-front/src/modules/settings/data-model/components/SettingsDataModelDefaultValue.tsx new file mode 100644 index 000000000..7a1456543 --- /dev/null +++ b/packages/twenty-front/src/modules/settings/data-model/components/SettingsDataModelDefaultValue.tsx @@ -0,0 +1,60 @@ +import styled from '@emotion/styled'; + +import { IconCheck, IconX } from '@/ui/display/icon'; +import { Select } from '@/ui/input/components/Select'; +import { CardContent } from '@/ui/layout/card/components/CardContent'; + +type SettingsDataModelDefaultValueFormProps = { + className?: string; + disabled?: boolean; + onChange?: (defaultValue: SettingsDataModelDefaultValue) => void; + value?: SettingsDataModelDefaultValue; +}; + +export type SettingsDataModelDefaultValue = any; + +const StyledContainer = styled(CardContent)` + padding-bottom: ${({ theme }) => theme.spacing(3.5)}; +`; + +const StyledLabel = styled.span` + color: ${({ theme }) => theme.font.color.light}; + display: block; + 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 SettingsDataModelDefaultValueForm = ({ + className, + disabled, + onChange, + value, +}: SettingsDataModelDefaultValueFormProps) => { + return ( + + Default Value +