Refactor read only object and fields (#13936)

Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
neo773
2025-08-19 21:40:35 +05:30
committed by GitHub
parent bb7cd1baa1
commit 3ef94f6e8c
114 changed files with 1274 additions and 483 deletions
@@ -108,6 +108,11 @@ export class FieldMetadataDTO<T extends FieldMetadataType = FieldMetadataType> {
@FilterableField({ nullable: true })
isSystem?: boolean;
@IsBoolean()
@IsOptional()
@FilterableField({ nullable: true })
isUIReadOnly?: boolean;
@IsBoolean()
@IsOptional()
@Field({ nullable: true })
@@ -103,6 +103,9 @@ export class FieldMetadataEntity<
@Column({ default: false })
isSystem: boolean;
@Column({ default: false })
isUIReadOnly: boolean;
// Is this really nullable ?
@Column({ nullable: true, default: true, type: 'boolean' })
isNullable: boolean | null;
@@ -30,6 +30,7 @@ export const getFlatFieldMetadataMock = <T extends FieldMetadataType>(
label: 'flat field metadata label',
isNullable: true,
isUnique: false,
isUIReadOnly: false,
isLabelSyncedWithName: false,
isSystem: false,
standardId: null,
@@ -53,5 +53,6 @@ export const getDefaultFlatFieldMetadata = ({
settings: settings ?? null,
createdAt,
updatedAt: createdAt,
isUIReadOnly: createFieldInput.isUIReadOnly ?? false,
} as const satisfies FlatFieldMetadata;
};
@@ -25,6 +25,7 @@ export const getFlatObjectMetadataMock = (
isRemote: false,
isSearchable: true,
isSystem: false,
isUIReadOnly: false,
labelIdentifierFieldMetadataId: faker.string.uuid(),
labelPlural: 'default flat object metadata label plural',
labelSingular: 'default flat object metadata label singular',
@@ -63,6 +63,7 @@ export const fromCreateObjectInputToFlatObjectMetadataAndFlatFieldMetadatasToCre
isLabelSyncedWithName: createObjectInput.isLabelSyncedWithName ?? false,
isRemote: createObjectInput.isRemote ?? false,
isSearchable: true,
isUIReadOnly: false,
isSystem: false,
labelIdentifierFieldMetadataId: baseCustomFlatFieldMetadatas.nameField.id,
labelPlural: capitalize(createObjectInput.labelPlural),
@@ -71,6 +71,9 @@ export class ObjectMetadataDTO {
@FilterableField()
isSystem: boolean;
@FilterableField()
isUIReadOnly: boolean;
@FilterableField()
isSearchable: boolean;
@@ -76,6 +76,9 @@ export class ObjectMetadataEntity implements Required<ObjectMetadataEntity> {
@Column({ default: false })
isSystem: boolean;
@Column({ default: false })
isUIReadOnly: boolean;
@Column({ default: true })
isAuditLogged: boolean;
@@ -22,6 +22,7 @@ export const buildDefaultFieldsForCustomObject = (
isActive: true,
isCustom: false,
isSystem: true,
isUIReadOnly: true,
workspaceId,
defaultValue: 'uuid',
},
@@ -36,6 +37,7 @@ export const buildDefaultFieldsForCustomObject = (
isNullable: false,
isActive: true,
isCustom: false,
isUIReadOnly: false,
workspaceId,
defaultValue: "'Untitled'",
},
@@ -50,6 +52,7 @@ export const buildDefaultFieldsForCustomObject = (
isNullable: false,
isActive: true,
isCustom: false,
isUIReadOnly: false,
workspaceId,
defaultValue: 'now',
},
@@ -65,6 +68,7 @@ export const buildDefaultFieldsForCustomObject = (
isActive: true,
isCustom: false,
isSystem: false,
isUIReadOnly: false,
workspaceId,
defaultValue: 'now',
},
@@ -80,6 +84,7 @@ export const buildDefaultFieldsForCustomObject = (
isActive: true,
isCustom: false,
isSystem: false,
isUIReadOnly: true,
workspaceId,
defaultValue: null,
},
@@ -95,6 +100,7 @@ export const buildDefaultFieldsForCustomObject = (
isActive: true,
isCustom: false,
isSystem: false,
isUIReadOnly: true,
workspaceId,
defaultValue: { name: "''", source: "'MANUAL'" },
},
@@ -110,6 +116,7 @@ export const buildDefaultFieldsForCustomObject = (
isActive: true,
isCustom: false,
isSystem: true,
isUIReadOnly: false,
workspaceId,
defaultValue: 0,
},
@@ -35,6 +35,7 @@ export const buildDefaultFlatFieldMetadatasForCustomObject = ({
isActive: true,
isCustom: false,
isSystem: true,
isUIReadOnly: true,
defaultValue: 'uuid',
createdAt,
@@ -65,6 +66,7 @@ export const buildDefaultFlatFieldMetadatasForCustomObject = ({
isActive: true,
isCustom: false,
isSystem: false,
isUIReadOnly: false,
defaultValue: "'Untitled'",
createdAt,
@@ -95,6 +97,7 @@ export const buildDefaultFlatFieldMetadatasForCustomObject = ({
isActive: true,
isCustom: false,
isSystem: false,
isUIReadOnly: true,
defaultValue: 'now',
createdAt,
@@ -125,6 +128,7 @@ export const buildDefaultFlatFieldMetadatasForCustomObject = ({
isActive: true,
isCustom: false,
isSystem: false,
isUIReadOnly: true,
defaultValue: 'now',
createdAt,
@@ -155,6 +159,7 @@ export const buildDefaultFlatFieldMetadatasForCustomObject = ({
isActive: true,
isCustom: false,
isSystem: false,
isUIReadOnly: true,
defaultValue: null,
createdAt,
@@ -185,6 +190,7 @@ export const buildDefaultFlatFieldMetadatasForCustomObject = ({
isActive: true,
isCustom: false,
isSystem: false,
isUIReadOnly: true,
defaultValue: { name: "''", source: "'MANUAL'" },
createdAt,
@@ -215,6 +221,7 @@ export const buildDefaultFlatFieldMetadatasForCustomObject = ({
isActive: true,
isCustom: false,
isSystem: true,
isUIReadOnly: true,
defaultValue: 0,
createdAt,
@@ -245,6 +252,7 @@ export const buildDefaultFlatFieldMetadatasForCustomObject = ({
isActive: true,
isCustom: false,
isSystem: true,
isUIReadOnly: true,
defaultValue: null,
createdAt,
@@ -75,6 +75,7 @@ const generateSourceFlatFieldMetadata = ({
isCustom: false,
isLabelSyncedWithName: false,
isNullable: true,
isUIReadOnly: false,
isSystem: true,
isUnique: false,
label: capitalize(targetFlatObjectMetadata.namePlural),
@@ -133,6 +134,7 @@ const generateTargetFlatFieldMetadata = ({
isCustom: false,
isActive: true,
isSystem: true,
isUIReadOnly: false,
type: FieldMetadataType.RELATION,
icon: 'IconBuildingSkyscraper',
isNullable: true,
@@ -4,6 +4,7 @@ import { FieldMetadataType } from 'twenty-shared/types';
import { DateDisplayFormat } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-settings.interface';
import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator';
import { WorkspaceIsFieldUIReadOnly } from 'src/engine/twenty-orm/decorators/workspace-is-field-ui-readonly.decorator';
import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator';
import { WorkspaceIsPrimaryField } from 'src/engine/twenty-orm/decorators/workspace-is-primary-field.decorator';
import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator';
@@ -19,6 +20,7 @@ export abstract class BaseWorkspaceEntity {
icon: 'Icon123',
})
@WorkspaceIsPrimaryField()
@WorkspaceIsFieldUIReadOnly()
@WorkspaceIsSystem()
id: string;
@@ -33,6 +35,7 @@ export abstract class BaseWorkspaceEntity {
displayFormat: DateDisplayFormat.RELATIVE,
},
})
@WorkspaceIsFieldUIReadOnly()
createdAt: string;
@WorkspaceField({
@@ -46,6 +49,7 @@ export abstract class BaseWorkspaceEntity {
displayFormat: DateDisplayFormat.RELATIVE,
},
})
@WorkspaceIsFieldUIReadOnly()
updatedAt: string;
@WorkspaceField({
@@ -59,5 +63,6 @@ export abstract class BaseWorkspaceEntity {
},
})
@WorkspaceIsNullable()
@WorkspaceIsFieldUIReadOnly()
deletedAt: string | null;
}
@@ -12,6 +12,7 @@ import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity
import { WorkspaceCustomEntity } from 'src/engine/twenty-orm/decorators/workspace-custom-entity.decorator';
import { WorkspaceFieldIndex } from 'src/engine/twenty-orm/decorators/workspace-field-index.decorator';
import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator';
import { WorkspaceIsFieldUIReadOnly } from 'src/engine/twenty-orm/decorators/workspace-is-field-ui-readonly.decorator';
import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator';
import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator';
import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator';
@@ -52,6 +53,7 @@ export class CustomWorkspaceEntity extends BaseWorkspaceEntity {
defaultValue: 0,
})
@WorkspaceIsSystem()
@WorkspaceIsFieldUIReadOnly()
position: number;
@WorkspaceField({
@@ -61,6 +63,7 @@ export class CustomWorkspaceEntity extends BaseWorkspaceEntity {
icon: 'IconCreativeCommonsSa',
description: msg`The creator of the record`,
})
@WorkspaceIsFieldUIReadOnly()
createdBy: ActorMetadata;
@WorkspaceRelation({
@@ -158,6 +161,7 @@ export class CustomWorkspaceEntity extends BaseWorkspaceEntity {
})
@WorkspaceIsNullable()
@WorkspaceIsSystem()
@WorkspaceIsFieldUIReadOnly()
@WorkspaceFieldIndex({ indexType: IndexType.GIN })
searchVector: string;
}
@@ -42,6 +42,11 @@ export function WorkspaceEntity(
'workspace:is-searchable-metadata-args',
target,
) ?? false;
const isUIReadOnly =
TypedReflect.getMetadata(
'workspace:is-object-ui-readonly-metadata-args',
target,
) ?? false;
const objectName = convertClassNameToObjectMetadataName(target.name);
@@ -60,6 +65,7 @@ export function WorkspaceEntity(
shortcut: options.shortcut,
isAuditLogged,
isSystem,
isUIReadOnly,
gate,
duplicateCriteria,
isSearchable,
@@ -52,6 +52,12 @@ export function WorkspaceField<T extends FieldMetadataType>(
object,
propertyKey.toString(),
) ?? false;
const isUIReadOnly =
TypedReflect.getMetadata(
'workspace:is-field-ui-readonly-metadata-args',
object,
propertyKey.toString(),
) ?? false;
const gate = TypedReflect.getMetadata(
'workspace:gate-metadata-args',
object,
@@ -91,6 +97,7 @@ export function WorkspaceField<T extends FieldMetadataType>(
isPrimary,
isNullable,
isSystem,
isUIReadOnly,
gate,
isDeprecated,
isUnique,
@@ -0,0 +1,16 @@
import { TypedReflect } from 'src/utils/typed-reflect';
export function WorkspaceIsFieldUIReadOnly() {
return function (target: object, propertyKey?: string | symbol): void {
if (propertyKey === undefined) {
throw new Error('This decorator should be used with a field not a class');
}
TypedReflect.defineMetadata(
'workspace:is-field-ui-readonly-metadata-args',
true,
target,
propertyKey.toString(),
);
};
}
@@ -0,0 +1,11 @@
import { TypedReflect } from 'src/utils/typed-reflect';
export function WorkspaceIsObjectUIReadOnly() {
return function (target: object): void {
TypedReflect.defineMetadata(
'workspace:is-object-ui-readonly-metadata-args',
true,
target,
);
};
}
@@ -58,6 +58,12 @@ export function WorkspaceRelation<TClass extends object>(
object,
propertyKey.toString(),
) ?? false;
const isUIReadOnly =
TypedReflect.getMetadata(
'workspace:is-field-ui-readonly-metadata-args',
object,
propertyKey.toString(),
) ?? false;
const gate = TypedReflect.getMetadata(
'workspace:gate-metadata-args',
object,
@@ -89,6 +95,7 @@ export function WorkspaceRelation<TClass extends object>(
isPrimary,
isNullable,
isSystem,
isUIReadOnly,
gate,
isLabelSyncedWithName,
});
@@ -53,6 +53,11 @@ export interface WorkspaceEntityMetadataArgs {
*/
readonly isSystem: boolean;
/**
* Is UI read-only object.
*/
readonly isUIReadOnly: boolean;
/**
* Entity gate.
*/
@@ -71,6 +71,11 @@ export interface WorkspaceFieldMetadataArgs {
*/
readonly isSystem: boolean;
/**
* Is UI read-only field.
*/
readonly isUIReadOnly: boolean;
/**
* Is nullable field.
*/
@@ -70,6 +70,11 @@ export interface WorkspaceRelationMetadataArgs {
*/
readonly isSystem: boolean;
/**
* Is UI read-only field.
*/
readonly isUIReadOnly: boolean;
/**
* Is nullable field.
*/
@@ -28,6 +28,7 @@ exports[`Workspace migration builder field actions test suite It should build an
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "flat field metadata label",
"name": "flatFieldMetadataName",
@@ -66,6 +67,7 @@ exports[`Workspace migration builder field actions test suite It should build an
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "flat field metadata label",
"name": "flatFieldMetadataName",
@@ -95,6 +97,7 @@ exports[`Workspace migration builder field actions test suite It should build an
"isRemote": false,
"isSearchable": true,
"isSystem": false,
"isUIReadOnly": false,
"labelIdentifierFieldMetadataId": Any<String>,
"labelPlural": "Rockets",
"labelSingular": "Rocket",
@@ -115,6 +118,7 @@ exports[`Workspace migration builder field actions test suite It should build an
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "flat field metadata label",
"name": "flatFieldMetadataName",
@@ -152,6 +156,7 @@ exports[`Workspace migration builder field actions test suite It should build an
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "flat field metadata label",
"name": "flatFieldMetadataName",
@@ -181,6 +186,7 @@ exports[`Workspace migration builder field actions test suite It should build an
"isRemote": false,
"isSearchable": true,
"isSystem": false,
"isUIReadOnly": false,
"labelIdentifierFieldMetadataId": Any<String>,
"labelPlural": "Rockets",
"labelSingular": "Rocket",
@@ -201,6 +207,7 @@ exports[`Workspace migration builder field actions test suite It should build an
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "flat field metadata label",
"name": "flatFieldMetadataName",
@@ -230,6 +237,7 @@ exports[`Workspace migration builder field actions test suite It should build an
"isRemote": false,
"isSearchable": true,
"isSystem": false,
"isUIReadOnly": false,
"labelIdentifierFieldMetadataId": Any<String>,
"labelPlural": "Pets",
"labelSingular": "Pet",
@@ -250,6 +258,7 @@ exports[`Workspace migration builder field actions test suite It should build an
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "flat field metadata label",
"name": "flatFieldMetadataName",
@@ -416,6 +425,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": false,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Id",
"name": "id",
@@ -447,6 +457,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": false,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Name",
"name": "name",
@@ -478,6 +489,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": false,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Creation date",
"name": "createdAt",
@@ -509,6 +521,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": false,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Last update",
"name": "updatedAt",
@@ -540,6 +553,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Deleted at",
"name": "deletedAt",
@@ -574,6 +588,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": false,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Created by",
"name": "createdBy",
@@ -605,6 +620,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": false,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Position",
"name": "position",
@@ -640,6 +656,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Rocket",
"name": "rocket",
@@ -667,6 +684,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "TimelineActivities",
"name": "timelineActivities",
@@ -704,6 +722,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Rocket",
"name": "rocket",
@@ -731,6 +750,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Favorites",
"name": "favorites",
@@ -768,6 +788,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Rocket",
"name": "rocket",
@@ -795,6 +816,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Attachments",
"name": "attachments",
@@ -832,6 +854,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Rocket",
"name": "rocket",
@@ -859,6 +882,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "NoteTargets",
"name": "noteTargets",
@@ -896,6 +920,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Rocket",
"name": "rocket",
@@ -923,6 +948,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "TaskTargets",
"name": "taskTargets",
@@ -956,6 +982,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Search vector",
"name": "searchVector",
@@ -988,6 +1015,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isRemote": false,
"isSearchable": true,
"isSystem": false,
"isUIReadOnly": false,
"labelIdentifierFieldMetadataId": Any<String>,
"labelPlural": "Rockets",
"labelSingular": "Rocket",
@@ -1028,6 +1056,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Pet",
"name": "pet",
@@ -1055,6 +1084,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "NoteTargets",
"name": "noteTargets",
@@ -1088,6 +1118,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": false,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Id",
"name": "id",
@@ -1119,6 +1150,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": false,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Name",
"name": "name",
@@ -1150,6 +1182,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": false,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Creation date",
"name": "createdAt",
@@ -1181,6 +1214,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": false,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Last update",
"name": "updatedAt",
@@ -1212,6 +1246,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Deleted at",
"name": "deletedAt",
@@ -1246,6 +1281,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": false,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Created by",
"name": "createdBy",
@@ -1277,6 +1313,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": false,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Position",
"name": "position",
@@ -1312,6 +1349,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Pet",
"name": "pet",
@@ -1339,6 +1377,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "TimelineActivities",
"name": "timelineActivities",
@@ -1376,6 +1415,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Pet",
"name": "pet",
@@ -1403,6 +1443,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Favorites",
"name": "favorites",
@@ -1440,6 +1481,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Pet",
"name": "pet",
@@ -1467,6 +1509,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Attachments",
"name": "attachments",
@@ -1504,6 +1547,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Pet",
"name": "pet",
@@ -1531,6 +1575,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "TaskTargets",
"name": "taskTargets",
@@ -1564,6 +1609,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Search vector",
"name": "searchVector",
@@ -1595,6 +1641,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Species",
"name": "species",
@@ -1669,6 +1716,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Traits",
"name": "traits",
@@ -1743,6 +1791,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": false,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Comments",
"name": "comments",
@@ -1774,6 +1823,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Age",
"name": "age",
@@ -1814,6 +1864,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Location",
"name": "location",
@@ -1850,6 +1901,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Vet phone",
"name": "vetPhone",
@@ -1884,6 +1936,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Vet email",
"name": "vetEmail",
@@ -1915,6 +1968,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Birthday",
"name": "birthday",
@@ -1946,6 +2000,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Is good with kids",
"name": "isGoodWithKids",
@@ -1981,6 +2036,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Pictures",
"name": "pictures",
@@ -2015,6 +2071,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Average cost of kibble per month",
"name": "averageCostOfKibblePerMonth",
@@ -2049,6 +2106,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Makes its owner think of",
"name": "makesOwnerThinkOf",
@@ -2080,6 +2138,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Sound swag (bark style, meow style, etc.)",
"name": "soundSwag",
@@ -2142,6 +2201,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Bio",
"name": "bio",
@@ -2173,6 +2233,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Interesting facts",
"name": "interestingFacts",
@@ -2204,6 +2265,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Extra data",
"name": "extraData",
@@ -2236,6 +2298,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isRemote": false,
"isSearchable": true,
"isSystem": false,
"isUIReadOnly": false,
"labelIdentifierFieldMetadataId": Any<String>,
"labelPlural": "Pets",
"labelSingular": "Pet",
@@ -2272,6 +2335,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": false,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Id",
"name": "id",
@@ -2303,6 +2367,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": false,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Name",
"name": "name",
@@ -2334,6 +2399,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": false,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Creation date",
"name": "createdAt",
@@ -2365,6 +2431,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": false,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Last update",
"name": "updatedAt",
@@ -2396,6 +2463,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Deleted at",
"name": "deletedAt",
@@ -2430,6 +2498,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": false,
"isSystem": false,
"isUIReadOnly": false,
"isUnique": false,
"label": "Created by",
"name": "createdBy",
@@ -2461,6 +2530,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": false,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Position",
"name": "position",
@@ -2496,6 +2566,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Rocket",
"name": "rocket",
@@ -2523,6 +2594,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "TimelineActivities",
"name": "timelineActivities",
@@ -2560,6 +2632,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Rocket",
"name": "rocket",
@@ -2587,6 +2660,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Favorites",
"name": "favorites",
@@ -2624,6 +2698,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Rocket",
"name": "rocket",
@@ -2651,6 +2726,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Attachments",
"name": "attachments",
@@ -2688,6 +2764,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Rocket",
"name": "rocket",
@@ -2715,6 +2792,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "NoteTargets",
"name": "noteTargets",
@@ -2752,6 +2830,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Rocket",
"name": "rocket",
@@ -2779,6 +2858,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "TaskTargets",
"name": "taskTargets",
@@ -2812,6 +2892,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isLabelSyncedWithName": false,
"isNullable": true,
"isSystem": true,
"isUIReadOnly": false,
"isUnique": false,
"label": "Search vector",
"name": "searchVector",
@@ -2844,6 +2925,7 @@ exports[`Workspace migration builder object actions test suite It should build a
"isRemote": false,
"isSearchable": true,
"isSystem": false,
"isUIReadOnly": false,
"labelIdentifierFieldMetadataId": Any<String>,
"labelPlural": "Rockets",
"labelSingular": "Rocket",
@@ -153,6 +153,7 @@ export class StandardFieldFactory {
isCustom: workspaceFieldMetadataArgs.isDeprecated ? true : false,
isSystem: workspaceFieldMetadataArgs.isSystem ?? false,
isActive: workspaceFieldMetadataArgs.isActive ?? true,
isUIReadOnly: workspaceFieldMetadataArgs.isUIReadOnly ?? false,
asExpression: workspaceFieldMetadataArgs.asExpression,
generatedType: workspaceFieldMetadataArgs.generatedType,
isLabelSyncedWithName: workspaceFieldMetadataArgs.isLabelSyncedWithName,
@@ -195,6 +196,7 @@ export class StandardFieldFactory {
isSystem:
workspaceEntityMetadataArgs?.isSystem ||
workspaceRelationMetadataArgs.isSystem,
isUIReadOnly: workspaceRelationMetadataArgs.isUIReadOnly,
isNullable: true,
isUnique: false,
isActive: workspaceRelationMetadataArgs.isActive ?? true,
@@ -49,6 +49,7 @@ export const computeStandardFields = (
isNullable: true,
isLabelSyncedWithName: true,
isUnique: null,
isUIReadOnly: false,
options: null,
relationTargetFieldMetadata: null,
relationTargetFieldMetadataId: null,