Refacto default value (#6507)
A quick followup of #6506 to add clarity and differentiate emptyValue from defaultValue
This commit is contained in:
@ -0,0 +1,27 @@
|
||||
import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
|
||||
import { isFieldValueEmpty } from '@/object-record/record-field/utils/isFieldValueEmpty';
|
||||
import { generateEmptyFieldValue } from '@/object-record/utils/generateEmptyFieldValue';
|
||||
import { v4 } from 'uuid';
|
||||
|
||||
export const generateDefaultFieldValue = (
|
||||
fieldMetadataItem: Pick<
|
||||
FieldMetadataItem,
|
||||
'defaultValue' | 'type' | 'fromRelationMetadata'
|
||||
>,
|
||||
) => {
|
||||
const defaultValue = isFieldValueEmpty({
|
||||
fieldValue: fieldMetadataItem.defaultValue,
|
||||
fieldDefinition: fieldMetadataItem,
|
||||
})
|
||||
? generateEmptyFieldValue(fieldMetadataItem)
|
||||
: fieldMetadataItem.defaultValue;
|
||||
|
||||
switch (defaultValue) {
|
||||
case 'uuid':
|
||||
return v4();
|
||||
case 'now':
|
||||
return new Date().toISOString();
|
||||
default:
|
||||
return defaultValue;
|
||||
}
|
||||
};
|
||||
@ -4,7 +4,7 @@ import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
|
||||
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
||||
|
||||
export const generateEmptyFieldValue = (
|
||||
fieldMetadataItem: FieldMetadataItem,
|
||||
fieldMetadataItem: Pick<FieldMetadataItem, 'type' | 'fromRelationMetadata'>,
|
||||
) => {
|
||||
switch (fieldMetadataItem.type) {
|
||||
case FieldMetadataType.Email:
|
||||
|
||||
@ -2,7 +2,7 @@ import { isUndefined } from '@sniptt/guards';
|
||||
|
||||
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { ObjectRecord } from '@/object-record/types/ObjectRecord';
|
||||
import { generateEmptyFieldValue } from '@/object-record/utils/generateEmptyFieldValue';
|
||||
import { generateDefaultFieldValue } from '@/object-record/utils/generateDefaultFieldValue';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const prefillRecord = <T extends ObjectRecord>({
|
||||
@ -20,7 +20,7 @@ export const prefillRecord = <T extends ObjectRecord>({
|
||||
return [
|
||||
fieldMetadataItem.name,
|
||||
isUndefined(inputValue)
|
||||
? generateEmptyFieldValue(fieldMetadataItem)
|
||||
? generateDefaultFieldValue(fieldMetadataItem)
|
||||
: inputValue,
|
||||
];
|
||||
})
|
||||
|
||||
@ -31,55 +31,55 @@ DEFAULT_DATE_VALUE.setFullYear(DEFAULT_DATE_VALUE.getFullYear() + 2);
|
||||
export type SettingsFieldTypeConfig = {
|
||||
label: string;
|
||||
Icon: IconComponent;
|
||||
defaultValue?: unknown;
|
||||
exampleValue?: unknown;
|
||||
};
|
||||
|
||||
export const SETTINGS_FIELD_TYPE_CONFIGS = {
|
||||
[FieldMetadataType.Uuid]: {
|
||||
label: 'Unique ID',
|
||||
Icon: IconKey,
|
||||
defaultValue: '00000000-0000-0000-0000-000000000000',
|
||||
exampleValue: '00000000-0000-0000-0000-000000000000',
|
||||
},
|
||||
[FieldMetadataType.Text]: {
|
||||
label: 'Text',
|
||||
Icon: IconTextSize,
|
||||
defaultValue:
|
||||
exampleValue:
|
||||
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum magna enim, dapibus non enim in, lacinia faucibus nunc. Sed interdum ante sed felis facilisis, eget ultricies neque molestie. Mauris auctor, justo eu volutpat cursus, libero erat tempus nulla, non sodales lorem lacus a est.',
|
||||
},
|
||||
[FieldMetadataType.Numeric]: {
|
||||
label: 'Numeric',
|
||||
Icon: IconNumbers,
|
||||
defaultValue: 2000,
|
||||
exampleValue: 2000,
|
||||
},
|
||||
[FieldMetadataType.Number]: {
|
||||
label: 'Number',
|
||||
Icon: IconNumbers,
|
||||
defaultValue: 2000,
|
||||
exampleValue: 2000,
|
||||
},
|
||||
[FieldMetadataType.Link]: {
|
||||
label: 'Link',
|
||||
Icon: IconLink,
|
||||
defaultValue: { url: 'www.twenty.com', label: '' },
|
||||
exampleValue: { url: 'www.twenty.com', label: '' },
|
||||
},
|
||||
[FieldMetadataType.Links]: {
|
||||
label: 'Links',
|
||||
Icon: IconLink,
|
||||
defaultValue: { primaryLinkUrl: 'twenty.com', primaryLinkLabel: '' },
|
||||
exampleValue: { primaryLinkUrl: 'twenty.com', primaryLinkLabel: '' },
|
||||
},
|
||||
[FieldMetadataType.Boolean]: {
|
||||
label: 'True/False',
|
||||
Icon: IconCheck,
|
||||
defaultValue: true,
|
||||
exampleValue: true,
|
||||
},
|
||||
[FieldMetadataType.DateTime]: {
|
||||
label: 'Date and Time',
|
||||
Icon: IconCalendarTime,
|
||||
defaultValue: DEFAULT_DATE_VALUE.toISOString(),
|
||||
exampleValue: DEFAULT_DATE_VALUE.toISOString(),
|
||||
},
|
||||
[FieldMetadataType.Date]: {
|
||||
label: 'Date',
|
||||
Icon: IconCalendarEvent,
|
||||
defaultValue: DEFAULT_DATE_VALUE.toISOString(),
|
||||
exampleValue: DEFAULT_DATE_VALUE.toISOString(),
|
||||
},
|
||||
[FieldMetadataType.Select]: {
|
||||
label: 'Select',
|
||||
@ -92,7 +92,7 @@ export const SETTINGS_FIELD_TYPE_CONFIGS = {
|
||||
[FieldMetadataType.Currency]: {
|
||||
label: 'Currency',
|
||||
Icon: IconCoins,
|
||||
defaultValue: { amountMicros: 2000000000, currencyCode: CurrencyCode.USD },
|
||||
exampleValue: { amountMicros: 2000000000, currencyCode: CurrencyCode.USD },
|
||||
},
|
||||
[FieldMetadataType.Relation]: {
|
||||
label: 'Relation',
|
||||
@ -102,22 +102,22 @@ export const SETTINGS_FIELD_TYPE_CONFIGS = {
|
||||
[FieldMetadataType.Phone]: {
|
||||
label: 'Phone',
|
||||
Icon: IconPhone,
|
||||
defaultValue: '+1234-567-890',
|
||||
exampleValue: '+1234-567-890',
|
||||
},
|
||||
[FieldMetadataType.Rating]: {
|
||||
label: 'Rating',
|
||||
Icon: IconTwentyStar,
|
||||
defaultValue: '3',
|
||||
exampleValue: '3',
|
||||
},
|
||||
[FieldMetadataType.FullName]: {
|
||||
label: 'Full Name',
|
||||
Icon: IconUser,
|
||||
defaultValue: { firstName: 'John', lastName: 'Doe' },
|
||||
exampleValue: { firstName: 'John', lastName: 'Doe' },
|
||||
},
|
||||
[FieldMetadataType.Address]: {
|
||||
label: 'Address',
|
||||
Icon: IconMap,
|
||||
defaultValue: {
|
||||
exampleValue: {
|
||||
addressStreet1: '456 Oak Street',
|
||||
addressStreet2: 'Unit 3B',
|
||||
addressCity: 'Springfield',
|
||||
@ -131,12 +131,12 @@ export const SETTINGS_FIELD_TYPE_CONFIGS = {
|
||||
[FieldMetadataType.RawJson]: {
|
||||
label: 'JSON',
|
||||
Icon: IconJson,
|
||||
defaultValue: { key: 'value' },
|
||||
exampleValue: { key: 'value' },
|
||||
},
|
||||
[FieldMetadataType.RichText]: {
|
||||
label: 'Rich Text',
|
||||
Icon: IconFilePencil,
|
||||
defaultValue: { key: 'value' },
|
||||
exampleValue: { key: 'value' },
|
||||
},
|
||||
[FieldMetadataType.Actor]: {
|
||||
label: 'Actor',
|
||||
|
||||
@ -1,17 +0,0 @@
|
||||
// Some default value are special keywords such as 'uuid' or 'now'
|
||||
// that are mapped to a function that generates a value on the backend.
|
||||
// (see serializeFunctionDefaultValue.ts on the server)
|
||||
// We need to do a similar mapping on the frontend
|
||||
|
||||
import { v4 } from 'uuid';
|
||||
|
||||
export const getComputedDefaultValue = (defaultValue?: any) => {
|
||||
switch (defaultValue) {
|
||||
case 'uuid':
|
||||
return v4();
|
||||
case 'now':
|
||||
return new Date().toISOString();
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
};
|
||||
@ -1,6 +1,6 @@
|
||||
import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
|
||||
import { isFieldValueEmpty } from '@/object-record/record-field/utils/isFieldValueEmpty';
|
||||
import { getComputedDefaultValue } from '@/settings/data-model/fields/preview/utils/getComputedDefaultValue';
|
||||
import { generateDefaultFieldValue } from '@/object-record/utils/generateDefaultFieldValue';
|
||||
import { getSettingsFieldTypeConfig } from '@/settings/data-model/utils/getSettingsFieldTypeConfig';
|
||||
import { isFieldTypeSupportedInSettings } from '@/settings/data-model/utils/isFieldTypeSupportedInSettings';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
@ -18,17 +18,17 @@ export const getFieldPreviewValue = ({
|
||||
fieldValue: fieldMetadataItem.defaultValue,
|
||||
})
|
||||
) {
|
||||
return getComputedDefaultValue(fieldMetadataItem.defaultValue);
|
||||
return generateDefaultFieldValue(fieldMetadataItem);
|
||||
}
|
||||
|
||||
const fieldTypeConfig = getSettingsFieldTypeConfig(fieldMetadataItem.type);
|
||||
|
||||
if (
|
||||
isDefined(fieldTypeConfig) &&
|
||||
'defaultValue' in fieldTypeConfig &&
|
||||
isDefined(fieldTypeConfig.defaultValue)
|
||||
'exampleValue' in fieldTypeConfig &&
|
||||
isDefined(fieldTypeConfig.exampleValue)
|
||||
) {
|
||||
return getComputedDefaultValue(fieldTypeConfig.defaultValue);
|
||||
return fieldTypeConfig.exampleValue;
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
Reference in New Issue
Block a user