## Introduction This PR enables functionality discussed in [Layout Date Formatting](https://github.com/twentyhq/core-team-issues/issues/97). ### TLDR; It enables greater control of date formatting at the object's field level by upgrading all DATE and DATE_TIME fields' settings from: ```ts { displayAsRelativeDate: boolean } ``` to: ```ts type FieldDateDisplayFormat = 'full_date' | 'relative_date' | 'date' | 'time' | 'year' | 'custom' { displayFormat: FieldDateDisplayFormat } ``` PR also includes an upgrade command that will update any existing DATE and DATE_TIME fields to the new settings value --------- Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> Co-authored-by: Félix Malfait <felix@twenty.com> Co-authored-by: Félix Malfait <felix.malfait@gmail.com>
64 lines
1.8 KiB
TypeScript
64 lines
1.8 KiB
TypeScript
import { FieldMetadataType, IsExactly } from 'twenty-shared/types';
|
|
|
|
import { RelationOnDeleteAction } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-on-delete-action.interface';
|
|
import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface';
|
|
|
|
export enum NumberDataType {
|
|
FLOAT = 'float',
|
|
INT = 'int',
|
|
BIGINT = 'bigint',
|
|
}
|
|
|
|
export type FieldMetadataDefaultSettings = {
|
|
isForeignKey?: boolean;
|
|
};
|
|
|
|
export enum DateDisplayFormat {
|
|
RELATIVE = 'RELATIVE',
|
|
USER_SETTINGS = 'USER_SETTINGS',
|
|
CUSTOM = 'CUSTOM',
|
|
}
|
|
|
|
export type FieldNumberVariant = 'number' | 'percentage';
|
|
|
|
export type FieldMetadataNumberSettings = {
|
|
dataType: NumberDataType;
|
|
decimals?: number;
|
|
type?: FieldNumberVariant;
|
|
};
|
|
|
|
export type FieldMetadataTextSettings = {
|
|
displayedMaxRows?: number;
|
|
};
|
|
|
|
export type FieldMetadataDateSettings = {
|
|
displayFormat?: DateDisplayFormat;
|
|
};
|
|
|
|
export type FieldMetadataDateTimeSettings = {
|
|
displayFormat?: DateDisplayFormat;
|
|
};
|
|
|
|
export type FieldMetadataRelationSettings = {
|
|
relationType: RelationType;
|
|
onDelete?: RelationOnDeleteAction;
|
|
joinColumnName?: string;
|
|
};
|
|
|
|
type FieldMetadataSettingsMapping = {
|
|
[FieldMetadataType.NUMBER]: FieldMetadataNumberSettings;
|
|
[FieldMetadataType.DATE]: FieldMetadataDateSettings;
|
|
[FieldMetadataType.DATE_TIME]: FieldMetadataDateTimeSettings;
|
|
[FieldMetadataType.TEXT]: FieldMetadataTextSettings;
|
|
[FieldMetadataType.RELATION]: FieldMetadataRelationSettings;
|
|
};
|
|
|
|
export type FieldMetadataSettings<
|
|
T extends FieldMetadataType = FieldMetadataType,
|
|
> =
|
|
IsExactly<T, FieldMetadataType> extends true
|
|
? FieldMetadataDefaultSettings
|
|
: T extends keyof FieldMetadataSettingsMapping
|
|
? FieldMetadataSettingsMapping[T] & FieldMetadataDefaultSettings
|
|
: never;
|