Fix standard object computed metadata (#12883)
# Introduction close https://github.com/twentyhq/twenty/issues/12879 This PR has a global impact all on workspaces It should be crash tested in local using an anon extract of the db
This commit is contained in:
@ -6,7 +6,7 @@ import { FieldMetadataOptions } from 'src/engine/metadata-modules/field-metadata
|
||||
import { FieldMetadataSettings } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-settings.interface';
|
||||
|
||||
import { generateDefaultValue } from 'src/engine/metadata-modules/field-metadata/utils/generate-default-value';
|
||||
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
||||
import { computeMetadataNameFromLabel } from 'src/engine/metadata-modules/utils/validate-name-and-label-are-sync-or-throw.util';
|
||||
import { metadataArgsStorage } from 'src/engine/twenty-orm/storage/metadata-args.storage';
|
||||
import { TypedReflect } from 'src/utils/typed-reflect';
|
||||
|
||||
@ -19,12 +19,8 @@ export interface WorkspaceFieldOptions<
|
||||
> {
|
||||
standardId: string;
|
||||
type: T;
|
||||
label:
|
||||
| MessageDescriptor
|
||||
| ((objectMetadata: ObjectMetadataEntity) => MessageDescriptor);
|
||||
description?:
|
||||
| MessageDescriptor
|
||||
| ((objectMetadata: ObjectMetadataEntity) => MessageDescriptor);
|
||||
label: MessageDescriptor;
|
||||
description?: MessageDescriptor;
|
||||
icon?: string;
|
||||
defaultValue?: FieldMetadataDefaultValue<T>;
|
||||
options?: FieldMetadataOptions<T>;
|
||||
@ -76,30 +72,18 @@ export function WorkspaceField<T extends FieldMetadataType>(
|
||||
|
||||
const defaultValue = (options.defaultValue ??
|
||||
generateDefaultValue(options.type)) as FieldMetadataDefaultValue | null;
|
||||
const name = propertyKey.toString();
|
||||
const label = options.label.message ?? '';
|
||||
const isLabelSyncedWithName = computeMetadataNameFromLabel(label) === name;
|
||||
|
||||
metadataArgsStorage.addFields({
|
||||
target: object.constructor,
|
||||
standardId: options.standardId,
|
||||
name: propertyKey.toString(),
|
||||
label:
|
||||
typeof options.label === 'function'
|
||||
? (objectMetadata: ObjectMetadataEntity) =>
|
||||
(
|
||||
options.label as (
|
||||
obj: ObjectMetadataEntity,
|
||||
) => MessageDescriptor
|
||||
)(objectMetadata).message ?? ''
|
||||
: (options.label.message ?? ''),
|
||||
name,
|
||||
label,
|
||||
type: options.type,
|
||||
description:
|
||||
typeof options.description === 'function'
|
||||
? (objectMetadata: ObjectMetadataEntity) =>
|
||||
(
|
||||
options.description as (
|
||||
obj: ObjectMetadataEntity,
|
||||
) => MessageDescriptor
|
||||
)(objectMetadata).message ?? ''
|
||||
: (options.description?.message ?? ''),
|
||||
isLabelSyncedWithName,
|
||||
description: options.description?.message ?? '',
|
||||
icon: options.icon,
|
||||
defaultValue,
|
||||
options: options.options,
|
||||
|
||||
@ -5,14 +5,13 @@ import { RelationOnDeleteAction } from 'src/engine/metadata-modules/field-metada
|
||||
import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface';
|
||||
|
||||
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
||||
import { computeMetadataNameFromLabel } from 'src/engine/metadata-modules/utils/validate-name-and-label-are-sync-or-throw.util';
|
||||
import { metadataArgsStorage } from 'src/engine/twenty-orm/storage/metadata-args.storage';
|
||||
import { TypedReflect } from 'src/utils/typed-reflect';
|
||||
|
||||
interface WorkspaceRelationBaseOptions<TClass> {
|
||||
standardId: string;
|
||||
label:
|
||||
| MessageDescriptor
|
||||
| ((objectMetadata: ObjectMetadataEntity) => MessageDescriptor);
|
||||
label: MessageDescriptor;
|
||||
description?:
|
||||
| MessageDescriptor
|
||||
| ((objectMetadata: ObjectMetadataEntity) => MessageDescriptor);
|
||||
@ -64,20 +63,15 @@ export function WorkspaceRelation<TClass extends object>(
|
||||
object,
|
||||
propertyKey.toString(),
|
||||
);
|
||||
const name = propertyKey.toString();
|
||||
const label = options.label.message ?? '';
|
||||
const isLabelSyncedWithName = computeMetadataNameFromLabel(label) === name;
|
||||
|
||||
metadataArgsStorage.addRelations({
|
||||
target: object.constructor,
|
||||
standardId: options.standardId,
|
||||
name: propertyKey.toString(),
|
||||
label:
|
||||
typeof options.label === 'function'
|
||||
? (objectMetadata: ObjectMetadataEntity) =>
|
||||
(
|
||||
options.label as (
|
||||
obj: ObjectMetadataEntity,
|
||||
) => MessageDescriptor
|
||||
)(objectMetadata).message ?? ''
|
||||
: (options.label.message ?? ''),
|
||||
name,
|
||||
label,
|
||||
type: options.type,
|
||||
description:
|
||||
typeof options.description === 'function'
|
||||
@ -96,6 +90,7 @@ export function WorkspaceRelation<TClass extends object>(
|
||||
isNullable,
|
||||
isSystem,
|
||||
gate,
|
||||
isLabelSyncedWithName,
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
@ -105,4 +105,6 @@ export interface WorkspaceFieldMetadataArgs {
|
||||
* Is active field.
|
||||
*/
|
||||
readonly asExpression?: string;
|
||||
|
||||
readonly isLabelSyncedWithName: boolean;
|
||||
}
|
||||
|
||||
@ -84,4 +84,6 @@ export interface WorkspaceRelationMetadataArgs {
|
||||
* Is active field.
|
||||
*/
|
||||
readonly isActive?: boolean;
|
||||
|
||||
readonly isLabelSyncedWithName: boolean;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user