diff --git a/packages/twenty-docs/developers/extend/apps/data/extending-objects.mdx b/packages/twenty-docs/developers/extend/apps/data/extending-objects.mdx index 9e58396cbdf..2254998406c 100644 --- a/packages/twenty-docs/developers/extend/apps/data/extending-objects.mdx +++ b/packages/twenty-docs/developers/extend/apps/data/extending-objects.mdx @@ -40,6 +40,7 @@ export default defineField({ - When defining fields **inline inside `defineObject()`**, you do **not** need `objectUniversalIdentifier` — it's inherited from the parent object. - `defineField()` is the only way to add fields to objects you didn't create with `defineObject()`. - File location is up to you. The convention is `src/fields/.field.ts`, but the SDK detects fields anywhere in `src/`. +- To add a tab to a standard page layout (e.g. the Task or Company detail page), use [`definePageLayoutTab`](/developers/extend/apps/layout/page-layouts#definepagelayouttab) with `STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS` from `twenty-sdk/define`. ## Adding a relation to an existing object diff --git a/packages/twenty-docs/developers/extend/apps/layout/page-layouts.mdx b/packages/twenty-docs/developers/extend/apps/layout/page-layouts.mdx index e0e8bcaf225..8e11f88afcd 100644 --- a/packages/twenty-docs/developers/extend/apps/layout/page-layouts.mdx +++ b/packages/twenty-docs/developers/extend/apps/layout/page-layouts.mdx @@ -65,16 +65,15 @@ Use this when you only want to **add** a tab to an existing layout — for examp import { definePageLayoutTab, PageLayoutTabLayoutMode, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS, } from 'twenty-sdk/define'; import { HELLO_WORLD_FRONT_COMPONENT_UNIVERSAL_IDENTIFIER } from '../front-components/hello-world'; -const COMPANY_RECORD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIER = - '20202020-ab01-4001-8001-c0aba11c0100'; - export default definePageLayoutTab({ universalIdentifier: 'b1b2b3b4-b5b6-4000-8000-000000000001', pageLayoutUniversalIdentifier: - COMPANY_RECORD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIER, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage + .universalIdentifier, title: 'Hello World', position: 1000, icon: 'IconWorld', @@ -97,6 +96,34 @@ export default definePageLayoutTab({ ### Key points - `pageLayoutUniversalIdentifier` is **required** and must point to a page layout that already exists at install time — either a standard Twenty layout or one defined by your own app. Cross-app references to layouts owned by another installed app are not supported today. When the parent layout is missing, installation fails with a clear validation error. +- For standard Twenty layouts, import identifiers from `twenty-sdk/define`: + + ```ts + import { STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS } from 'twenty-sdk/define'; + + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.personRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.opportunityRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.noteRecordPage.universalIdentifier + // … + ``` + + Each layout entry also exposes its `tabs` and their `widgets`, so you can reference any level: + + ```ts + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.tabs.home.universalIdentifier + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.tabs.home.widgets.fields.universalIdentifier + ``` + + A short alias `STANDARD_PAGE_LAYOUT` is also available: + + ```ts + import { STANDARD_PAGE_LAYOUT } from 'twenty-sdk/define'; + + STANDARD_PAGE_LAYOUT.companyRecordPage.universalIdentifier; + ``` + - `widgets` are scoped to this tab only — they reference [front components](/developers/extend/apps/layout/front-components), views, etc. exactly like widgets defined inline in `definePageLayout`. - `position` controls ordering against existing tabs on the targeted layout. Pick a value that places your tab where you want it relative to built-in tabs. - Use this instead of `definePageLayout` when you only want to add to an existing layout. Use `definePageLayout` when you own the entire layout. diff --git a/packages/twenty-sdk/src/cli/utilities/build/common/plugins/__tests__/__snapshots__/stub-twenty-sdk-define.plugin.spec.ts.snap b/packages/twenty-sdk/src/cli/utilities/build/common/plugins/__tests__/__snapshots__/stub-twenty-sdk-define.plugin.spec.ts.snap index 7c659fd58bd..305c5f1ee16 100644 --- a/packages/twenty-sdk/src/cli/utilities/build/common/plugins/__tests__/__snapshots__/stub-twenty-sdk-define.plugin.spec.ts.snap +++ b/packages/twenty-sdk/src/cli/utilities/build/common/plugins/__tests__/__snapshots__/stub-twenty-sdk-define.plugin.spec.ts.snap @@ -16,6 +16,8 @@ exports[`stub-twenty-sdk-define plugin > matches the recorded export partition 1 "RelationType", "STANDARD_OBJECT", "STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS", + "STANDARD_PAGE_LAYOUT", + "STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS", "SystemPermissionFlag", "ViewCalendarLayout", "ViewFilterGroupLogicalOperator", diff --git a/packages/twenty-sdk/src/sdk/define/index.ts b/packages/twenty-sdk/src/sdk/define/index.ts index e62eb06709b..daec775ef0d 100644 --- a/packages/twenty-sdk/src/sdk/define/index.ts +++ b/packages/twenty-sdk/src/sdk/define/index.ts @@ -85,6 +85,10 @@ export { definePageLayout } from '@/sdk/define/page-layouts/define-page-layout'; export { definePageLayoutTab } from '@/sdk/define/page-layouts/define-page-layout-tab'; export type { PageLayoutConfig } from '@/sdk/define/page-layouts/page-layout-config'; export type { PageLayoutTabConfig } from '@/sdk/define/page-layouts/page-layout-tab-config'; +export { + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS as STANDARD_PAGE_LAYOUT, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS, +} from '@/sdk/define/page-layouts/standard-page-layout-ids'; export type { PageLayoutManifest, PageLayoutTabManifest, diff --git a/packages/twenty-sdk/src/sdk/define/page-layouts/standard-page-layout-ids.ts b/packages/twenty-sdk/src/sdk/define/page-layouts/standard-page-layout-ids.ts new file mode 100644 index 00000000000..3c9f6bda790 --- /dev/null +++ b/packages/twenty-sdk/src/sdk/define/page-layouts/standard-page-layout-ids.ts @@ -0,0 +1 @@ +export { STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS } from 'twenty-shared/metadata'; diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-blocklist-page-layout.config.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-blocklist-page-layout.config.ts index dafb3a1ff9d..af012c02486 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-blocklist-page-layout.config.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-blocklist-page-layout.config.ts @@ -1,4 +1,7 @@ -import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; +import { + STANDARD_OBJECTS, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS, +} from 'twenty-shared/metadata'; import { PageLayoutType } from 'src/engine/metadata-modules/page-layout/enums/page-layout-type.enum'; import { @@ -12,21 +15,29 @@ import { const BLOCKLIST_PAGE_TABS = { home: { - universalIdentifier: '20202020-ab09-4009-8009-b10c115b0901', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.blocklistRecordPage.tabs.home + .universalIdentifier, ...TAB_PROPS.home, widgets: { fields: { - universalIdentifier: '20202020-ac09-4009-8009-b10c115b0911', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.blocklistRecordPage.tabs + .home.widgets.fields.universalIdentifier, ...WIDGET_PROPS.fields, }, }, }, timeline: { - universalIdentifier: '20202020-ab09-4009-8009-b10c115b0902', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.blocklistRecordPage.tabs + .timeline.universalIdentifier, ...TAB_PROPS.timeline, widgets: { timeline: { - universalIdentifier: '20202020-ac09-4009-8009-b10c115b0921', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.blocklistRecordPage.tabs + .timeline.widgets.timeline.universalIdentifier, ...WIDGET_PROPS.timeline, }, }, @@ -37,7 +48,9 @@ export const STANDARD_BLOCKLIST_PAGE_LAYOUT_CONFIG = { name: 'Default Blocklist Layout', type: PageLayoutType.RECORD_PAGE, objectUniversalIdentifier: STANDARD_OBJECTS.blocklist.universalIdentifier, - universalIdentifier: '20202020-a109-4009-8009-b10c115b0001', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.blocklistRecordPage + .universalIdentifier, defaultTabUniversalIdentifier: null, tabs: BLOCKLIST_PAGE_TABS, } as const satisfies StandardPageLayoutConfig; diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-calendar-channel-event-association-page-layout.config.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-calendar-channel-event-association-page-layout.config.ts index bd43b026db3..92eec58f4c2 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-calendar-channel-event-association-page-layout.config.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-calendar-channel-event-association-page-layout.config.ts @@ -1,4 +1,7 @@ -import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; +import { + STANDARD_OBJECTS, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS, +} from 'twenty-shared/metadata'; import { PageLayoutType } from 'src/engine/metadata-modules/page-layout/enums/page-layout-type.enum'; import { @@ -12,21 +15,33 @@ import { const CALENDAR_CHANNEL_EVENT_ASSOCIATION_PAGE_TABS = { home: { - universalIdentifier: '20202020-ab0b-400b-800b-ca1c4e0b0b01', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS + .calendarChannelEventAssociationRecordPage.tabs.home + .universalIdentifier, ...TAB_PROPS.home, widgets: { fields: { - universalIdentifier: '20202020-ac0b-400b-800b-ca1c4e0b0b11', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS + .calendarChannelEventAssociationRecordPage.tabs.home.widgets.fields + .universalIdentifier, ...WIDGET_PROPS.fields, }, }, }, timeline: { - universalIdentifier: '20202020-ab0b-400b-800b-ca1c4e0b0b02', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS + .calendarChannelEventAssociationRecordPage.tabs.timeline + .universalIdentifier, ...TAB_PROPS.timeline, widgets: { timeline: { - universalIdentifier: '20202020-ac0b-400b-800b-ca1c4e0b0b21', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS + .calendarChannelEventAssociationRecordPage.tabs.timeline.widgets + .timeline.universalIdentifier, ...WIDGET_PROPS.timeline, }, }, @@ -38,7 +53,9 @@ export const STANDARD_CALENDAR_CHANNEL_EVENT_ASSOCIATION_PAGE_LAYOUT_CONFIG = { type: PageLayoutType.RECORD_PAGE, objectUniversalIdentifier: STANDARD_OBJECTS.calendarChannelEventAssociation.universalIdentifier, - universalIdentifier: '20202020-a10b-400b-800b-ca1c4e0b0001', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS + .calendarChannelEventAssociationRecordPage.universalIdentifier, defaultTabUniversalIdentifier: null, tabs: CALENDAR_CHANNEL_EVENT_ASSOCIATION_PAGE_TABS, } as const satisfies StandardPageLayoutConfig; diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-calendar-event-participant-page-layout.config.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-calendar-event-participant-page-layout.config.ts index 53e74306197..81540957b4c 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-calendar-event-participant-page-layout.config.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-calendar-event-participant-page-layout.config.ts @@ -1,4 +1,7 @@ -import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; +import { + STANDARD_OBJECTS, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS, +} from 'twenty-shared/metadata'; import { PageLayoutType } from 'src/engine/metadata-modules/page-layout/enums/page-layout-type.enum'; import { @@ -12,21 +15,31 @@ import { const CALENDAR_EVENT_PARTICIPANT_PAGE_TABS = { home: { - universalIdentifier: '20202020-ab0c-400c-800c-ca1e0a0c0c01', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS + .calendarEventParticipantRecordPage.tabs.home.universalIdentifier, ...TAB_PROPS.home, widgets: { fields: { - universalIdentifier: '20202020-ac0c-400c-800c-ca1e0a0c0c11', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS + .calendarEventParticipantRecordPage.tabs.home.widgets.fields + .universalIdentifier, ...WIDGET_PROPS.fields, }, }, }, timeline: { - universalIdentifier: '20202020-ab0c-400c-800c-ca1e0a0c0c02', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS + .calendarEventParticipantRecordPage.tabs.timeline.universalIdentifier, ...TAB_PROPS.timeline, widgets: { timeline: { - universalIdentifier: '20202020-ac0c-400c-800c-ca1e0a0c0c21', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS + .calendarEventParticipantRecordPage.tabs.timeline.widgets.timeline + .universalIdentifier, ...WIDGET_PROPS.timeline, }, }, @@ -38,7 +51,9 @@ export const STANDARD_CALENDAR_EVENT_PARTICIPANT_PAGE_LAYOUT_CONFIG = { type: PageLayoutType.RECORD_PAGE, objectUniversalIdentifier: STANDARD_OBJECTS.calendarEventParticipant.universalIdentifier, - universalIdentifier: '20202020-a10c-400c-800c-ca1e0a0c0001', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS + .calendarEventParticipantRecordPage.universalIdentifier, defaultTabUniversalIdentifier: null, tabs: CALENDAR_EVENT_PARTICIPANT_PAGE_TABS, } as const satisfies StandardPageLayoutConfig; diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-company-page-layout.config.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-company-page-layout.config.ts index e6b0a96985b..8a587f76081 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-company-page-layout.config.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-company-page-layout.config.ts @@ -1,4 +1,7 @@ -import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; +import { + STANDARD_OBJECTS, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS, +} 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'; @@ -15,15 +18,21 @@ import { const COMPANY_PAGE_TABS = { home: { - universalIdentifier: '20202020-ab01-4001-8001-c0aba11c0101', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage.tabs.home + .universalIdentifier, ...TAB_PROPS.home, widgets: { fields: { - universalIdentifier: '20202020-ac01-4001-8001-c0aba11c0111', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage.tabs.home + .widgets.fields.universalIdentifier, ...WIDGET_PROPS.fields, }, people: { - universalIdentifier: '20202020-ac01-4001-8001-c0aba11c0112', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage.tabs.home + .widgets.people.universalIdentifier, title: 'People', type: WidgetType.FIELD, gridPosition: GRID_POSITIONS.FULL_WIDTH, @@ -32,7 +41,9 @@ const COMPANY_PAGE_TABS = { STANDARD_OBJECTS.company.fields.people.universalIdentifier, }, opportunities: { - universalIdentifier: '20202020-ac01-4001-8001-c0aba11c0114', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage.tabs.home + .widgets.opportunities.universalIdentifier, title: 'Opportunities', type: WidgetType.FIELD, gridPosition: GRID_POSITIONS.FULL_WIDTH, @@ -43,61 +54,85 @@ const COMPANY_PAGE_TABS = { }, }, timeline: { - universalIdentifier: '20202020-ab01-4001-8001-c0aba11c0102', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage.tabs.timeline + .universalIdentifier, ...TAB_PROPS.timeline, widgets: { timeline: { - universalIdentifier: '20202020-ac01-4001-8001-c0aba11c0121', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage.tabs + .timeline.widgets.timeline.universalIdentifier, ...WIDGET_PROPS.timeline, }, }, }, tasks: { - universalIdentifier: '20202020-ab01-4001-8001-c0aba11c0103', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage.tabs.tasks + .universalIdentifier, ...TAB_PROPS.tasks, widgets: { tasks: { - universalIdentifier: '20202020-ac01-4001-8001-c0aba11c0131', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage.tabs + .tasks.widgets.tasks.universalIdentifier, ...WIDGET_PROPS.tasks, }, }, }, notes: { - universalIdentifier: '20202020-ab01-4001-8001-c0aba11c0104', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage.tabs.notes + .universalIdentifier, ...TAB_PROPS.notes, widgets: { notes: { - universalIdentifier: '20202020-ac01-4001-8001-c0aba11c0141', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage.tabs + .notes.widgets.notes.universalIdentifier, ...WIDGET_PROPS.notes, }, }, }, files: { - universalIdentifier: '20202020-ab01-4001-8001-c0aba11c0105', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage.tabs.files + .universalIdentifier, ...TAB_PROPS.files, widgets: { files: { - universalIdentifier: '20202020-ac01-4001-8001-c0aba11c0151', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage.tabs + .files.widgets.files.universalIdentifier, ...WIDGET_PROPS.files, }, }, }, emails: { - universalIdentifier: '20202020-ab01-4001-8001-c0aba11c0106', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage.tabs.emails + .universalIdentifier, ...TAB_PROPS.emails, widgets: { emails: { - universalIdentifier: '20202020-ac01-4001-8001-c0aba11c0161', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage.tabs + .emails.widgets.emails.universalIdentifier, ...WIDGET_PROPS.emails, }, }, }, calendar: { - universalIdentifier: '20202020-ab01-4001-8001-c0aba11c0107', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage.tabs.calendar + .universalIdentifier, ...TAB_PROPS.calendar, widgets: { calendar: { - universalIdentifier: '20202020-ac01-4001-8001-c0aba11c0171', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage.tabs + .calendar.widgets.calendar.universalIdentifier, ...WIDGET_PROPS.calendar, }, }, @@ -108,7 +143,9 @@ export const STANDARD_COMPANY_PAGE_LAYOUT_CONFIG = { name: 'Default Company Layout', type: PageLayoutType.RECORD_PAGE, objectUniversalIdentifier: STANDARD_OBJECTS.company.universalIdentifier, - universalIdentifier: '20202020-a101-4001-8001-c0aba11c0001', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage + .universalIdentifier, defaultTabUniversalIdentifier: null, tabs: COMPANY_PAGE_TABS, } as const satisfies StandardPageLayoutConfig; diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-dashboard-page-layout.config.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-dashboard-page-layout.config.ts index 33eba025184..d354b5bcc48 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-dashboard-page-layout.config.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-dashboard-page-layout.config.ts @@ -1,3 +1,4 @@ +import { STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS } from 'twenty-shared/metadata'; import { PageLayoutTabLayoutMode } from 'twenty-shared/types'; import { PageLayoutType } from 'src/engine/metadata-modules/page-layout/enums/page-layout-type.enum'; @@ -8,35 +9,53 @@ import { const DASHBOARD_PAGE_TABS = { tab1: { - universalIdentifier: '20202020-d011-4d11-8d11-da5ab0a01001', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.myFirstDashboard.tabs.tab1 + .universalIdentifier, title: 'Tab 1', position: 0, icon: null, layoutMode: PageLayoutTabLayoutMode.GRID, widgets: { welcomeRichText: { - universalIdentifier: '20202020-d111-4d11-8d11-da5ab0a11001', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.myFirstDashboard.tabs.tab1 + .widgets.welcomeRichText.universalIdentifier, }, dealsByCompany: { - universalIdentifier: '20202020-d111-4d11-8d11-da5ab0a11002', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.myFirstDashboard.tabs.tab1 + .widgets.dealsByCompany.universalIdentifier, }, pipelineValueByStage: { - universalIdentifier: '20202020-d111-4d11-8d11-da5ab0a11003', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.myFirstDashboard.tabs.tab1 + .widgets.pipelineValueByStage.universalIdentifier, }, revenueTimeline: { - universalIdentifier: '20202020-d111-4d11-8d11-da5ab0a11004', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.myFirstDashboard.tabs.tab1 + .widgets.revenueTimeline.universalIdentifier, }, opportunitiesByOwner: { - universalIdentifier: '20202020-d111-4d11-8d11-da5ab0a11005', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.myFirstDashboard.tabs.tab1 + .widgets.opportunitiesByOwner.universalIdentifier, }, stockMarketIframe: { - universalIdentifier: '20202020-d111-4d11-8d11-da5ab0a11006', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.myFirstDashboard.tabs.tab1 + .widgets.stockMarketIframe.universalIdentifier, }, dealsCreatedThisMonth: { - universalIdentifier: '20202020-d111-4d11-8d11-da5ab0a11007', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.myFirstDashboard.tabs.tab1 + .widgets.dealsCreatedThisMonth.universalIdentifier, }, dealValueCreatedThisMonth: { - universalIdentifier: '20202020-d111-4d11-8d11-da5ab0a11008', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.myFirstDashboard.tabs.tab1 + .widgets.dealValueCreatedThisMonth.universalIdentifier, }, }, }, @@ -46,7 +65,9 @@ export const STANDARD_DASHBOARD_PAGE_LAYOUT_CONFIG = { name: 'My First Dashboard', type: PageLayoutType.DASHBOARD, objectUniversalIdentifier: null, - universalIdentifier: '20202020-d001-4d01-8d01-da5ab0a00001', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.myFirstDashboard + .universalIdentifier, defaultTabUniversalIdentifier: null, tabs: DASHBOARD_PAGE_TABS, } as const satisfies StandardPageLayoutConfig; diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-message-channel-message-association-message-folder-page-layout.config.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-message-channel-message-association-message-folder-page-layout.config.ts index 25c2be812b7..331c6477c55 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-message-channel-message-association-message-folder-page-layout.config.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-message-channel-message-association-message-folder-page-layout.config.ts @@ -1,4 +1,7 @@ -import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; +import { + STANDARD_OBJECTS, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS, +} from 'twenty-shared/metadata'; import { PageLayoutType } from 'src/engine/metadata-modules/page-layout/enums/page-layout-type.enum'; import { @@ -12,21 +15,33 @@ import { const MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_MESSAGE_FOLDER_PAGE_TABS = { home: { - universalIdentifier: '20202020-ab12-4012-8012-a5c4a6121201', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS + .messageChannelMessageAssociationMessageFolderRecordPage.tabs.home + .universalIdentifier, ...TAB_PROPS.home, widgets: { fields: { - universalIdentifier: '20202020-ac12-4012-8012-a5c4a6121211', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS + .messageChannelMessageAssociationMessageFolderRecordPage.tabs.home + .widgets.fields.universalIdentifier, ...WIDGET_PROPS.fields, }, }, }, timeline: { - universalIdentifier: '20202020-ab12-4012-8012-a5c4a6121202', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS + .messageChannelMessageAssociationMessageFolderRecordPage.tabs.timeline + .universalIdentifier, ...TAB_PROPS.timeline, widgets: { timeline: { - universalIdentifier: '20202020-ac12-4012-8012-a5c4a6121221', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS + .messageChannelMessageAssociationMessageFolderRecordPage.tabs + .timeline.widgets.timeline.universalIdentifier, ...WIDGET_PROPS.timeline, }, }, @@ -40,7 +55,10 @@ export const STANDARD_MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_MESSAGE_FOLDER_PAGE_LA objectUniversalIdentifier: STANDARD_OBJECTS.messageChannelMessageAssociationMessageFolder .universalIdentifier, - universalIdentifier: '20202020-a112-4012-8012-a5c4a6120001', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS + .messageChannelMessageAssociationMessageFolderRecordPage + .universalIdentifier, defaultTabUniversalIdentifier: null, tabs: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_MESSAGE_FOLDER_PAGE_TABS, } as const satisfies StandardPageLayoutConfig; diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-message-channel-message-association-page-layout.config.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-message-channel-message-association-page-layout.config.ts index 0e0c1f70930..6f888de769b 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-message-channel-message-association-page-layout.config.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-message-channel-message-association-page-layout.config.ts @@ -1,4 +1,7 @@ -import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; +import { + STANDARD_OBJECTS, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS, +} from 'twenty-shared/metadata'; import { PageLayoutType } from 'src/engine/metadata-modules/page-layout/enums/page-layout-type.enum'; import { @@ -12,21 +15,33 @@ import { const MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_PAGE_TABS = { home: { - universalIdentifier: '20202020-ab11-4011-8011-a5c4a5111101', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS + .messageChannelMessageAssociationRecordPage.tabs.home + .universalIdentifier, ...TAB_PROPS.home, widgets: { fields: { - universalIdentifier: '20202020-ac11-4011-8011-a5c4a5111111', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS + .messageChannelMessageAssociationRecordPage.tabs.home.widgets.fields + .universalIdentifier, ...WIDGET_PROPS.fields, }, }, }, timeline: { - universalIdentifier: '20202020-ab11-4011-8011-a5c4a5111102', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS + .messageChannelMessageAssociationRecordPage.tabs.timeline + .universalIdentifier, ...TAB_PROPS.timeline, widgets: { timeline: { - universalIdentifier: '20202020-ac11-4011-8011-a5c4a5111121', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS + .messageChannelMessageAssociationRecordPage.tabs.timeline.widgets + .timeline.universalIdentifier, ...WIDGET_PROPS.timeline, }, }, @@ -38,7 +53,9 @@ export const STANDARD_MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_PAGE_LAYOUT_CONFIG = { type: PageLayoutType.RECORD_PAGE, objectUniversalIdentifier: STANDARD_OBJECTS.messageChannelMessageAssociation.universalIdentifier, - universalIdentifier: '20202020-a111-4011-8011-a5c4a5110001', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS + .messageChannelMessageAssociationRecordPage.universalIdentifier, defaultTabUniversalIdentifier: null, tabs: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_PAGE_TABS, } as const satisfies StandardPageLayoutConfig; diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-message-participant-page-layout.config.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-message-participant-page-layout.config.ts index f0b21dd52ca..783b5d83223 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-message-participant-page-layout.config.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-message-participant-page-layout.config.ts @@ -1,4 +1,7 @@ -import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; +import { + STANDARD_OBJECTS, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS, +} from 'twenty-shared/metadata'; import { PageLayoutType } from 'src/engine/metadata-modules/page-layout/enums/page-layout-type.enum'; import { @@ -12,21 +15,31 @@ import { const MESSAGE_PARTICIPANT_PAGE_TABS = { home: { - universalIdentifier: '20202020-ab14-4014-8014-a5ea10141401', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.messageParticipantRecordPage + .tabs.home.universalIdentifier, ...TAB_PROPS.home, widgets: { fields: { - universalIdentifier: '20202020-ac14-4014-8014-a5ea10141411', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS + .messageParticipantRecordPage.tabs.home.widgets.fields + .universalIdentifier, ...WIDGET_PROPS.fields, }, }, }, timeline: { - universalIdentifier: '20202020-ab14-4014-8014-a5ea10141402', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.messageParticipantRecordPage + .tabs.timeline.universalIdentifier, ...TAB_PROPS.timeline, widgets: { timeline: { - universalIdentifier: '20202020-ac14-4014-8014-a5ea10141421', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS + .messageParticipantRecordPage.tabs.timeline.widgets.timeline + .universalIdentifier, ...WIDGET_PROPS.timeline, }, }, @@ -38,7 +51,9 @@ export const STANDARD_MESSAGE_PARTICIPANT_PAGE_LAYOUT_CONFIG = { type: PageLayoutType.RECORD_PAGE, objectUniversalIdentifier: STANDARD_OBJECTS.messageParticipant.universalIdentifier, - universalIdentifier: '20202020-a114-4014-8014-a5ea10140001', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.messageParticipantRecordPage + .universalIdentifier, defaultTabUniversalIdentifier: null, tabs: MESSAGE_PARTICIPANT_PAGE_TABS, } as const satisfies StandardPageLayoutConfig; diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-message-thread-page-layout.config.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-message-thread-page-layout.config.ts index 4c0f7a6f0c9..61b6bee0a10 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-message-thread-page-layout.config.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-message-thread-page-layout.config.ts @@ -1,4 +1,7 @@ -import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; +import { + STANDARD_OBJECTS, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS, +} from 'twenty-shared/metadata'; import { PageLayoutType } from 'src/engine/metadata-modules/page-layout/enums/page-layout-type.enum'; import { @@ -12,11 +15,15 @@ import { const MESSAGE_THREAD_PAGE_TABS = { home: { - universalIdentifier: '20202020-f639-48a0-9a44-027cf4e3cd15', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.messageThreadRecordPage.tabs + .home.universalIdentifier, ...TAB_PROPS.home, widgets: { emailThread: { - universalIdentifier: '20202020-d57e-44cb-b220-69a881feb9c3', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.messageThreadRecordPage + .tabs.home.widgets.emailThread.universalIdentifier, ...WIDGET_PROPS.emailThread, }, }, @@ -27,7 +34,9 @@ export const STANDARD_MESSAGE_THREAD_PAGE_LAYOUT_CONFIG = { name: 'Default Message Thread Layout', type: PageLayoutType.RECORD_PAGE, objectUniversalIdentifier: STANDARD_OBJECTS.messageThread.universalIdentifier, - universalIdentifier: '20202020-95bb-40eb-a699-70e7ea02a79e', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.messageThreadRecordPage + .universalIdentifier, defaultTabUniversalIdentifier: null, tabs: MESSAGE_THREAD_PAGE_TABS, } as const satisfies StandardPageLayoutConfig; diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-note-page-layout.config.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-note-page-layout.config.ts index 4e167cd63fd..91c115c05c3 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-note-page-layout.config.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-note-page-layout.config.ts @@ -1,4 +1,7 @@ -import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; +import { + STANDARD_OBJECTS, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS, +} from 'twenty-shared/metadata'; import { PageLayoutType } from 'src/engine/metadata-modules/page-layout/enums/page-layout-type.enum'; import { @@ -16,15 +19,21 @@ import { const NOTE_PAGE_TABS = { home: { - universalIdentifier: '20202020-ab04-4004-8004-a0be5a11a401', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.noteRecordPage.tabs.home + .universalIdentifier, ...TAB_PROPS.home, widgets: { fields: { - universalIdentifier: '20202020-ac04-4004-8004-a0be5a11a411', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.noteRecordPage.tabs.home + .widgets.fields.universalIdentifier, ...WIDGET_PROPS.fields, }, noteRichText: { - universalIdentifier: '20202020-ac04-4004-8004-a0be5a11a412', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.noteRecordPage.tabs.home + .widgets.noteRichText.universalIdentifier, title: WIDGET_PROPS.noteRichText.title, type: WIDGET_PROPS.noteRichText.type, gridPosition: WIDGET_PROPS.noteRichText.gridPosition, @@ -36,11 +45,15 @@ const NOTE_PAGE_TABS = { }, }, note: { - universalIdentifier: '20202020-ab04-4004-8004-a0be5a11a402', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.noteRecordPage.tabs.note + .universalIdentifier, ...TAB_PROPS.note, widgets: { noteRichText: { - universalIdentifier: '20202020-ac04-4004-8004-a0be5a11a421', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.noteRecordPage.tabs.note + .widgets.noteRichText.universalIdentifier, ...WIDGET_PROPS.noteRichText, conditionalDisplay: CONDITIONAL_DISPLAY_DEVICE_DESKTOP, conditionalAvailabilityExpression: @@ -49,21 +62,29 @@ const NOTE_PAGE_TABS = { }, }, timeline: { - universalIdentifier: '20202020-ab04-4004-8004-a0be5a11a403', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.noteRecordPage.tabs.timeline + .universalIdentifier, ...TAB_PROPS.timeline, widgets: { timeline: { - universalIdentifier: '20202020-ac04-4004-8004-a0be5a11a431', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.noteRecordPage.tabs + .timeline.widgets.timeline.universalIdentifier, ...WIDGET_PROPS.timeline, }, }, }, files: { - universalIdentifier: '20202020-ab04-4004-8004-a0be5a11a404', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.noteRecordPage.tabs.files + .universalIdentifier, ...TAB_PROPS.files, widgets: { files: { - universalIdentifier: '20202020-ac04-4004-8004-a0be5a11a441', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.noteRecordPage.tabs.files + .widgets.files.universalIdentifier, ...WIDGET_PROPS.files, }, }, @@ -74,7 +95,9 @@ export const STANDARD_NOTE_PAGE_LAYOUT_CONFIG = { name: 'Default Note Layout', type: PageLayoutType.RECORD_PAGE, objectUniversalIdentifier: STANDARD_OBJECTS.note.universalIdentifier, - universalIdentifier: '20202020-a104-4004-8004-a0be5a11a004', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.noteRecordPage + .universalIdentifier, defaultTabUniversalIdentifier: null, tabs: NOTE_PAGE_TABS, } as const satisfies StandardPageLayoutConfig; diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-opportunity-page-layout.config.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-opportunity-page-layout.config.ts index 1d9fe5c376d..688b870ac62 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-opportunity-page-layout.config.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-opportunity-page-layout.config.ts @@ -1,4 +1,7 @@ -import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; +import { + STANDARD_OBJECTS, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS, +} 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'; @@ -15,15 +18,21 @@ import { const OPPORTUNITY_PAGE_TABS = { home: { - universalIdentifier: '20202020-ab03-4003-8003-0aa0b1ca1301', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.opportunityRecordPage.tabs.home + .universalIdentifier, ...TAB_PROPS.home, widgets: { fields: { - universalIdentifier: '20202020-ac03-4003-8003-0aa0b1ca1311', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.opportunityRecordPage.tabs + .home.widgets.fields.universalIdentifier, ...WIDGET_PROPS.fields, }, pointOfContact: { - universalIdentifier: '20202020-ac03-4003-8003-0aa0b1ca1312', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.opportunityRecordPage.tabs + .home.widgets.pointOfContact.universalIdentifier, title: 'Point of Contact', type: WidgetType.FIELD, gridPosition: GRID_POSITIONS.FULL_WIDTH, @@ -33,7 +42,9 @@ const OPPORTUNITY_PAGE_TABS = { .universalIdentifier, }, company: { - universalIdentifier: '20202020-ac03-4003-8003-0aa0b1ca1313', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.opportunityRecordPage.tabs + .home.widgets.company.universalIdentifier, title: 'Company', type: WidgetType.FIELD, gridPosition: GRID_POSITIONS.FULL_WIDTH, @@ -42,7 +53,9 @@ const OPPORTUNITY_PAGE_TABS = { STANDARD_OBJECTS.opportunity.fields.company.universalIdentifier, }, owner: { - universalIdentifier: '20202020-ac03-4003-8003-0aa0b1ca1314', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.opportunityRecordPage.tabs + .home.widgets.owner.universalIdentifier, title: 'Owner', type: WidgetType.FIELD, gridPosition: GRID_POSITIONS.FULL_WIDTH, @@ -53,61 +66,85 @@ const OPPORTUNITY_PAGE_TABS = { }, }, timeline: { - universalIdentifier: '20202020-ab03-4003-8003-0aa0b1ca1302', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.opportunityRecordPage.tabs + .timeline.universalIdentifier, ...TAB_PROPS.timeline, widgets: { timeline: { - universalIdentifier: '20202020-ac03-4003-8003-0aa0b1ca1321', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.opportunityRecordPage.tabs + .timeline.widgets.timeline.universalIdentifier, ...WIDGET_PROPS.timeline, }, }, }, tasks: { - universalIdentifier: '20202020-ab03-4003-8003-0aa0b1ca1303', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.opportunityRecordPage.tabs + .tasks.universalIdentifier, ...TAB_PROPS.tasks, widgets: { tasks: { - universalIdentifier: '20202020-ac03-4003-8003-0aa0b1ca1331', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.opportunityRecordPage.tabs + .tasks.widgets.tasks.universalIdentifier, ...WIDGET_PROPS.tasks, }, }, }, notes: { - universalIdentifier: '20202020-ab03-4003-8003-0aa0b1ca1304', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.opportunityRecordPage.tabs + .notes.universalIdentifier, ...TAB_PROPS.notes, widgets: { notes: { - universalIdentifier: '20202020-ac03-4003-8003-0aa0b1ca1341', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.opportunityRecordPage.tabs + .notes.widgets.notes.universalIdentifier, ...WIDGET_PROPS.notes, }, }, }, files: { - universalIdentifier: '20202020-ab03-4003-8003-0aa0b1ca1305', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.opportunityRecordPage.tabs + .files.universalIdentifier, ...TAB_PROPS.files, widgets: { files: { - universalIdentifier: '20202020-ac03-4003-8003-0aa0b1ca1351', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.opportunityRecordPage.tabs + .files.widgets.files.universalIdentifier, ...WIDGET_PROPS.files, }, }, }, emails: { - universalIdentifier: '20202020-ab03-4003-8003-0aa0b1ca1306', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.opportunityRecordPage.tabs + .emails.universalIdentifier, ...TAB_PROPS.emails, widgets: { emails: { - universalIdentifier: '20202020-ac03-4003-8003-0aa0b1ca1361', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.opportunityRecordPage.tabs + .emails.widgets.emails.universalIdentifier, ...WIDGET_PROPS.emails, }, }, }, calendar: { - universalIdentifier: '20202020-ab03-4003-8003-0aa0b1ca1307', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.opportunityRecordPage.tabs + .calendar.universalIdentifier, ...TAB_PROPS.calendar, widgets: { calendar: { - universalIdentifier: '20202020-ac03-4003-8003-0aa0b1ca1371', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.opportunityRecordPage.tabs + .calendar.widgets.calendar.universalIdentifier, ...WIDGET_PROPS.calendar, }, }, @@ -118,7 +155,9 @@ export const STANDARD_OPPORTUNITY_PAGE_LAYOUT_CONFIG = { name: 'Default Opportunity Layout', type: PageLayoutType.RECORD_PAGE, objectUniversalIdentifier: STANDARD_OBJECTS.opportunity.universalIdentifier, - universalIdentifier: '20202020-a103-4003-8003-0aa0b1ca1003', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.opportunityRecordPage + .universalIdentifier, defaultTabUniversalIdentifier: null, tabs: OPPORTUNITY_PAGE_TABS, } as const satisfies StandardPageLayoutConfig; diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-person-page-layout.config.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-person-page-layout.config.ts index 71c98f81d8a..c2358864675 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-person-page-layout.config.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-person-page-layout.config.ts @@ -1,4 +1,7 @@ -import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; +import { + STANDARD_OBJECTS, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS, +} 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'; @@ -15,15 +18,21 @@ import { const PERSON_PAGE_TABS = { home: { - universalIdentifier: '20202020-ab02-4002-8002-ae0a1ea11201', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.personRecordPage.tabs.home + .universalIdentifier, ...TAB_PROPS.home, widgets: { fields: { - universalIdentifier: '20202020-ac02-4002-8002-ae0a1ea11211', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.personRecordPage.tabs.home + .widgets.fields.universalIdentifier, ...WIDGET_PROPS.fields, }, company: { - universalIdentifier: '20202020-ac02-4002-8002-ae0a1ea11212', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.personRecordPage.tabs.home + .widgets.company.universalIdentifier, title: 'Company', type: WidgetType.FIELD, gridPosition: GRID_POSITIONS.FULL_WIDTH, @@ -32,7 +41,9 @@ const PERSON_PAGE_TABS = { STANDARD_OBJECTS.person.fields.company.universalIdentifier, }, pointOfContactForOpportunities: { - universalIdentifier: '20202020-ac02-4002-8002-ae0a1ea11213', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.personRecordPage.tabs.home + .widgets.pointOfContactForOpportunities.universalIdentifier, title: 'Opportunities', type: WidgetType.FIELD, gridPosition: GRID_POSITIONS.FULL_WIDTH, @@ -44,61 +55,85 @@ const PERSON_PAGE_TABS = { }, }, timeline: { - universalIdentifier: '20202020-ab02-4002-8002-ae0a1ea11202', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.personRecordPage.tabs.timeline + .universalIdentifier, ...TAB_PROPS.timeline, widgets: { timeline: { - universalIdentifier: '20202020-ac02-4002-8002-ae0a1ea11221', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.personRecordPage.tabs + .timeline.widgets.timeline.universalIdentifier, ...WIDGET_PROPS.timeline, }, }, }, tasks: { - universalIdentifier: '20202020-ab02-4002-8002-ae0a1ea11203', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.personRecordPage.tabs.tasks + .universalIdentifier, ...TAB_PROPS.tasks, widgets: { tasks: { - universalIdentifier: '20202020-ac02-4002-8002-ae0a1ea11231', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.personRecordPage.tabs.tasks + .widgets.tasks.universalIdentifier, ...WIDGET_PROPS.tasks, }, }, }, notes: { - universalIdentifier: '20202020-ab02-4002-8002-ae0a1ea11204', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.personRecordPage.tabs.notes + .universalIdentifier, ...TAB_PROPS.notes, widgets: { notes: { - universalIdentifier: '20202020-ac02-4002-8002-ae0a1ea11241', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.personRecordPage.tabs.notes + .widgets.notes.universalIdentifier, ...WIDGET_PROPS.notes, }, }, }, files: { - universalIdentifier: '20202020-ab02-4002-8002-ae0a1ea11205', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.personRecordPage.tabs.files + .universalIdentifier, ...TAB_PROPS.files, widgets: { files: { - universalIdentifier: '20202020-ac02-4002-8002-ae0a1ea11251', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.personRecordPage.tabs.files + .widgets.files.universalIdentifier, ...WIDGET_PROPS.files, }, }, }, emails: { - universalIdentifier: '20202020-ab02-4002-8002-ae0a1ea11206', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.personRecordPage.tabs.emails + .universalIdentifier, ...TAB_PROPS.emails, widgets: { emails: { - universalIdentifier: '20202020-ac02-4002-8002-ae0a1ea11261', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.personRecordPage.tabs + .emails.widgets.emails.universalIdentifier, ...WIDGET_PROPS.emails, }, }, }, calendar: { - universalIdentifier: '20202020-ab02-4002-8002-ae0a1ea11207', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.personRecordPage.tabs.calendar + .universalIdentifier, ...TAB_PROPS.calendar, widgets: { calendar: { - universalIdentifier: '20202020-ac02-4002-8002-ae0a1ea11271', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.personRecordPage.tabs + .calendar.widgets.calendar.universalIdentifier, ...WIDGET_PROPS.calendar, }, }, @@ -109,7 +144,9 @@ export const STANDARD_PERSON_PAGE_LAYOUT_CONFIG = { name: 'Default Person Layout', type: PageLayoutType.RECORD_PAGE, objectUniversalIdentifier: STANDARD_OBJECTS.person.universalIdentifier, - universalIdentifier: '20202020-a102-4002-8002-ae0a1ea11002', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.personRecordPage + .universalIdentifier, defaultTabUniversalIdentifier: null, tabs: PERSON_PAGE_TABS, } as const satisfies StandardPageLayoutConfig; diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-task-page-layout.config.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-task-page-layout.config.ts index 13f1fedc9b3..92852796941 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-task-page-layout.config.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-task-page-layout.config.ts @@ -1,4 +1,7 @@ -import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; +import { + STANDARD_OBJECTS, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS, +} from 'twenty-shared/metadata'; import { PageLayoutType } from 'src/engine/metadata-modules/page-layout/enums/page-layout-type.enum'; import { @@ -16,15 +19,21 @@ import { const TASK_PAGE_TABS = { home: { - universalIdentifier: '20202020-ab05-4005-8005-ba5ca11a5501', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.tabs.home + .universalIdentifier, ...TAB_PROPS.home, widgets: { fields: { - universalIdentifier: '20202020-ac05-4005-8005-ba5ca11a5511', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.tabs.home + .widgets.fields.universalIdentifier, ...WIDGET_PROPS.fields, }, taskRichText: { - universalIdentifier: '20202020-ac05-4005-8005-ba5ca11a5512', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.tabs.home + .widgets.taskRichText.universalIdentifier, title: WIDGET_PROPS.taskRichText.title, type: WIDGET_PROPS.taskRichText.type, gridPosition: WIDGET_PROPS.taskRichText.gridPosition, @@ -36,11 +45,15 @@ const TASK_PAGE_TABS = { }, }, note: { - universalIdentifier: '20202020-ab05-4005-8005-ba5ca11a5502', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.tabs.note + .universalIdentifier, ...TAB_PROPS.note, widgets: { taskRichText: { - universalIdentifier: '20202020-ac05-4005-8005-ba5ca11a5521', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.tabs.note + .widgets.taskRichText.universalIdentifier, ...WIDGET_PROPS.taskRichText, conditionalDisplay: CONDITIONAL_DISPLAY_DEVICE_DESKTOP, conditionalAvailabilityExpression: @@ -49,21 +62,29 @@ const TASK_PAGE_TABS = { }, }, timeline: { - universalIdentifier: '20202020-ab05-4005-8005-ba5ca11a5503', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.tabs.timeline + .universalIdentifier, ...TAB_PROPS.timeline, widgets: { timeline: { - universalIdentifier: '20202020-ac05-4005-8005-ba5ca11a5531', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.tabs + .timeline.widgets.timeline.universalIdentifier, ...WIDGET_PROPS.timeline, }, }, }, files: { - universalIdentifier: '20202020-ab05-4005-8005-ba5ca11a5504', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.tabs.files + .universalIdentifier, ...TAB_PROPS.files, widgets: { files: { - universalIdentifier: '20202020-ac05-4005-8005-ba5ca11a5541', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.tabs.files + .widgets.files.universalIdentifier, ...WIDGET_PROPS.files, }, }, @@ -74,7 +95,9 @@ export const STANDARD_TASK_PAGE_LAYOUT_CONFIG = { name: 'Default Task Layout', type: PageLayoutType.RECORD_PAGE, objectUniversalIdentifier: STANDARD_OBJECTS.task.universalIdentifier, - universalIdentifier: '20202020-a105-4005-8005-ba5ca11a1005', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage + .universalIdentifier, defaultTabUniversalIdentifier: null, tabs: TASK_PAGE_TABS, } as const satisfies StandardPageLayoutConfig; diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-workflow-automated-trigger-page-layout.config.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-workflow-automated-trigger-page-layout.config.ts index 560d9d77656..ed0b9fea6d4 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-workflow-automated-trigger-page-layout.config.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-workflow-automated-trigger-page-layout.config.ts @@ -1,4 +1,7 @@ -import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; +import { + STANDARD_OBJECTS, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS, +} from 'twenty-shared/metadata'; import { PageLayoutType } from 'src/engine/metadata-modules/page-layout/enums/page-layout-type.enum'; import { @@ -12,21 +15,31 @@ import { const WORKFLOW_AUTOMATED_TRIGGER_PAGE_TABS = { home: { - universalIdentifier: '20202020-ab15-4015-8015-a0bcf1151501', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS + .workflowAutomatedTriggerRecordPage.tabs.home.universalIdentifier, ...TAB_PROPS.home, widgets: { fields: { - universalIdentifier: '20202020-ac15-4015-8015-a0bcf1151511', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS + .workflowAutomatedTriggerRecordPage.tabs.home.widgets.fields + .universalIdentifier, ...WIDGET_PROPS.fields, }, }, }, timeline: { - universalIdentifier: '20202020-ab15-4015-8015-a0bcf1151502', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS + .workflowAutomatedTriggerRecordPage.tabs.timeline.universalIdentifier, ...TAB_PROPS.timeline, widgets: { timeline: { - universalIdentifier: '20202020-ac15-4015-8015-a0bcf1151521', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS + .workflowAutomatedTriggerRecordPage.tabs.timeline.widgets.timeline + .universalIdentifier, ...WIDGET_PROPS.timeline, }, }, @@ -38,7 +51,9 @@ export const STANDARD_WORKFLOW_AUTOMATED_TRIGGER_PAGE_LAYOUT_CONFIG = { type: PageLayoutType.RECORD_PAGE, objectUniversalIdentifier: STANDARD_OBJECTS.workflowAutomatedTrigger.universalIdentifier, - universalIdentifier: '20202020-a115-4015-8015-a0bcf1150001', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS + .workflowAutomatedTriggerRecordPage.universalIdentifier, defaultTabUniversalIdentifier: null, tabs: WORKFLOW_AUTOMATED_TRIGGER_PAGE_TABS, } as const satisfies StandardPageLayoutConfig; diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-workflow-page-layout.config.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-workflow-page-layout.config.ts index 8eba44ae82c..d57f3b2310d 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-workflow-page-layout.config.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-workflow-page-layout.config.ts @@ -1,4 +1,7 @@ -import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; +import { + STANDARD_OBJECTS, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS, +} from 'twenty-shared/metadata'; import { PageLayoutType } from 'src/engine/metadata-modules/page-layout/enums/page-layout-type.enum'; import { @@ -12,11 +15,15 @@ import { const WORKFLOW_PAGE_TABS = { flow: { - universalIdentifier: '20202020-ab06-4006-8006-a0bcf10a6601', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.workflowRecordPage.tabs.flow + .universalIdentifier, ...TAB_PROPS.flow, widgets: { workflow: { - universalIdentifier: '20202020-ac06-4006-8006-a0bcf10a6611', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.workflowRecordPage.tabs + .flow.widgets.workflow.universalIdentifier, ...WIDGET_PROPS.workflow, }, }, @@ -27,7 +34,9 @@ export const STANDARD_WORKFLOW_PAGE_LAYOUT_CONFIG = { name: 'Default Workflow Layout', type: PageLayoutType.RECORD_PAGE, objectUniversalIdentifier: STANDARD_OBJECTS.workflow.universalIdentifier, - universalIdentifier: '20202020-a106-4006-8006-a0bcf10aa006', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.workflowRecordPage + .universalIdentifier, defaultTabUniversalIdentifier: null, tabs: WORKFLOW_PAGE_TABS, } as const satisfies StandardPageLayoutConfig; diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-workflow-run-page-layout.config.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-workflow-run-page-layout.config.ts index 4ea526806ab..68c5e152389 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-workflow-run-page-layout.config.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-workflow-run-page-layout.config.ts @@ -1,4 +1,7 @@ -import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; +import { + STANDARD_OBJECTS, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS, +} 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'; @@ -15,15 +18,21 @@ import { const WORKFLOW_RUN_PAGE_TABS = { home: { - universalIdentifier: '20202020-ab08-4008-8008-a0bcf10a8801', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.workflowRunRecordPage.tabs.home + .universalIdentifier, ...TAB_PROPS.home, widgets: { fields: { - universalIdentifier: '20202020-ac08-4008-8008-a0bcf10a8811', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.workflowRunRecordPage.tabs + .home.widgets.fields.universalIdentifier, ...WIDGET_PROPS.fields, }, workflow: { - universalIdentifier: '20202020-ac08-4008-8008-a0bcf10a8813', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.workflowRunRecordPage.tabs + .home.widgets.workflow.universalIdentifier, title: 'Workflow', type: WidgetType.FIELD, gridPosition: GRID_POSITIONS.FULL_WIDTH, @@ -34,11 +43,15 @@ const WORKFLOW_RUN_PAGE_TABS = { }, }, flow: { - universalIdentifier: '20202020-ab08-4008-8008-a0bcf10a8802', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.workflowRunRecordPage.tabs.flow + .universalIdentifier, ...TAB_PROPS.flowSecondary, widgets: { workflowRun: { - universalIdentifier: '20202020-ac08-4008-8008-a0bcf10a8821', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.workflowRunRecordPage.tabs + .flow.widgets.workflowRun.universalIdentifier, ...WIDGET_PROPS.workflowRun, }, }, @@ -49,7 +62,9 @@ export const STANDARD_WORKFLOW_RUN_PAGE_LAYOUT_CONFIG = { name: 'Default Workflow Run Layout', type: PageLayoutType.RECORD_PAGE, objectUniversalIdentifier: STANDARD_OBJECTS.workflowRun.universalIdentifier, - universalIdentifier: '20202020-a108-4008-8008-a0bcf10ac008', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.workflowRunRecordPage + .universalIdentifier, defaultTabUniversalIdentifier: WORKFLOW_RUN_PAGE_TABS.flow.universalIdentifier, tabs: WORKFLOW_RUN_PAGE_TABS, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-workflow-version-page-layout.config.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-workflow-version-page-layout.config.ts index ad2bfa4416c..58019633622 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-workflow-version-page-layout.config.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-config/standard-workflow-version-page-layout.config.ts @@ -1,4 +1,7 @@ -import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; +import { + STANDARD_OBJECTS, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS, +} 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'; @@ -15,15 +18,21 @@ import { const WORKFLOW_VERSION_PAGE_TABS = { home: { - universalIdentifier: '20202020-ab07-4007-8007-a0bcf10a7701', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.workflowVersionRecordPage.tabs + .home.universalIdentifier, ...TAB_PROPS.home, widgets: { fields: { - universalIdentifier: '20202020-ac07-4007-8007-a0bcf10a7711', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.workflowVersionRecordPage + .tabs.home.widgets.fields.universalIdentifier, ...WIDGET_PROPS.fields, }, workflow: { - universalIdentifier: '20202020-ac07-4007-8007-a0bcf10a7712', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.workflowVersionRecordPage + .tabs.home.widgets.workflow.universalIdentifier, title: 'Workflow', type: WidgetType.FIELD, gridPosition: GRID_POSITIONS.FULL_WIDTH, @@ -34,11 +43,15 @@ const WORKFLOW_VERSION_PAGE_TABS = { }, }, flow: { - universalIdentifier: '20202020-ab07-4007-8007-a0bcf10a7702', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.workflowVersionRecordPage.tabs + .flow.universalIdentifier, ...TAB_PROPS.flowSecondary, widgets: { workflowVersion: { - universalIdentifier: '20202020-ac07-4007-8007-a0bcf10a7721', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.workflowVersionRecordPage + .tabs.flow.widgets.workflowVersion.universalIdentifier, ...WIDGET_PROPS.workflowVersion, }, }, @@ -50,7 +63,9 @@ export const STANDARD_WORKFLOW_VERSION_PAGE_LAYOUT_CONFIG = { type: PageLayoutType.RECORD_PAGE, objectUniversalIdentifier: STANDARD_OBJECTS.workflowVersion.universalIdentifier, - universalIdentifier: '20202020-a107-4007-8007-a0bcf10ab007', + universalIdentifier: + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.workflowVersionRecordPage + .universalIdentifier, defaultTabUniversalIdentifier: WORKFLOW_VERSION_PAGE_TABS.flow.universalIdentifier, tabs: WORKFLOW_VERSION_PAGE_TABS, diff --git a/packages/twenty-shared/src/metadata/constants/standard-page-layout-universal-identifiers.constant.ts b/packages/twenty-shared/src/metadata/constants/standard-page-layout-universal-identifiers.constant.ts new file mode 100644 index 00000000000..658ae977951 --- /dev/null +++ b/packages/twenty-shared/src/metadata/constants/standard-page-layout-universal-identifiers.constant.ts @@ -0,0 +1,544 @@ +// Never mutate an existing universal identifier +// Deleting an existing universal identifier should be very rare + +export const STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS = { + myFirstDashboard: { + universalIdentifier: '20202020-d001-4d01-8d01-da5ab0a00001', + tabs: { + tab1: { + universalIdentifier: '20202020-d011-4d11-8d11-da5ab0a01001', + widgets: { + welcomeRichText: { + universalIdentifier: '20202020-d111-4d11-8d11-da5ab0a11001', + }, + dealsByCompany: { + universalIdentifier: '20202020-d111-4d11-8d11-da5ab0a11002', + }, + pipelineValueByStage: { + universalIdentifier: '20202020-d111-4d11-8d11-da5ab0a11003', + }, + revenueTimeline: { + universalIdentifier: '20202020-d111-4d11-8d11-da5ab0a11004', + }, + opportunitiesByOwner: { + universalIdentifier: '20202020-d111-4d11-8d11-da5ab0a11005', + }, + stockMarketIframe: { + universalIdentifier: '20202020-d111-4d11-8d11-da5ab0a11006', + }, + dealsCreatedThisMonth: { + universalIdentifier: '20202020-d111-4d11-8d11-da5ab0a11007', + }, + dealValueCreatedThisMonth: { + universalIdentifier: '20202020-d111-4d11-8d11-da5ab0a11008', + }, + }, + }, + }, + }, + companyRecordPage: { + universalIdentifier: '20202020-a101-4001-8001-c0aba11c0001', + tabs: { + home: { + universalIdentifier: '20202020-ab01-4001-8001-c0aba11c0101', + widgets: { + fields: { + universalIdentifier: '20202020-ac01-4001-8001-c0aba11c0111', + }, + people: { + universalIdentifier: '20202020-ac01-4001-8001-c0aba11c0112', + }, + opportunities: { + universalIdentifier: '20202020-ac01-4001-8001-c0aba11c0114', + }, + }, + }, + timeline: { + universalIdentifier: '20202020-ab01-4001-8001-c0aba11c0102', + widgets: { + timeline: { + universalIdentifier: '20202020-ac01-4001-8001-c0aba11c0121', + }, + }, + }, + tasks: { + universalIdentifier: '20202020-ab01-4001-8001-c0aba11c0103', + widgets: { + tasks: { + universalIdentifier: '20202020-ac01-4001-8001-c0aba11c0131', + }, + }, + }, + notes: { + universalIdentifier: '20202020-ab01-4001-8001-c0aba11c0104', + widgets: { + notes: { + universalIdentifier: '20202020-ac01-4001-8001-c0aba11c0141', + }, + }, + }, + files: { + universalIdentifier: '20202020-ab01-4001-8001-c0aba11c0105', + widgets: { + files: { + universalIdentifier: '20202020-ac01-4001-8001-c0aba11c0151', + }, + }, + }, + emails: { + universalIdentifier: '20202020-ab01-4001-8001-c0aba11c0106', + widgets: { + emails: { + universalIdentifier: '20202020-ac01-4001-8001-c0aba11c0161', + }, + }, + }, + calendar: { + universalIdentifier: '20202020-ab01-4001-8001-c0aba11c0107', + widgets: { + calendar: { + universalIdentifier: '20202020-ac01-4001-8001-c0aba11c0171', + }, + }, + }, + }, + }, + personRecordPage: { + universalIdentifier: '20202020-a102-4002-8002-ae0a1ea11002', + tabs: { + home: { + universalIdentifier: '20202020-ab02-4002-8002-ae0a1ea11201', + widgets: { + fields: { + universalIdentifier: '20202020-ac02-4002-8002-ae0a1ea11211', + }, + company: { + universalIdentifier: '20202020-ac02-4002-8002-ae0a1ea11212', + }, + pointOfContactForOpportunities: { + universalIdentifier: '20202020-ac02-4002-8002-ae0a1ea11213', + }, + }, + }, + timeline: { + universalIdentifier: '20202020-ab02-4002-8002-ae0a1ea11202', + widgets: { + timeline: { + universalIdentifier: '20202020-ac02-4002-8002-ae0a1ea11221', + }, + }, + }, + tasks: { + universalIdentifier: '20202020-ab02-4002-8002-ae0a1ea11203', + widgets: { + tasks: { + universalIdentifier: '20202020-ac02-4002-8002-ae0a1ea11231', + }, + }, + }, + notes: { + universalIdentifier: '20202020-ab02-4002-8002-ae0a1ea11204', + widgets: { + notes: { + universalIdentifier: '20202020-ac02-4002-8002-ae0a1ea11241', + }, + }, + }, + files: { + universalIdentifier: '20202020-ab02-4002-8002-ae0a1ea11205', + widgets: { + files: { + universalIdentifier: '20202020-ac02-4002-8002-ae0a1ea11251', + }, + }, + }, + emails: { + universalIdentifier: '20202020-ab02-4002-8002-ae0a1ea11206', + widgets: { + emails: { + universalIdentifier: '20202020-ac02-4002-8002-ae0a1ea11261', + }, + }, + }, + calendar: { + universalIdentifier: '20202020-ab02-4002-8002-ae0a1ea11207', + widgets: { + calendar: { + universalIdentifier: '20202020-ac02-4002-8002-ae0a1ea11271', + }, + }, + }, + }, + }, + opportunityRecordPage: { + universalIdentifier: '20202020-a103-4003-8003-0aa0b1ca1003', + tabs: { + home: { + universalIdentifier: '20202020-ab03-4003-8003-0aa0b1ca1301', + widgets: { + fields: { + universalIdentifier: '20202020-ac03-4003-8003-0aa0b1ca1311', + }, + pointOfContact: { + universalIdentifier: '20202020-ac03-4003-8003-0aa0b1ca1312', + }, + company: { + universalIdentifier: '20202020-ac03-4003-8003-0aa0b1ca1313', + }, + owner: { + universalIdentifier: '20202020-ac03-4003-8003-0aa0b1ca1314', + }, + }, + }, + timeline: { + universalIdentifier: '20202020-ab03-4003-8003-0aa0b1ca1302', + widgets: { + timeline: { + universalIdentifier: '20202020-ac03-4003-8003-0aa0b1ca1321', + }, + }, + }, + tasks: { + universalIdentifier: '20202020-ab03-4003-8003-0aa0b1ca1303', + widgets: { + tasks: { + universalIdentifier: '20202020-ac03-4003-8003-0aa0b1ca1331', + }, + }, + }, + notes: { + universalIdentifier: '20202020-ab03-4003-8003-0aa0b1ca1304', + widgets: { + notes: { + universalIdentifier: '20202020-ac03-4003-8003-0aa0b1ca1341', + }, + }, + }, + files: { + universalIdentifier: '20202020-ab03-4003-8003-0aa0b1ca1305', + widgets: { + files: { + universalIdentifier: '20202020-ac03-4003-8003-0aa0b1ca1351', + }, + }, + }, + emails: { + universalIdentifier: '20202020-ab03-4003-8003-0aa0b1ca1306', + widgets: { + emails: { + universalIdentifier: '20202020-ac03-4003-8003-0aa0b1ca1361', + }, + }, + }, + calendar: { + universalIdentifier: '20202020-ab03-4003-8003-0aa0b1ca1307', + widgets: { + calendar: { + universalIdentifier: '20202020-ac03-4003-8003-0aa0b1ca1371', + }, + }, + }, + }, + }, + noteRecordPage: { + universalIdentifier: '20202020-a104-4004-8004-a0be5a11a004', + tabs: { + home: { + universalIdentifier: '20202020-ab04-4004-8004-a0be5a11a401', + widgets: { + fields: { + universalIdentifier: '20202020-ac04-4004-8004-a0be5a11a411', + }, + noteRichText: { + universalIdentifier: '20202020-ac04-4004-8004-a0be5a11a412', + }, + }, + }, + note: { + universalIdentifier: '20202020-ab04-4004-8004-a0be5a11a402', + widgets: { + noteRichText: { + universalIdentifier: '20202020-ac04-4004-8004-a0be5a11a421', + }, + }, + }, + timeline: { + universalIdentifier: '20202020-ab04-4004-8004-a0be5a11a403', + widgets: { + timeline: { + universalIdentifier: '20202020-ac04-4004-8004-a0be5a11a431', + }, + }, + }, + files: { + universalIdentifier: '20202020-ab04-4004-8004-a0be5a11a404', + widgets: { + files: { + universalIdentifier: '20202020-ac04-4004-8004-a0be5a11a441', + }, + }, + }, + }, + }, + taskRecordPage: { + universalIdentifier: '20202020-a105-4005-8005-ba5ca11a1005', + tabs: { + home: { + universalIdentifier: '20202020-ab05-4005-8005-ba5ca11a5501', + widgets: { + fields: { + universalIdentifier: '20202020-ac05-4005-8005-ba5ca11a5511', + }, + taskRichText: { + universalIdentifier: '20202020-ac05-4005-8005-ba5ca11a5512', + }, + }, + }, + note: { + universalIdentifier: '20202020-ab05-4005-8005-ba5ca11a5502', + widgets: { + taskRichText: { + universalIdentifier: '20202020-ac05-4005-8005-ba5ca11a5521', + }, + }, + }, + timeline: { + universalIdentifier: '20202020-ab05-4005-8005-ba5ca11a5503', + widgets: { + timeline: { + universalIdentifier: '20202020-ac05-4005-8005-ba5ca11a5531', + }, + }, + }, + files: { + universalIdentifier: '20202020-ab05-4005-8005-ba5ca11a5504', + widgets: { + files: { + universalIdentifier: '20202020-ac05-4005-8005-ba5ca11a5541', + }, + }, + }, + }, + }, + workflowRecordPage: { + universalIdentifier: '20202020-a106-4006-8006-a0bcf10aa006', + tabs: { + flow: { + universalIdentifier: '20202020-ab06-4006-8006-a0bcf10a6601', + widgets: { + workflow: { + universalIdentifier: '20202020-ac06-4006-8006-a0bcf10a6611', + }, + }, + }, + }, + }, + workflowVersionRecordPage: { + universalIdentifier: '20202020-a107-4007-8007-a0bcf10ab007', + tabs: { + home: { + universalIdentifier: '20202020-ab07-4007-8007-a0bcf10a7701', + widgets: { + fields: { + universalIdentifier: '20202020-ac07-4007-8007-a0bcf10a7711', + }, + workflow: { + universalIdentifier: '20202020-ac07-4007-8007-a0bcf10a7712', + }, + }, + }, + flow: { + universalIdentifier: '20202020-ab07-4007-8007-a0bcf10a7702', + widgets: { + workflowVersion: { + universalIdentifier: '20202020-ac07-4007-8007-a0bcf10a7721', + }, + }, + }, + }, + }, + workflowRunRecordPage: { + universalIdentifier: '20202020-a108-4008-8008-a0bcf10ac008', + tabs: { + home: { + universalIdentifier: '20202020-ab08-4008-8008-a0bcf10a8801', + widgets: { + fields: { + universalIdentifier: '20202020-ac08-4008-8008-a0bcf10a8811', + }, + workflow: { + universalIdentifier: '20202020-ac08-4008-8008-a0bcf10a8813', + }, + }, + }, + flow: { + universalIdentifier: '20202020-ab08-4008-8008-a0bcf10a8802', + widgets: { + workflowRun: { + universalIdentifier: '20202020-ac08-4008-8008-a0bcf10a8821', + }, + }, + }, + }, + }, + blocklistRecordPage: { + universalIdentifier: '20202020-a109-4009-8009-b10c115b0001', + tabs: { + home: { + universalIdentifier: '20202020-ab09-4009-8009-b10c115b0901', + widgets: { + fields: { + universalIdentifier: '20202020-ac09-4009-8009-b10c115b0911', + }, + }, + }, + timeline: { + universalIdentifier: '20202020-ab09-4009-8009-b10c115b0902', + widgets: { + timeline: { + universalIdentifier: '20202020-ac09-4009-8009-b10c115b0921', + }, + }, + }, + }, + }, + calendarChannelEventAssociationRecordPage: { + universalIdentifier: '20202020-a10b-400b-800b-ca1c4e0b0001', + tabs: { + home: { + universalIdentifier: '20202020-ab0b-400b-800b-ca1c4e0b0b01', + widgets: { + fields: { + universalIdentifier: '20202020-ac0b-400b-800b-ca1c4e0b0b11', + }, + }, + }, + timeline: { + universalIdentifier: '20202020-ab0b-400b-800b-ca1c4e0b0b02', + widgets: { + timeline: { + universalIdentifier: '20202020-ac0b-400b-800b-ca1c4e0b0b21', + }, + }, + }, + }, + }, + calendarEventParticipantRecordPage: { + universalIdentifier: '20202020-a10c-400c-800c-ca1e0a0c0001', + tabs: { + home: { + universalIdentifier: '20202020-ab0c-400c-800c-ca1e0a0c0c01', + widgets: { + fields: { + universalIdentifier: '20202020-ac0c-400c-800c-ca1e0a0c0c11', + }, + }, + }, + timeline: { + universalIdentifier: '20202020-ab0c-400c-800c-ca1e0a0c0c02', + widgets: { + timeline: { + universalIdentifier: '20202020-ac0c-400c-800c-ca1e0a0c0c21', + }, + }, + }, + }, + }, + messageChannelMessageAssociationRecordPage: { + universalIdentifier: '20202020-a111-4011-8011-a5c4a5110001', + tabs: { + home: { + universalIdentifier: '20202020-ab11-4011-8011-a5c4a5111101', + widgets: { + fields: { + universalIdentifier: '20202020-ac11-4011-8011-a5c4a5111111', + }, + }, + }, + timeline: { + universalIdentifier: '20202020-ab11-4011-8011-a5c4a5111102', + widgets: { + timeline: { + universalIdentifier: '20202020-ac11-4011-8011-a5c4a5111121', + }, + }, + }, + }, + }, + messageChannelMessageAssociationMessageFolderRecordPage: { + universalIdentifier: '20202020-a112-4012-8012-a5c4a6120001', + tabs: { + home: { + universalIdentifier: '20202020-ab12-4012-8012-a5c4a6121201', + widgets: { + fields: { + universalIdentifier: '20202020-ac12-4012-8012-a5c4a6121211', + }, + }, + }, + timeline: { + universalIdentifier: '20202020-ab12-4012-8012-a5c4a6121202', + widgets: { + timeline: { + universalIdentifier: '20202020-ac12-4012-8012-a5c4a6121221', + }, + }, + }, + }, + }, + messageParticipantRecordPage: { + universalIdentifier: '20202020-a114-4014-8014-a5ea10140001', + tabs: { + home: { + universalIdentifier: '20202020-ab14-4014-8014-a5ea10141401', + widgets: { + fields: { + universalIdentifier: '20202020-ac14-4014-8014-a5ea10141411', + }, + }, + }, + timeline: { + universalIdentifier: '20202020-ab14-4014-8014-a5ea10141402', + widgets: { + timeline: { + universalIdentifier: '20202020-ac14-4014-8014-a5ea10141421', + }, + }, + }, + }, + }, + workflowAutomatedTriggerRecordPage: { + universalIdentifier: '20202020-a115-4015-8015-a0bcf1150001', + tabs: { + home: { + universalIdentifier: '20202020-ab15-4015-8015-a0bcf1151501', + widgets: { + fields: { + universalIdentifier: '20202020-ac15-4015-8015-a0bcf1151511', + }, + }, + }, + timeline: { + universalIdentifier: '20202020-ab15-4015-8015-a0bcf1151502', + widgets: { + timeline: { + universalIdentifier: '20202020-ac15-4015-8015-a0bcf1151521', + }, + }, + }, + }, + }, + messageThreadRecordPage: { + universalIdentifier: '20202020-95bb-40eb-a699-70e7ea02a79e', + tabs: { + home: { + universalIdentifier: '20202020-f639-48a0-9a44-027cf4e3cd15', + widgets: { + emailThread: { + universalIdentifier: '20202020-d57e-44cb-b220-69a881feb9c3', + }, + }, + }, + }, + }, +}; diff --git a/packages/twenty-shared/src/metadata/index.ts b/packages/twenty-shared/src/metadata/index.ts index d6b5c64224f..92859e1db14 100644 --- a/packages/twenty-shared/src/metadata/index.ts +++ b/packages/twenty-shared/src/metadata/index.ts @@ -17,6 +17,7 @@ export { DEFAULT_RELATIONS_OBJECTS_STANDARD_IDS } from './constants/default-rela export { IDENTIFIER_MAX_CHAR_LENGTH } from './constants/identifier-max-char-length.constant'; export { RESERVED_METADATA_NAME_KEYWORDS } from './constants/reserved-metadata-name-keywords.constant'; export { STANDARD_OBJECTS } from './constants/standard-object.constant'; +export { STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS } from './constants/standard-page-layout-universal-identifiers.constant'; export type { AllMetadataName } from './types/all-metadata-name.type'; export type { FailedMetadataValidationError,