Combine and clean upgrade commands for record page layouts (#19004)

- Remove the label identifier field for all standard objects as it's a
first-class citizen that is displayed specifically in the app; it
doesn't make a lot of sense to display it in the Fields widgets
- Disable logic that made the label identifier required and in first
position
- Add all fields for all standard objects in record page layout view
fields
- Do not include position and ts vector fields in custom objects

> [!IMPORTANT]
> The command will create Field widgets for all relations. It is
consistent to the way the frontend dynamically generates them as of
today. We will have to decide which relations we pin as individual Field
widgets before the release. (This will likely land in this command or in
another one.)
This commit is contained in:
Baptiste Devessier
2026-03-26 17:50:29 +01:00
committed by GitHub
parent 31718d163c
commit da1b1f1cbc
30 changed files with 3807 additions and 4472 deletions
@@ -6,40 +6,37 @@ exports[`getStandardPageLayoutMetadataRelatedEntityIds should return standard pa
"id": "00000000-0000-0000-0000-000000000011",
"tabs": {
"calendar": {
"id": "00000000-0000-0000-0000-000000000027",
"id": "00000000-0000-0000-0000-000000000026",
"widgets": {
"calendar": {
"id": "00000000-0000-0000-0000-000000000028",
"id": "00000000-0000-0000-0000-000000000027",
},
},
},
"emails": {
"id": "00000000-0000-0000-0000-000000000025",
"id": "00000000-0000-0000-0000-000000000024",
"widgets": {
"emails": {
"id": "00000000-0000-0000-0000-000000000026",
"id": "00000000-0000-0000-0000-000000000025",
},
},
},
"files": {
"id": "00000000-0000-0000-0000-000000000023",
"id": "00000000-0000-0000-0000-000000000022",
"widgets": {
"files": {
"id": "00000000-0000-0000-0000-000000000024",
"id": "00000000-0000-0000-0000-000000000023",
},
},
},
"home": {
"id": "00000000-0000-0000-0000-000000000012",
"widgets": {
"accountOwner": {
"id": "00000000-0000-0000-0000-000000000015",
},
"fields": {
"id": "00000000-0000-0000-0000-000000000013",
},
"opportunities": {
"id": "00000000-0000-0000-0000-000000000016",
"id": "00000000-0000-0000-0000-000000000015",
},
"people": {
"id": "00000000-0000-0000-0000-000000000014",
@@ -47,26 +44,26 @@ exports[`getStandardPageLayoutMetadataRelatedEntityIds should return standard pa
},
},
"notes": {
"id": "00000000-0000-0000-0000-000000000021",
"id": "00000000-0000-0000-0000-000000000020",
"widgets": {
"notes": {
"id": "00000000-0000-0000-0000-000000000022",
"id": "00000000-0000-0000-0000-000000000021",
},
},
},
"tasks": {
"id": "00000000-0000-0000-0000-000000000019",
"id": "00000000-0000-0000-0000-000000000018",
"widgets": {
"tasks": {
"id": "00000000-0000-0000-0000-000000000020",
"id": "00000000-0000-0000-0000-000000000019",
},
},
},
"timeline": {
"id": "00000000-0000-0000-0000-000000000017",
"id": "00000000-0000-0000-0000-000000000016",
"widgets": {
"timeline": {
"id": "00000000-0000-0000-0000-000000000018",
"id": "00000000-0000-0000-0000-000000000017",
},
},
},
@@ -107,281 +104,278 @@ exports[`getStandardPageLayoutMetadataRelatedEntityIds should return standard pa
},
},
"noteRecordPage": {
"id": "00000000-0000-0000-0000-000000000064",
"id": "00000000-0000-0000-0000-000000000063",
"tabs": {
"files": {
"id": "00000000-0000-0000-0000-000000000072",
"id": "00000000-0000-0000-0000-000000000071",
"widgets": {
"files": {
"id": "00000000-0000-0000-0000-000000000073",
"id": "00000000-0000-0000-0000-000000000072",
},
},
},
"home": {
"id": "00000000-0000-0000-0000-000000000065",
"id": "00000000-0000-0000-0000-000000000064",
"widgets": {
"fields": {
"id": "00000000-0000-0000-0000-000000000066",
"id": "00000000-0000-0000-0000-000000000065",
},
"noteRichText": {
"id": "00000000-0000-0000-0000-000000000067",
"id": "00000000-0000-0000-0000-000000000066",
},
},
},
"note": {
"id": "00000000-0000-0000-0000-000000000068",
"id": "00000000-0000-0000-0000-000000000067",
"widgets": {
"noteRichText": {
"id": "00000000-0000-0000-0000-000000000069",
"id": "00000000-0000-0000-0000-000000000068",
},
},
},
"timeline": {
"id": "00000000-0000-0000-0000-000000000070",
"id": "00000000-0000-0000-0000-000000000069",
"widgets": {
"timeline": {
"id": "00000000-0000-0000-0000-000000000071",
"id": "00000000-0000-0000-0000-000000000070",
},
},
},
},
},
"opportunityRecordPage": {
"id": "00000000-0000-0000-0000-000000000046",
"id": "00000000-0000-0000-0000-000000000045",
"tabs": {
"calendar": {
"id": "00000000-0000-0000-0000-000000000062",
"id": "00000000-0000-0000-0000-000000000061",
"widgets": {
"calendar": {
"id": "00000000-0000-0000-0000-000000000063",
"id": "00000000-0000-0000-0000-000000000062",
},
},
},
"emails": {
"id": "00000000-0000-0000-0000-000000000060",
"id": "00000000-0000-0000-0000-000000000059",
"widgets": {
"emails": {
"id": "00000000-0000-0000-0000-000000000061",
"id": "00000000-0000-0000-0000-000000000060",
},
},
},
"files": {
"id": "00000000-0000-0000-0000-000000000058",
"id": "00000000-0000-0000-0000-000000000057",
"widgets": {
"files": {
"id": "00000000-0000-0000-0000-000000000059",
"id": "00000000-0000-0000-0000-000000000058",
},
},
},
"home": {
"id": "00000000-0000-0000-0000-000000000047",
"id": "00000000-0000-0000-0000-000000000046",
"widgets": {
"company": {
"id": "00000000-0000-0000-0000-000000000050",
"id": "00000000-0000-0000-0000-000000000049",
},
"fields": {
"id": "00000000-0000-0000-0000-000000000048",
"id": "00000000-0000-0000-0000-000000000047",
},
"owner": {
"id": "00000000-0000-0000-0000-000000000051",
"id": "00000000-0000-0000-0000-000000000050",
},
"pointOfContact": {
"id": "00000000-0000-0000-0000-000000000049",
"id": "00000000-0000-0000-0000-000000000048",
},
},
},
"notes": {
"id": "00000000-0000-0000-0000-000000000056",
"id": "00000000-0000-0000-0000-000000000055",
"widgets": {
"notes": {
"id": "00000000-0000-0000-0000-000000000057",
"id": "00000000-0000-0000-0000-000000000056",
},
},
},
"tasks": {
"id": "00000000-0000-0000-0000-000000000054",
"id": "00000000-0000-0000-0000-000000000053",
"widgets": {
"tasks": {
"id": "00000000-0000-0000-0000-000000000055",
"id": "00000000-0000-0000-0000-000000000054",
},
},
},
"timeline": {
"id": "00000000-0000-0000-0000-000000000052",
"id": "00000000-0000-0000-0000-000000000051",
"widgets": {
"timeline": {
"id": "00000000-0000-0000-0000-000000000053",
"id": "00000000-0000-0000-0000-000000000052",
},
},
},
},
},
"personRecordPage": {
"id": "00000000-0000-0000-0000-000000000029",
"id": "00000000-0000-0000-0000-000000000028",
"tabs": {
"calendar": {
"id": "00000000-0000-0000-0000-000000000044",
"id": "00000000-0000-0000-0000-000000000043",
"widgets": {
"calendar": {
"id": "00000000-0000-0000-0000-000000000045",
"id": "00000000-0000-0000-0000-000000000044",
},
},
},
"emails": {
"id": "00000000-0000-0000-0000-000000000042",
"id": "00000000-0000-0000-0000-000000000041",
"widgets": {
"emails": {
"id": "00000000-0000-0000-0000-000000000043",
"id": "00000000-0000-0000-0000-000000000042",
},
},
},
"files": {
"id": "00000000-0000-0000-0000-000000000040",
"id": "00000000-0000-0000-0000-000000000039",
"widgets": {
"files": {
"id": "00000000-0000-0000-0000-000000000041",
"id": "00000000-0000-0000-0000-000000000040",
},
},
},
"home": {
"id": "00000000-0000-0000-0000-000000000030",
"id": "00000000-0000-0000-0000-000000000029",
"widgets": {
"company": {
"id": "00000000-0000-0000-0000-000000000032",
},
"fields": {
"id": "00000000-0000-0000-0000-000000000031",
},
"fields": {
"id": "00000000-0000-0000-0000-000000000030",
},
"pointOfContactForOpportunities": {
"id": "00000000-0000-0000-0000-000000000033",
"id": "00000000-0000-0000-0000-000000000032",
},
},
},
"notes": {
"id": "00000000-0000-0000-0000-000000000038",
"id": "00000000-0000-0000-0000-000000000037",
"widgets": {
"notes": {
"id": "00000000-0000-0000-0000-000000000039",
"id": "00000000-0000-0000-0000-000000000038",
},
},
},
"tasks": {
"id": "00000000-0000-0000-0000-000000000036",
"id": "00000000-0000-0000-0000-000000000035",
"widgets": {
"tasks": {
"id": "00000000-0000-0000-0000-000000000037",
"id": "00000000-0000-0000-0000-000000000036",
},
},
},
"timeline": {
"id": "00000000-0000-0000-0000-000000000034",
"id": "00000000-0000-0000-0000-000000000033",
"widgets": {
"timeline": {
"id": "00000000-0000-0000-0000-000000000035",
"id": "00000000-0000-0000-0000-000000000034",
},
},
},
},
},
"taskRecordPage": {
"id": "00000000-0000-0000-0000-000000000074",
"id": "00000000-0000-0000-0000-000000000073",
"tabs": {
"files": {
"id": "00000000-0000-0000-0000-000000000083",
"id": "00000000-0000-0000-0000-000000000081",
"widgets": {
"files": {
"id": "00000000-0000-0000-0000-000000000084",
"id": "00000000-0000-0000-0000-000000000082",
},
},
},
"home": {
"id": "00000000-0000-0000-0000-000000000075",
"id": "00000000-0000-0000-0000-000000000074",
"widgets": {
"assignee": {
"id": "00000000-0000-0000-0000-000000000078",
},
"fields": {
"id": "00000000-0000-0000-0000-000000000076",
"id": "00000000-0000-0000-0000-000000000075",
},
"taskRichText": {
"id": "00000000-0000-0000-0000-000000000077",
"id": "00000000-0000-0000-0000-000000000076",
},
},
},
"note": {
"id": "00000000-0000-0000-0000-000000000079",
"id": "00000000-0000-0000-0000-000000000077",
"widgets": {
"taskRichText": {
"id": "00000000-0000-0000-0000-000000000080",
"id": "00000000-0000-0000-0000-000000000078",
},
},
},
"timeline": {
"id": "00000000-0000-0000-0000-000000000081",
"id": "00000000-0000-0000-0000-000000000079",
"widgets": {
"timeline": {
"id": "00000000-0000-0000-0000-000000000082",
"id": "00000000-0000-0000-0000-000000000080",
},
},
},
},
},
"workflowRecordPage": {
"id": "00000000-0000-0000-0000-000000000085",
"id": "00000000-0000-0000-0000-000000000083",
"tabs": {
"flow": {
"id": "00000000-0000-0000-0000-000000000086",
"id": "00000000-0000-0000-0000-000000000084",
"widgets": {
"workflow": {
"id": "00000000-0000-0000-0000-000000000087",
"id": "00000000-0000-0000-0000-000000000085",
},
},
},
},
},
"workflowRunRecordPage": {
"id": "00000000-0000-0000-0000-000000000094",
"id": "00000000-0000-0000-0000-000000000092",
"tabs": {
"flow": {
"id": "00000000-0000-0000-0000-000000000098",
"id": "00000000-0000-0000-0000-000000000096",
"widgets": {
"workflowRun": {
"id": "00000000-0000-0000-0000-000000000099",
"id": "00000000-0000-0000-0000-000000000097",
},
},
},
"home": {
"id": "00000000-0000-0000-0000-000000000095",
"id": "00000000-0000-0000-0000-000000000093",
"widgets": {
"fields": {
"id": "00000000-0000-0000-0000-000000000096",
"id": "00000000-0000-0000-0000-000000000094",
},
"workflow": {
"id": "00000000-0000-0000-0000-000000000097",
"id": "00000000-0000-0000-0000-000000000095",
},
},
},
},
},
"workflowVersionRecordPage": {
"id": "00000000-0000-0000-0000-000000000088",
"id": "00000000-0000-0000-0000-000000000086",
"tabs": {
"flow": {
"id": "00000000-0000-0000-0000-000000000092",
"id": "00000000-0000-0000-0000-000000000090",
"widgets": {
"workflowVersion": {
"id": "00000000-0000-0000-0000-000000000093",
"id": "00000000-0000-0000-0000-000000000091",
},
},
},
"home": {
"id": "00000000-0000-0000-0000-000000000089",
"id": "00000000-0000-0000-0000-000000000087",
"widgets": {
"fields": {
"id": "00000000-0000-0000-0000-000000000090",
"id": "00000000-0000-0000-0000-000000000088",
},
"workflow": {
"id": "00000000-0000-0000-0000-000000000091",
"id": "00000000-0000-0000-0000-000000000089",
},
},
},
@@ -31,21 +31,12 @@ const COMPANY_PAGE_TABS = {
fieldUniversalIdentifier:
STANDARD_OBJECTS.company.fields.people.universalIdentifier,
},
accountOwner: {
universalIdentifier: '20202020-ac01-4001-8001-c0aba11c0113',
title: 'Account Owner',
type: WidgetType.FIELD,
gridPosition: GRID_POSITIONS.FULL_WIDTH,
position: VERTICAL_LIST_LAYOUT_POSITIONS.THIRD,
fieldUniversalIdentifier:
STANDARD_OBJECTS.company.fields.accountOwner.universalIdentifier,
},
opportunities: {
universalIdentifier: '20202020-ac01-4001-8001-c0aba11c0114',
title: 'Opportunities',
type: WidgetType.FIELD,
gridPosition: GRID_POSITIONS.FULL_WIDTH,
position: VERTICAL_LIST_LAYOUT_POSITIONS.FOURTH,
position: VERTICAL_LIST_LAYOUT_POSITIONS.THIRD,
fieldUniversalIdentifier:
STANDARD_OBJECTS.company.fields.opportunities.universalIdentifier,
},
@@ -1,13 +1,10 @@
import { STANDARD_OBJECTS } from 'twenty-shared/metadata';
import { WidgetType } from 'src/engine/metadata-modules/page-layout-widget/enums/widget-type.enum';
import { PageLayoutType } from 'src/engine/metadata-modules/page-layout/enums/page-layout-type.enum';
import {
CONDITIONAL_DISPLAY_DEVICE_DESKTOP,
CONDITIONAL_DISPLAY_DEVICE_MOBILE,
GRID_POSITIONS,
TAB_PROPS,
VERTICAL_LIST_LAYOUT_POSITIONS,
WIDGET_PROPS,
} from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-page-layout-tabs.template';
import {
@@ -32,15 +29,6 @@ const TASK_PAGE_TABS = {
position: { layoutMode: TAB_PROPS.home.layoutMode, index: 1 },
conditionalDisplay: CONDITIONAL_DISPLAY_DEVICE_MOBILE,
},
assignee: {
universalIdentifier: '20202020-ac05-4005-8005-ba5ca11a5513',
title: 'Assignee',
type: WidgetType.FIELD,
gridPosition: GRID_POSITIONS.FULL_WIDTH,
position: VERTICAL_LIST_LAYOUT_POSITIONS.THIRD,
fieldUniversalIdentifier:
STANDARD_OBJECTS.task.fields.assignee.universalIdentifier,
},
},
},
note: {
@@ -45,19 +45,6 @@ export const computeStandardBlocklistViewFields = (
},
}),
blocklistRecordPageFieldsHandle: createStandardViewFieldFlatMetadata({
...args,
objectName: 'blocklist',
context: {
viewName: 'blocklistRecordPageFields',
viewFieldName: 'handle',
fieldName: 'handle',
position: 0,
isVisible: true,
size: 150,
viewFieldGroupName: 'general',
},
}),
blocklistRecordPageFieldsWorkspaceMember:
createStandardViewFieldFlatMetadata({
...args,
@@ -81,19 +81,6 @@ export const computeStandardCalendarChannelViewFields = (
},
}),
calendarChannelRecordPageFieldsHandle: createStandardViewFieldFlatMetadata({
...args,
objectName: 'calendarChannel',
context: {
viewName: 'calendarChannelRecordPageFields',
viewFieldName: 'handle',
fieldName: 'handle',
position: 0,
isVisible: true,
size: 150,
viewFieldGroupName: 'general',
},
}),
calendarChannelRecordPageFieldsConnectedAccount:
createStandardViewFieldFlatMetadata({
...args,
@@ -245,5 +245,123 @@ export const computeStandardCompanyViewFields = (
viewFieldGroupName: 'other',
},
}),
companyRecordPageFieldsUpdatedAt: createStandardViewFieldFlatMetadata({
...args,
objectName: 'company',
context: {
viewName: 'companyRecordPageFields',
viewFieldName: 'updatedAt',
fieldName: 'updatedAt',
position: 6,
isVisible: false,
size: 150,
viewFieldGroupName: 'other',
},
}),
companyRecordPageFieldsUpdatedBy: createStandardViewFieldFlatMetadata({
...args,
objectName: 'company',
context: {
viewName: 'companyRecordPageFields',
viewFieldName: 'updatedBy',
fieldName: 'updatedBy',
position: 7,
isVisible: false,
size: 150,
viewFieldGroupName: 'other',
},
}),
companyRecordPageFieldsPeople: createStandardViewFieldFlatMetadata({
...args,
objectName: 'company',
context: {
viewName: 'companyRecordPageFields',
viewFieldName: 'people',
fieldName: 'people',
position: 4,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
}),
companyRecordPageFieldsTaskTargets: createStandardViewFieldFlatMetadata({
...args,
objectName: 'company',
context: {
viewName: 'companyRecordPageFields',
viewFieldName: 'taskTargets',
fieldName: 'taskTargets',
position: 5,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
}),
companyRecordPageFieldsNoteTargets: createStandardViewFieldFlatMetadata({
...args,
objectName: 'company',
context: {
viewName: 'companyRecordPageFields',
viewFieldName: 'noteTargets',
fieldName: 'noteTargets',
position: 6,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
}),
companyRecordPageFieldsOpportunities: createStandardViewFieldFlatMetadata({
...args,
objectName: 'company',
context: {
viewName: 'companyRecordPageFields',
viewFieldName: 'opportunities',
fieldName: 'opportunities',
position: 7,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
}),
companyRecordPageFieldsFavorites: createStandardViewFieldFlatMetadata({
...args,
objectName: 'company',
context: {
viewName: 'companyRecordPageFields',
viewFieldName: 'favorites',
fieldName: 'favorites',
position: 8,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
}),
companyRecordPageFieldsAttachments: createStandardViewFieldFlatMetadata({
...args,
objectName: 'company',
context: {
viewName: 'companyRecordPageFields',
viewFieldName: 'attachments',
fieldName: 'attachments',
position: 9,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
}),
companyRecordPageFieldsTimelineActivities:
createStandardViewFieldFlatMetadata({
...args,
objectName: 'company',
context: {
viewName: 'companyRecordPageFields',
viewFieldName: 'timelineActivities',
fieldName: 'timelineActivities',
position: 10,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
}),
};
};
@@ -69,21 +69,6 @@ export const computeStandardConnectedAccountViewFields = (
},
}),
connectedAccountRecordPageFieldsHandle: createStandardViewFieldFlatMetadata(
{
...args,
objectName: 'connectedAccount',
context: {
viewName: 'connectedAccountRecordPageFields',
viewFieldName: 'handle',
fieldName: 'handle',
position: 0,
isVisible: true,
size: 150,
viewFieldGroupName: 'general',
},
},
),
connectedAccountRecordPageFieldsProvider:
createStandardViewFieldFlatMetadata({
...args,
@@ -33,19 +33,6 @@ export const computeStandardFavoriteFolderViewFields = (
},
}),
favoriteFolderRecordPageFieldsName: createStandardViewFieldFlatMetadata({
...args,
objectName: 'favoriteFolder',
context: {
viewName: 'favoriteFolderRecordPageFields',
viewFieldName: 'name',
fieldName: 'name',
position: 0,
isVisible: true,
size: 150,
viewFieldGroupName: 'general',
},
}),
favoriteFolderRecordPageFieldsCreatedAt:
createStandardViewFieldFlatMetadata({
...args,
@@ -93,19 +93,6 @@ export const computeStandardMessageChannelViewFields = (
},
}),
messageChannelRecordPageFieldsHandle: createStandardViewFieldFlatMetadata({
...args,
objectName: 'messageChannel',
context: {
viewName: 'messageChannelRecordPageFields',
viewFieldName: 'handle',
fieldName: 'handle',
position: 0,
isVisible: true,
size: 150,
viewFieldGroupName: 'general',
},
}),
messageChannelRecordPageFieldsConnectedAccount:
createStandardViewFieldFlatMetadata({
...args,
@@ -69,19 +69,6 @@ export const computeStandardMessageFolderViewFields = (
},
}),
messageFolderRecordPageFieldsName: createStandardViewFieldFlatMetadata({
...args,
objectName: 'messageFolder',
context: {
viewName: 'messageFolderRecordPageFields',
viewFieldName: 'name',
fieldName: 'name',
position: 0,
isVisible: true,
size: 150,
viewFieldGroupName: 'general',
},
}),
messageFolderRecordPageFieldsMessageChannel:
createStandardViewFieldFlatMetadata({
...args,
@@ -93,20 +93,6 @@ export const computeStandardMessageParticipantViewFields = (
},
}),
messageParticipantRecordPageFieldsHandle:
createStandardViewFieldFlatMetadata({
...args,
objectName: 'messageParticipant',
context: {
viewName: 'messageParticipantRecordPageFields',
viewFieldName: 'handle',
fieldName: 'handle',
position: 0,
isVisible: true,
size: 150,
viewFieldGroupName: 'general',
},
}),
messageParticipantRecordPageFieldsMessage:
createStandardViewFieldFlatMetadata({
...args,
@@ -70,19 +70,6 @@ export const computeStandardNoteViewFields = (
}),
// noteRecordPageFields view fields
noteRecordPageFieldsTitle: createStandardViewFieldFlatMetadata({
...args,
objectName: 'note',
context: {
viewName: 'noteRecordPageFields',
viewFieldName: 'title',
fieldName: 'title',
position: 0,
isVisible: true,
size: 150,
viewFieldGroupName: 'general',
},
}),
noteRecordPageFieldsNoteTargets: createStandardViewFieldFlatMetadata({
...args,
objectName: 'note',
@@ -122,5 +109,85 @@ export const computeStandardNoteViewFields = (
viewFieldGroupName: 'other',
},
}),
noteRecordPageFieldsBodyV2: createStandardViewFieldFlatMetadata({
...args,
objectName: 'note',
context: {
viewName: 'noteRecordPageFields',
viewFieldName: 'bodyV2',
fieldName: 'bodyV2',
position: 0,
isVisible: false,
size: 150,
viewFieldGroupName: 'additional',
},
}),
noteRecordPageFieldsUpdatedAt: createStandardViewFieldFlatMetadata({
...args,
objectName: 'note',
context: {
viewName: 'noteRecordPageFields',
viewFieldName: 'updatedAt',
fieldName: 'updatedAt',
position: 2,
isVisible: false,
size: 150,
viewFieldGroupName: 'other',
},
}),
noteRecordPageFieldsUpdatedBy: createStandardViewFieldFlatMetadata({
...args,
objectName: 'note',
context: {
viewName: 'noteRecordPageFields',
viewFieldName: 'updatedBy',
fieldName: 'updatedBy',
position: 3,
isVisible: false,
size: 150,
viewFieldGroupName: 'other',
},
}),
noteRecordPageFieldsAttachments: createStandardViewFieldFlatMetadata({
...args,
objectName: 'note',
context: {
viewName: 'noteRecordPageFields',
viewFieldName: 'attachments',
fieldName: 'attachments',
position: 2,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
}),
noteRecordPageFieldsTimelineActivities: createStandardViewFieldFlatMetadata(
{
...args,
objectName: 'note',
context: {
viewName: 'noteRecordPageFields',
viewFieldName: 'timelineActivities',
fieldName: 'timelineActivities',
position: 3,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
},
),
noteRecordPageFieldsFavorites: createStandardViewFieldFlatMetadata({
...args,
objectName: 'note',
context: {
viewName: 'noteRecordPageFields',
viewFieldName: 'favorites',
fieldName: 'favorites',
position: 4,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
}),
};
};
@@ -266,5 +266,103 @@ export const computeStandardOpportunityViewFields = (
viewFieldGroupName: 'other',
},
}),
opportunityRecordPageFieldsUpdatedAt: createStandardViewFieldFlatMetadata({
...args,
objectName: 'opportunity',
context: {
viewName: 'opportunityRecordPageFields',
viewFieldName: 'updatedAt',
fieldName: 'updatedAt',
position: 2,
isVisible: false,
size: 150,
viewFieldGroupName: 'other',
},
}),
opportunityRecordPageFieldsUpdatedBy: createStandardViewFieldFlatMetadata({
...args,
objectName: 'opportunity',
context: {
viewName: 'opportunityRecordPageFields',
viewFieldName: 'updatedBy',
fieldName: 'updatedBy',
position: 3,
isVisible: false,
size: 150,
viewFieldGroupName: 'other',
},
}),
opportunityRecordPageFieldsFavorites: createStandardViewFieldFlatMetadata({
...args,
objectName: 'opportunity',
context: {
viewName: 'opportunityRecordPageFields',
viewFieldName: 'favorites',
fieldName: 'favorites',
position: 5,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
}),
opportunityRecordPageFieldsTaskTargets: createStandardViewFieldFlatMetadata(
{
...args,
objectName: 'opportunity',
context: {
viewName: 'opportunityRecordPageFields',
viewFieldName: 'taskTargets',
fieldName: 'taskTargets',
position: 6,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
},
),
opportunityRecordPageFieldsNoteTargets: createStandardViewFieldFlatMetadata(
{
...args,
objectName: 'opportunity',
context: {
viewName: 'opportunityRecordPageFields',
viewFieldName: 'noteTargets',
fieldName: 'noteTargets',
position: 7,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
},
),
opportunityRecordPageFieldsAttachments: createStandardViewFieldFlatMetadata(
{
...args,
objectName: 'opportunity',
context: {
viewName: 'opportunityRecordPageFields',
viewFieldName: 'attachments',
fieldName: 'attachments',
position: 8,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
},
),
opportunityRecordPageFieldsTimelineActivities:
createStandardViewFieldFlatMetadata({
...args,
objectName: 'opportunity',
context: {
viewName: 'opportunityRecordPageFields',
viewFieldName: 'timelineActivities',
fieldName: 'timelineActivities',
position: 9,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
}),
};
};
@@ -266,5 +266,152 @@ export const computeStandardPersonViewFields = (
viewFieldGroupName: 'other',
},
}),
personRecordPageFieldsUpdatedAt: createStandardViewFieldFlatMetadata({
...args,
objectName: 'person',
context: {
viewName: 'personRecordPageFields',
viewFieldName: 'updatedAt',
fieldName: 'updatedAt',
position: 4,
isVisible: false,
size: 150,
viewFieldGroupName: 'other',
},
}),
personRecordPageFieldsUpdatedBy: createStandardViewFieldFlatMetadata({
...args,
objectName: 'person',
context: {
viewName: 'personRecordPageFields',
viewFieldName: 'updatedBy',
fieldName: 'updatedBy',
position: 5,
isVisible: false,
size: 150,
viewFieldGroupName: 'other',
},
}),
personRecordPageFieldsAvatarFile: createStandardViewFieldFlatMetadata({
...args,
objectName: 'person',
context: {
viewName: 'personRecordPageFields',
viewFieldName: 'avatarFile',
fieldName: 'avatarFile',
position: 0,
isVisible: false,
size: 150,
viewFieldGroupName: 'additional',
},
}),
personRecordPageFieldsPointOfContactForOpportunities:
createStandardViewFieldFlatMetadata({
...args,
objectName: 'person',
context: {
viewName: 'personRecordPageFields',
viewFieldName: 'pointOfContactForOpportunities',
fieldName: 'pointOfContactForOpportunities',
position: 5,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
}),
personRecordPageFieldsTaskTargets: createStandardViewFieldFlatMetadata({
...args,
objectName: 'person',
context: {
viewName: 'personRecordPageFields',
viewFieldName: 'taskTargets',
fieldName: 'taskTargets',
position: 6,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
}),
personRecordPageFieldsNoteTargets: createStandardViewFieldFlatMetadata({
...args,
objectName: 'person',
context: {
viewName: 'personRecordPageFields',
viewFieldName: 'noteTargets',
fieldName: 'noteTargets',
position: 7,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
}),
personRecordPageFieldsFavorites: createStandardViewFieldFlatMetadata({
...args,
objectName: 'person',
context: {
viewName: 'personRecordPageFields',
viewFieldName: 'favorites',
fieldName: 'favorites',
position: 8,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
}),
personRecordPageFieldsAttachments: createStandardViewFieldFlatMetadata({
...args,
objectName: 'person',
context: {
viewName: 'personRecordPageFields',
viewFieldName: 'attachments',
fieldName: 'attachments',
position: 9,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
}),
personRecordPageFieldsMessageParticipants:
createStandardViewFieldFlatMetadata({
...args,
objectName: 'person',
context: {
viewName: 'personRecordPageFields',
viewFieldName: 'messageParticipants',
fieldName: 'messageParticipants',
position: 10,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
}),
personRecordPageFieldsCalendarEventParticipants:
createStandardViewFieldFlatMetadata({
...args,
objectName: 'person',
context: {
viewName: 'personRecordPageFields',
viewFieldName: 'calendarEventParticipants',
fieldName: 'calendarEventParticipants',
position: 11,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
}),
personRecordPageFieldsTimelineActivities:
createStandardViewFieldFlatMetadata({
...args,
objectName: 'person',
context: {
viewName: 'personRecordPageFields',
viewFieldName: 'timelineActivities',
fieldName: 'timelineActivities',
position: 12,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
}),
};
};
@@ -255,19 +255,6 @@ export const computeStandardTaskViewFields = (
}),
// taskRecordPageFields view fields
taskRecordPageFieldsTitle: createStandardViewFieldFlatMetadata({
...args,
objectName: 'task',
context: {
viewName: 'taskRecordPageFields',
viewFieldName: 'title',
fieldName: 'title',
position: 0,
isVisible: true,
size: 150,
viewFieldGroupName: 'general',
},
}),
taskRecordPageFieldsDueAt: createStandardViewFieldFlatMetadata({
...args,
objectName: 'task',
@@ -346,5 +333,85 @@ export const computeStandardTaskViewFields = (
viewFieldGroupName: 'other',
},
}),
taskRecordPageFieldsBodyV2: createStandardViewFieldFlatMetadata({
...args,
objectName: 'task',
context: {
viewName: 'taskRecordPageFields',
viewFieldName: 'bodyV2',
fieldName: 'bodyV2',
position: 0,
isVisible: false,
size: 150,
viewFieldGroupName: 'additional',
},
}),
taskRecordPageFieldsUpdatedAt: createStandardViewFieldFlatMetadata({
...args,
objectName: 'task',
context: {
viewName: 'taskRecordPageFields',
viewFieldName: 'updatedAt',
fieldName: 'updatedAt',
position: 2,
isVisible: false,
size: 150,
viewFieldGroupName: 'other',
},
}),
taskRecordPageFieldsUpdatedBy: createStandardViewFieldFlatMetadata({
...args,
objectName: 'task',
context: {
viewName: 'taskRecordPageFields',
viewFieldName: 'updatedBy',
fieldName: 'updatedBy',
position: 3,
isVisible: false,
size: 150,
viewFieldGroupName: 'other',
},
}),
taskRecordPageFieldsAttachments: createStandardViewFieldFlatMetadata({
...args,
objectName: 'task',
context: {
viewName: 'taskRecordPageFields',
viewFieldName: 'attachments',
fieldName: 'attachments',
position: 5,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
}),
taskRecordPageFieldsTimelineActivities: createStandardViewFieldFlatMetadata(
{
...args,
objectName: 'task',
context: {
viewName: 'taskRecordPageFields',
viewFieldName: 'timelineActivities',
fieldName: 'timelineActivities',
position: 6,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
},
),
taskRecordPageFieldsFavorites: createStandardViewFieldFlatMetadata({
...args,
objectName: 'task',
context: {
viewName: 'taskRecordPageFields',
viewFieldName: 'favorites',
fieldName: 'favorites',
position: 7,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
}),
};
};
@@ -46,19 +46,6 @@ export const computeStandardWorkflowRunViewFields = (
}),
// workflowRunRecordPageFields view fields
workflowRunRecordPageFieldsName: createStandardViewFieldFlatMetadata({
...args,
objectName: 'workflowRun',
context: {
viewName: 'workflowRunRecordPageFields',
viewFieldName: 'name',
fieldName: 'name',
position: 0,
isVisible: true,
size: 150,
viewFieldGroupName: 'general',
},
}),
workflowRunRecordPageFieldsStatus: createStandardViewFieldFlatMetadata({
...args,
objectName: 'workflowRun',
@@ -151,5 +138,110 @@ export const computeStandardWorkflowRunViewFields = (
viewFieldGroupName: 'other',
},
}),
workflowRunRecordPageFieldsEnqueuedAt: createStandardViewFieldFlatMetadata({
...args,
objectName: 'workflowRun',
context: {
viewName: 'workflowRunRecordPageFields',
viewFieldName: 'enqueuedAt',
fieldName: 'enqueuedAt',
position: 0,
isVisible: false,
size: 150,
viewFieldGroupName: 'additional',
},
}),
workflowRunRecordPageFieldsOutput: createStandardViewFieldFlatMetadata({
...args,
objectName: 'workflowRun',
context: {
viewName: 'workflowRunRecordPageFields',
viewFieldName: 'output',
fieldName: 'output',
position: 6,
isVisible: true,
size: 150,
viewFieldGroupName: 'general',
},
}),
workflowRunRecordPageFieldsContext: createStandardViewFieldFlatMetadata({
...args,
objectName: 'workflowRun',
context: {
viewName: 'workflowRunRecordPageFields',
viewFieldName: 'context',
fieldName: 'context',
position: 7,
isVisible: true,
size: 150,
viewFieldGroupName: 'general',
},
}),
workflowRunRecordPageFieldsState: createStandardViewFieldFlatMetadata({
...args,
objectName: 'workflowRun',
context: {
viewName: 'workflowRunRecordPageFields',
viewFieldName: 'state',
fieldName: 'state',
position: 8,
isVisible: true,
size: 150,
viewFieldGroupName: 'general',
},
}),
workflowRunRecordPageFieldsUpdatedAt: createStandardViewFieldFlatMetadata({
...args,
objectName: 'workflowRun',
context: {
viewName: 'workflowRunRecordPageFields',
viewFieldName: 'updatedAt',
fieldName: 'updatedAt',
position: 2,
isVisible: false,
size: 150,
viewFieldGroupName: 'other',
},
}),
workflowRunRecordPageFieldsUpdatedBy: createStandardViewFieldFlatMetadata({
...args,
objectName: 'workflowRun',
context: {
viewName: 'workflowRunRecordPageFields',
viewFieldName: 'updatedBy',
fieldName: 'updatedBy',
position: 3,
isVisible: false,
size: 150,
viewFieldGroupName: 'other',
},
}),
workflowRunRecordPageFieldsFavorites: createStandardViewFieldFlatMetadata({
...args,
objectName: 'workflowRun',
context: {
viewName: 'workflowRunRecordPageFields',
viewFieldName: 'favorites',
fieldName: 'favorites',
position: 9,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
}),
workflowRunRecordPageFieldsTimelineActivities:
createStandardViewFieldFlatMetadata({
...args,
objectName: 'workflowRun',
context: {
viewName: 'workflowRunRecordPageFields',
viewFieldName: 'timelineActivities',
fieldName: 'timelineActivities',
position: 10,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
}),
};
};
@@ -70,19 +70,6 @@ export const computeStandardWorkflowVersionViewFields = (
}),
// workflowVersionRecordPageFields view fields
workflowVersionRecordPageFieldsName: createStandardViewFieldFlatMetadata({
...args,
objectName: 'workflowVersion',
context: {
viewName: 'workflowVersionRecordPageFields',
viewFieldName: 'name',
fieldName: 'name',
position: 0,
isVisible: true,
size: 150,
viewFieldGroupName: 'general',
},
}),
workflowVersionRecordPageFieldsStatus: createStandardViewFieldFlatMetadata({
...args,
objectName: 'workflowVersion',
@@ -139,5 +126,101 @@ export const computeStandardWorkflowVersionViewFields = (
viewFieldGroupName: 'other',
},
}),
workflowVersionRecordPageFieldsSteps: createStandardViewFieldFlatMetadata({
...args,
objectName: 'workflowVersion',
context: {
viewName: 'workflowVersionRecordPageFields',
viewFieldName: 'steps',
fieldName: 'steps',
position: 0,
isVisible: false,
size: 150,
viewFieldGroupName: 'additional',
},
}),
workflowVersionRecordPageFieldsCreatedBy:
createStandardViewFieldFlatMetadata({
...args,
objectName: 'workflowVersion',
context: {
viewName: 'workflowVersionRecordPageFields',
viewFieldName: 'createdBy',
fieldName: 'createdBy',
position: 1,
isVisible: false,
size: 150,
viewFieldGroupName: 'other',
},
}),
workflowVersionRecordPageFieldsUpdatedAt:
createStandardViewFieldFlatMetadata({
...args,
objectName: 'workflowVersion',
context: {
viewName: 'workflowVersionRecordPageFields',
viewFieldName: 'updatedAt',
fieldName: 'updatedAt',
position: 2,
isVisible: false,
size: 150,
viewFieldGroupName: 'other',
},
}),
workflowVersionRecordPageFieldsUpdatedBy:
createStandardViewFieldFlatMetadata({
...args,
objectName: 'workflowVersion',
context: {
viewName: 'workflowVersionRecordPageFields',
viewFieldName: 'updatedBy',
fieldName: 'updatedBy',
position: 3,
isVisible: false,
size: 150,
viewFieldGroupName: 'other',
},
}),
workflowVersionRecordPageFieldsRuns: createStandardViewFieldFlatMetadata({
...args,
objectName: 'workflowVersion',
context: {
viewName: 'workflowVersionRecordPageFields',
viewFieldName: 'runs',
fieldName: 'runs',
position: 4,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
}),
workflowVersionRecordPageFieldsFavorites:
createStandardViewFieldFlatMetadata({
...args,
objectName: 'workflowVersion',
context: {
viewName: 'workflowVersionRecordPageFields',
viewFieldName: 'favorites',
fieldName: 'favorites',
position: 5,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
}),
workflowVersionRecordPageFieldsTimelineActivities:
createStandardViewFieldFlatMetadata({
...args,
objectName: 'workflowVersion',
context: {
viewName: 'workflowVersionRecordPageFields',
viewFieldName: 'timelineActivities',
fieldName: 'timelineActivities',
position: 6,
isVisible: false,
size: 150,
viewFieldGroupName: 'general',
},
}),
};
};
@@ -2,6 +2,7 @@ import { Injectable } from '@nestjs/common';
import { msg, t } from '@lingui/core/macro';
import { ALL_METADATA_NAME } from 'twenty-shared/metadata';
import { ViewType } from 'twenty-shared/types';
import { isDefined } from 'twenty-shared/utils';
import { findFlatEntityByUniversalIdentifier } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-universal-identifier.util';
@@ -95,8 +96,9 @@ export class FlatViewFieldValidatorService {
}
if (
flatView.type !== ViewType.FIELDS_WIDGET &&
flatObjectMetadata.labelIdentifierFieldMetadataUniversalIdentifier ===
updatedFlatViewField.fieldMetadataUniversalIdentifier
updatedFlatViewField.fieldMetadataUniversalIdentifier
) {
const otherFlatViewFields =
findManyFlatEntityByUniversalIdentifierInUniversalFlatEntityMapsOrThrow(
@@ -127,6 +129,7 @@ export class FlatViewFieldValidatorService {
flatViewFieldMaps: optimisticFlatViewFieldMaps,
flatFieldMetadataMaps,
flatObjectMetadataMaps,
flatViewMaps,
},
}: UniversalFlatEntityValidationArgs<
typeof ALL_METADATA_NAME.viewField
@@ -177,11 +180,18 @@ export class FlatViewFieldValidatorService {
flatObjectMetadata.labelIdentifierFieldMetadataUniversalIdentifier ===
existingFlatViewField.fieldMetadataUniversalIdentifier
) {
validationResult.errors.push({
code: ViewExceptionCode.INVALID_VIEW_DATA,
message: t`Label identifier view field cannot be deleted`,
userFriendlyMessage: msg`Label identifier view field cannot be deleted`,
const flatView = findFlatEntityByUniversalIdentifier({
universalIdentifier: existingFlatViewField.viewUniversalIdentifier,
flatEntityMaps: flatViewMaps,
});
if (!isDefined(flatView) || flatView.type !== ViewType.FIELDS_WIDGET) {
validationResult.errors.push({
code: ViewExceptionCode.INVALID_VIEW_DATA,
message: t`Label identifier view field cannot be deleted`,
userFriendlyMessage: msg`Label identifier view field cannot be deleted`,
});
}
}
return validationResult;
@@ -289,8 +299,9 @@ export class FlatViewFieldValidatorService {
}
if (
flatView.type !== ViewType.FIELDS_WIDGET &&
flatObjectMetadata.labelIdentifierFieldMetadataUniversalIdentifier ===
flatViewFieldToValidate.fieldMetadataUniversalIdentifier
flatViewFieldToValidate.fieldMetadataUniversalIdentifier
) {
validationResult.errors.push(
...validateLabelIdentifierFieldMetadataIdFlatViewField({
@@ -299,6 +310,7 @@ export class FlatViewFieldValidatorService {
}),
);
} else if (
flatView.type !== ViewType.FIELDS_WIDGET &&
otherFlatViewFields.some(
(flatViewField) =>
flatViewField.fieldMetadataUniversalIdentifier ===