### Description
1.
- We are introducing new field type(Emails)
- We are Forbiding creation of Email field
- We Added support for filtering and sorting on Emails field
- We are using the same display mode as used on the Links field type
(chips), check the Domain field of the Company object
- We are also using the same logic of the link when editing the field
\
How To Test\
Follow the below steps for testing locally:\
1. Checkout to TWENTY-6261\
2. Reset database using "npx nx database:reset twenty-server" command\
3. Run both the backend and frontend app\
4. Go to Settings/Data model and choose one of the standard objects like
people\
5. Click on Add Field button and choose Emails as the field type
\
### Refs
#6261\
\
### Demo
\
<https://www.loom.com/share/22979acac8134ed390fef93cc56fe07c?sid=adafba94-840d-4f01-872c-dc9ec256d987>
Co-authored-by: gitstart-twenty <gitstart-twenty@users.noreply.github.com>
83 lines
3.4 KiB
TypeScript
83 lines
3.4 KiB
TypeScript
import {
|
|
FieldMetadataDefaultActor,
|
|
FieldMetadataDefaultValueAddress,
|
|
FieldMetadataDefaultValueBoolean,
|
|
FieldMetadataDefaultValueCurrency,
|
|
FieldMetadataDefaultValueDateTime,
|
|
FieldMetadataDefaultValueEmails,
|
|
FieldMetadataDefaultValueFullName,
|
|
FieldMetadataDefaultValueLink,
|
|
FieldMetadataDefaultValueLinks,
|
|
FieldMetadataDefaultValueNowFunction,
|
|
FieldMetadataDefaultValueNumber,
|
|
FieldMetadataDefaultValueRawJson,
|
|
FieldMetadataDefaultValueRichText,
|
|
FieldMetadataDefaultValueString,
|
|
FieldMetadataDefaultValueUuidFunction,
|
|
} from 'src/engine/metadata-modules/field-metadata/dtos/default-value.input';
|
|
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
|
|
|
|
type ExtractValueType<T> = T extends { value: infer V } ? V : T;
|
|
|
|
type UnionOfValues<T> = T[keyof T];
|
|
|
|
type FieldMetadataDefaultValueMapping = {
|
|
[FieldMetadataType.UUID]:
|
|
| FieldMetadataDefaultValueString
|
|
| FieldMetadataDefaultValueUuidFunction;
|
|
[FieldMetadataType.TEXT]: FieldMetadataDefaultValueString;
|
|
[FieldMetadataType.PHONE]: FieldMetadataDefaultValueString;
|
|
[FieldMetadataType.EMAIL]: FieldMetadataDefaultValueString;
|
|
[FieldMetadataType.EMAILS]: FieldMetadataDefaultValueEmails;
|
|
[FieldMetadataType.DATE_TIME]:
|
|
| FieldMetadataDefaultValueDateTime
|
|
| FieldMetadataDefaultValueNowFunction;
|
|
[FieldMetadataType.DATE]:
|
|
| FieldMetadataDefaultValueDateTime
|
|
| FieldMetadataDefaultValueNowFunction;
|
|
[FieldMetadataType.BOOLEAN]: FieldMetadataDefaultValueBoolean;
|
|
[FieldMetadataType.NUMBER]: FieldMetadataDefaultValueNumber;
|
|
[FieldMetadataType.POSITION]: FieldMetadataDefaultValueNumber;
|
|
[FieldMetadataType.NUMERIC]: FieldMetadataDefaultValueString;
|
|
[FieldMetadataType.LINK]: FieldMetadataDefaultValueLink;
|
|
[FieldMetadataType.LINKS]: FieldMetadataDefaultValueLinks;
|
|
[FieldMetadataType.CURRENCY]: FieldMetadataDefaultValueCurrency;
|
|
[FieldMetadataType.FULL_NAME]: FieldMetadataDefaultValueFullName;
|
|
[FieldMetadataType.ADDRESS]: FieldMetadataDefaultValueAddress;
|
|
[FieldMetadataType.RATING]: FieldMetadataDefaultValueString;
|
|
[FieldMetadataType.SELECT]: FieldMetadataDefaultValueString;
|
|
[FieldMetadataType.MULTI_SELECT]: FieldMetadataDefaultValueString;
|
|
[FieldMetadataType.RAW_JSON]: FieldMetadataDefaultValueRawJson;
|
|
[FieldMetadataType.RICH_TEXT]: FieldMetadataDefaultValueRichText;
|
|
[FieldMetadataType.ACTOR]: FieldMetadataDefaultActor;
|
|
};
|
|
|
|
export type FieldMetadataClassValidation =
|
|
UnionOfValues<FieldMetadataDefaultValueMapping>;
|
|
|
|
export type FieldMetadataFunctionDefaultValue = ExtractValueType<
|
|
FieldMetadataDefaultValueUuidFunction | FieldMetadataDefaultValueNowFunction
|
|
>;
|
|
|
|
type DefaultValueByFieldMetadata<T extends FieldMetadataType | 'default'> = [
|
|
T,
|
|
] extends [keyof FieldMetadataDefaultValueMapping]
|
|
? ExtractValueType<FieldMetadataDefaultValueMapping[T]> | null
|
|
: T extends 'default'
|
|
? ExtractValueType<UnionOfValues<FieldMetadataDefaultValueMapping>> | null
|
|
: never;
|
|
|
|
export type FieldMetadataDefaultValue<
|
|
T extends FieldMetadataType | 'default' = 'default',
|
|
> = DefaultValueByFieldMetadata<T>;
|
|
|
|
type FieldMetadataDefaultValueExtractedTypes = {
|
|
[K in keyof FieldMetadataDefaultValueMapping]: ExtractValueType<
|
|
FieldMetadataDefaultValueMapping[K]
|
|
>;
|
|
};
|
|
|
|
export type FieldMetadataDefaultSerializableValue =
|
|
| FieldMetadataDefaultValueExtractedTypes[keyof FieldMetadataDefaultValueExtractedTypes]
|
|
| null;
|