From 7f441d741bfd89aa4ee782581f99aab0e6962414 Mon Sep 17 00:00:00 2001 From: Guillim Date: Wed, 26 Nov 2025 18:00:06 +0100 Subject: [PATCH] Timelineactivites-views-seeder (#16103) seeder for Timelineactivites views Fixes https://github.com/twentyhq/core-team-issues/issues/1904 CleanShot 2025-11-26 at 17 30 32 --- .../constants/standard-object.constant.ts | 23 +++- .../prefill-core-views.ts | 2 + .../views/timeline-activities-all.view.ts | 121 ++++++++++++++++++ .../timeline-activity.workspace-entity.ts | 3 +- 4 files changed, 147 insertions(+), 2 deletions(-) create mode 100644 packages/twenty-server/src/engine/workspace-manager/standard-objects-prefill-data/views/timeline-activities-all.view.ts diff --git a/packages/twenty-server/src/engine/core-modules/application/constants/standard-object.constant.ts b/packages/twenty-server/src/engine/core-modules/application/constants/standard-object.constant.ts index 33fb98febb..9c6f5dca21 100644 --- a/packages/twenty-server/src/engine/core-modules/application/constants/standard-object.constant.ts +++ b/packages/twenty-server/src/engine/core-modules/application/constants/standard-object.constant.ts @@ -1400,7 +1400,28 @@ export const STANDARD_OBJECTS = { TIMELINE_ACTIVITY_STANDARD_FIELD_IDS.linkedObjectMetadataId, }, }, - views: {}, + views: { + allTimelineActivities: { + universalIdentifier: '20202020-b101-4b01-8b01-ba5cc01aa001', + viewFields: { + name: { + universalIdentifier: '20202020-bf01-4b01-8b01-ba5cc01aa011', + }, + happensAt: { + universalIdentifier: '20202020-bf01-4b01-8b01-ba5cc01aa012', + }, + properties: { + universalIdentifier: '20202020-bf01-4b01-8b01-ba5cc01aa019', + }, + workspaceMember: { + universalIdentifier: '20202020-bf01-4b01-8b01-ba5cc01aa013', + }, + linkedRecordCachedName: { + universalIdentifier: '20202020-bf01-4b01-8b01-ba5cc01aa017', + }, + }, + }, + }, }, view: { universalIdentifier: STANDARD_OBJECT_IDS.view, diff --git a/packages/twenty-server/src/engine/workspace-manager/standard-objects-prefill-data/prefill-core-views.ts b/packages/twenty-server/src/engine/workspace-manager/standard-objects-prefill-data/prefill-core-views.ts index 2f88a42e77..8abac5fb77 100644 --- a/packages/twenty-server/src/engine/workspace-manager/standard-objects-prefill-data/prefill-core-views.ts +++ b/packages/twenty-server/src/engine/workspace-manager/standard-objects-prefill-data/prefill-core-views.ts @@ -28,6 +28,7 @@ import { peopleAllView } from 'src/engine/workspace-manager/standard-objects-pre import { tasksAllView } from 'src/engine/workspace-manager/standard-objects-prefill-data/views/tasks-all.view'; import { tasksAssignedToMeView } from 'src/engine/workspace-manager/standard-objects-prefill-data/views/tasks-assigned-to-me'; import { tasksByStatusView } from 'src/engine/workspace-manager/standard-objects-prefill-data/views/tasks-by-status.view'; +import { timelineActivitiesAllView } from 'src/engine/workspace-manager/standard-objects-prefill-data/views/timeline-activities-all.view'; import { workflowRunsAllView } from 'src/engine/workspace-manager/standard-objects-prefill-data/views/workflow-runs-all.view'; import { workflowVersionsAllView } from 'src/engine/workspace-manager/standard-objects-prefill-data/views/workflow-versions-all.view'; import { workflowsAllView } from 'src/engine/workspace-manager/standard-objects-prefill-data/views/workflows-all.view'; @@ -66,6 +67,7 @@ export const prefillCoreViews = async ({ messagesAllView, messageThreadsAllView, calendarEventsAllView, + timelineActivitiesAllView, ].map((seeder) => seeder({ objectMetadataItems, diff --git a/packages/twenty-server/src/engine/workspace-manager/standard-objects-prefill-data/views/timeline-activities-all.view.ts b/packages/twenty-server/src/engine/workspace-manager/standard-objects-prefill-data/views/timeline-activities-all.view.ts new file mode 100644 index 0000000000..87b78959ca --- /dev/null +++ b/packages/twenty-server/src/engine/workspace-manager/standard-objects-prefill-data/views/timeline-activities-all.view.ts @@ -0,0 +1,121 @@ +import { msg } from '@lingui/core/macro'; +import { STANDARD_OBJECT_IDS } from 'twenty-shared/metadata'; +import { v4 } from 'uuid'; + +import { STANDARD_OBJECTS } from 'src/engine/core-modules/application/constants/standard-object.constant'; +import { type FlatApplication } from 'src/engine/core-modules/application/types/flat-application.type'; +import { type ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; +import { ViewOpenRecordInType } from 'src/engine/metadata-modules/view/types/view-open-record-in-type.type'; +import { type ViewDefinition } from 'src/engine/workspace-manager/standard-objects-prefill-data/types/view-definition.interface'; +import { DEFAULT_VIEW_FIELD_SIZE } from 'src/engine/workspace-manager/standard-objects-prefill-data/views/constants/DEFAULT_VIEW_FIELD_SIZE'; +import { TIMELINE_ACTIVITY_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; + +export const timelineActivitiesAllView = ({ + objectMetadataItems, + useCoreNaming = false, + twentyStandardFlatApplication, +}: { + objectMetadataItems: ObjectMetadataEntity[]; + useCoreNaming?: boolean; + twentyStandardFlatApplication: FlatApplication; +}): ViewDefinition => { + const timelineActivityObjectMetadata = objectMetadataItems.find( + (object) => object.standardId === STANDARD_OBJECT_IDS.timelineActivity, + ); + + if (!timelineActivityObjectMetadata) { + throw new Error('TimelineActivity object metadata not found'); + } + + const viewUniversalIdentifier = + STANDARD_OBJECTS.timelineActivity.views.allTimelineActivities + .universalIdentifier; + + return { + id: v4(), + universalIdentifier: viewUniversalIdentifier, + applicationId: twentyStandardFlatApplication.id, + name: useCoreNaming + ? msg`All {objectLabelPlural}` + : 'All Timeline Activities', + objectMetadataId: timelineActivityObjectMetadata.id, + type: 'table', + key: 'INDEX', + position: 0, + icon: 'IconList', + openRecordIn: ViewOpenRecordInType.RECORD_PAGE, + kanbanFieldMetadataId: '', + filters: [], + fields: [ + { + fieldMetadataId: + timelineActivityObjectMetadata.fields.find( + (field) => + field.standardId === TIMELINE_ACTIVITY_STANDARD_FIELD_IDS.name, + )?.id ?? '', + position: 0, + isVisible: true, + size: DEFAULT_VIEW_FIELD_SIZE, + universalIdentifier: + STANDARD_OBJECTS.timelineActivity.views.allTimelineActivities + .viewFields.name.universalIdentifier, + }, + { + fieldMetadataId: + timelineActivityObjectMetadata.fields.find( + (field) => + field.standardId === + TIMELINE_ACTIVITY_STANDARD_FIELD_IDS.happensAt, + )?.id ?? '', + position: 1, + isVisible: true, + size: 150, + universalIdentifier: + STANDARD_OBJECTS.timelineActivity.views.allTimelineActivities + .viewFields.happensAt.universalIdentifier, + }, + { + fieldMetadataId: + timelineActivityObjectMetadata.fields.find( + (field) => + field.standardId === + TIMELINE_ACTIVITY_STANDARD_FIELD_IDS.properties, + )?.id ?? '', + position: 2, + isVisible: true, + size: 200, + universalIdentifier: + STANDARD_OBJECTS.timelineActivity.views.allTimelineActivities + .viewFields.properties.universalIdentifier, + }, + { + fieldMetadataId: + timelineActivityObjectMetadata.fields.find( + (field) => + field.standardId === + TIMELINE_ACTIVITY_STANDARD_FIELD_IDS.workspaceMember, + )?.id ?? '', + position: 3, + isVisible: true, + size: 150, + universalIdentifier: + STANDARD_OBJECTS.timelineActivity.views.allTimelineActivities + .viewFields.workspaceMember.universalIdentifier, + }, + { + fieldMetadataId: + timelineActivityObjectMetadata.fields.find( + (field) => + field.standardId === + TIMELINE_ACTIVITY_STANDARD_FIELD_IDS.linkedRecordCachedName, + )?.id ?? '', + position: 4, + isVisible: true, + size: 200, + universalIdentifier: + STANDARD_OBJECTS.timelineActivity.views.allTimelineActivities + .viewFields.linkedRecordCachedName.universalIdentifier, + }, + ], + }; +}; diff --git a/packages/twenty-server/src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts b/packages/twenty-server/src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts index 17c10e40f4..77ae7eccae 100644 --- a/packages/twenty-server/src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts +++ b/packages/twenty-server/src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts @@ -1,6 +1,6 @@ import { msg } from '@lingui/core/macro'; -import { FieldMetadataType, RelationOnDeleteAction } from 'twenty-shared/types'; import { STANDARD_OBJECT_IDS } from 'twenty-shared/metadata'; +import { FieldMetadataType, RelationOnDeleteAction } from 'twenty-shared/types'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; @@ -36,6 +36,7 @@ import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/sta labelPlural: msg`Timeline Activities`, description: msg`Aggregated / filtered event to be displayed on the timeline`, icon: STANDARD_OBJECT_ICONS.timelineActivity, + labelIdentifierStandardId: TIMELINE_ACTIVITY_STANDARD_FIELD_IDS.name, }) @WorkspaceIsSystem() @WorkspaceIsNotAuditLogged()