* feat: add enum type (RATING, SELECT, MULTI_SELECT) feat: wip enum type feat: try to alter enum feat: wip enum feat: wip enum feat: schema-builder can handle enum fix: return default value in field metadata response * fix: create fieldMedata with options * fix: lint issues * fix: rename abstract factory * feat: drop `PHONE` and `EMAIL` fieldMetadata types * feat: drop `VARCHAR` fieldMetadata type and rely on `TEXT` * Revert "feat: drop `PHONE` and `EMAIL` fieldMetadata types" This reverts commit 3857539f7d42f17c81f6ab92a6db950140b3c8e5.
103 lines
3.1 KiB
TypeScript
103 lines
3.1 KiB
TypeScript
import { FieldMetadataType } from 'src/metadata/field-metadata/field-metadata.entity';
|
|
|
|
export interface FieldMetadataDefaultValueString {
|
|
value: string;
|
|
}
|
|
export interface FieldMetadataDefaultValueNumber {
|
|
value: number;
|
|
}
|
|
export interface FieldMetadataDefaultValueBoolean {
|
|
value: boolean;
|
|
}
|
|
|
|
export interface FieldMetadataDefaultValueStringArray {
|
|
value: string[];
|
|
}
|
|
|
|
export interface FieldMetadataDefaultValueDateTime {
|
|
value: Date;
|
|
}
|
|
|
|
type FieldMetadataScalarDefaultValue =
|
|
| FieldMetadataDefaultValueString
|
|
| FieldMetadataDefaultValueNumber
|
|
| FieldMetadataDefaultValueBoolean
|
|
| FieldMetadataDefaultValueDateTime;
|
|
|
|
export type FieldMetadataDynamicDefaultValue =
|
|
| { type: 'uuid' }
|
|
| { type: 'now' };
|
|
|
|
interface FieldMetadataDefaultValueLink {
|
|
label: string;
|
|
url: string;
|
|
}
|
|
|
|
interface FieldMetadataDefaultValueCurrency {
|
|
amountMicros: number;
|
|
currencyCode: string;
|
|
}
|
|
|
|
interface FieldMetadataDefaultValueFullName {
|
|
firstName: string;
|
|
lastName: string;
|
|
}
|
|
|
|
type AllFieldMetadataDefaultValueTypes =
|
|
| FieldMetadataScalarDefaultValue
|
|
| FieldMetadataDynamicDefaultValue
|
|
| FieldMetadataDefaultValueLink
|
|
| FieldMetadataDefaultValueCurrency
|
|
| FieldMetadataDefaultValueFullName;
|
|
|
|
type FieldMetadataDefaultValueMapping = {
|
|
[FieldMetadataType.UUID]: FieldMetadataDefaultValueString;
|
|
[FieldMetadataType.TEXT]: FieldMetadataDefaultValueString;
|
|
[FieldMetadataType.PHONE]: FieldMetadataDefaultValueString;
|
|
[FieldMetadataType.EMAIL]: FieldMetadataDefaultValueString;
|
|
[FieldMetadataType.DATE_TIME]: FieldMetadataDefaultValueDateTime;
|
|
[FieldMetadataType.BOOLEAN]: FieldMetadataDefaultValueBoolean;
|
|
[FieldMetadataType.NUMBER]: FieldMetadataDefaultValueNumber;
|
|
[FieldMetadataType.NUMERIC]: FieldMetadataDefaultValueString;
|
|
[FieldMetadataType.PROBABILITY]: FieldMetadataDefaultValueNumber;
|
|
[FieldMetadataType.LINK]: FieldMetadataDefaultValueLink;
|
|
[FieldMetadataType.CURRENCY]: FieldMetadataDefaultValueCurrency;
|
|
[FieldMetadataType.FULL_NAME]: FieldMetadataDefaultValueFullName;
|
|
[FieldMetadataType.RATING]: FieldMetadataDefaultValueString;
|
|
[FieldMetadataType.SELECT]: FieldMetadataDefaultValueString;
|
|
[FieldMetadataType.MULTI_SELECT]: FieldMetadataDefaultValueStringArray;
|
|
};
|
|
|
|
type DefaultValueByFieldMetadata<T extends FieldMetadataType | 'default'> = [
|
|
T,
|
|
] extends [keyof FieldMetadataDefaultValueMapping]
|
|
? FieldMetadataDefaultValueMapping[T] | null
|
|
: T extends 'default'
|
|
? AllFieldMetadataDefaultValueTypes | null
|
|
: never;
|
|
|
|
export type FieldMetadataDefaultValue<
|
|
T extends FieldMetadataType | 'default' = 'default',
|
|
> = DefaultValueByFieldMetadata<T>;
|
|
|
|
type FieldMetadataDefaultValueExtractNestedType<T> = T extends {
|
|
value: infer U;
|
|
}
|
|
? U
|
|
: T extends object
|
|
? { [K in keyof T]: T[K] } extends { value: infer V }
|
|
? V
|
|
: T[keyof T]
|
|
: never;
|
|
|
|
type FieldMetadataDefaultValueExtractedTypes = {
|
|
[K in keyof FieldMetadataDefaultValueMapping]: FieldMetadataDefaultValueExtractNestedType<
|
|
FieldMetadataDefaultValueMapping[K]
|
|
>;
|
|
};
|
|
|
|
export type FieldMetadataDefaultSerializableValue =
|
|
| FieldMetadataDefaultValueExtractedTypes[keyof FieldMetadataDefaultValueExtractedTypes]
|
|
| FieldMetadataDynamicDefaultValue
|
|
| null;
|