Remove sync-metadata and IS_WORKSPACE_CREATION_V2_ENABLED feature flag (#16997)

# Introduction
Followup of
https://github.com/twentyhq/twenty/pull/17001#pullrequestreview-3638508738
close https://github.com/twentyhq/core-team-issues/issues/1910

We've completely decom the `sync-metadata` in production. We're now then
removing its implementation in favor of the v2.

## TODO:
- [x] Remove sync-metadata implem and commands
- [x] Remove workspace decorators 
- [x] Type each deprecated field to deprecated on their workspaceEntity
- [x] Remove the `workspace-sync-metadata` folder entirely
- [x] remove workspace migration
- [x] workspace migration removal migration
- [x] remove the `v2` references from workspace manager file names
- [x] remove the `v2` references from workspace manager modules
- [ ] Double check impact on translation file path updates


## Note
- Removed the gate logic
- Remains some service v2 naming, serverless needs to be migrated on v2
fully
- Removed workspaceMigration service app health consumption, making it
always returning up ( no more down ) cc @FelixMalfait ( quite obsolete
health check now, will require complete refactor once we introduce inter
app dependency etc )
This commit is contained in:
Paul Rastoin
2026-01-08 16:45:12 +01:00
committed by GitHub
parent f1aee7fd18
commit 942d2fef83
629 changed files with 1985 additions and 21492 deletions
@@ -1,270 +0,0 @@
import { isString } from '@sniptt/guards';
import { type DataSource, type QueryRunner } from 'typeorm';
import { getFlatFieldsFromFlatObjectMetadata } from 'src/engine/api/graphql/workspace-schema-builder/utils/get-flat-fields-for-flat-object-metadata.util';
import { type FlatApplication } from 'src/engine/core-modules/application/types/flat-application.type';
import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type';
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
import { type ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import { ViewFieldEntity } from 'src/engine/metadata-modules/view-field/entities/view-field.entity';
import { ViewFilterEntity } from 'src/engine/metadata-modules/view-filter/entities/view-filter.entity';
import { ViewGroupEntity } from 'src/engine/metadata-modules/view-group/entities/view-group.entity';
import { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity';
import { ViewKey } from 'src/engine/metadata-modules/view/enums/view-key.enum';
import { ViewOpenRecordIn } from 'src/engine/metadata-modules/view/enums/view-open-record-in';
import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum';
import { ViewVisibility } from 'src/engine/metadata-modules/view/enums/view-visibility.enum';
import { ViewOpenRecordInType } from 'src/engine/metadata-modules/view/types/view-open-record-in-type.type';
import { type WorkspaceEntityManager } from 'src/engine/twenty-orm/entity-manager/workspace-entity-manager';
import { shouldSeedWorkspaceFavorite } from 'src/engine/utils/should-seed-workspace-favorite';
import { prefillWorkspaceFavorites } from 'src/engine/workspace-manager/standard-objects-prefill-data/prefill-workspace-favorites';
import { type ViewDefinition } from 'src/engine/workspace-manager/standard-objects-prefill-data/types/view-definition.interface';
import { calendarEventsAllView } from 'src/engine/workspace-manager/standard-objects-prefill-data/views/calendar-events-all.view';
import { companiesAllView } from 'src/engine/workspace-manager/standard-objects-prefill-data/views/companies-all.view';
import { dashboardsAllView } from 'src/engine/workspace-manager/standard-objects-prefill-data/views/dashboards-all.view';
import { messageThreadsAllView } from 'src/engine/workspace-manager/standard-objects-prefill-data/views/message-threads-all.view';
import { messagesAllView } from 'src/engine/workspace-manager/standard-objects-prefill-data/views/messages-all.view';
import { notesAllView } from 'src/engine/workspace-manager/standard-objects-prefill-data/views/notes-all.view';
import { opportunitiesAllView } from 'src/engine/workspace-manager/standard-objects-prefill-data/views/opportunities-all.view';
import { opportunitiesByStageView } from 'src/engine/workspace-manager/standard-objects-prefill-data/views/opportunity-by-stage.view';
import { peopleAllView } from 'src/engine/workspace-manager/standard-objects-prefill-data/views/people-all.view';
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';
import { workspaceMembersAllView } from 'src/engine/workspace-manager/standard-objects-prefill-data/views/workspace-members-all.view';
type PrefillCoreViewsArgs = {
coreDataSource: DataSource;
workspaceId: string;
flatObjectMetadataMaps: FlatEntityMaps<FlatObjectMetadata>;
flatFieldMetadataMaps: FlatEntityMaps<FlatFieldMetadata>;
featureFlags?: Record<string, boolean>;
workspaceSchemaName: string;
twentyStandardFlatApplication: FlatApplication;
};
// This is a temporary function to build the object metadata items from the flat maps.
// We should use the maps in the seeders instead.
const buildObjectMetadataItemsFromFlatMaps = (
flatObjectMetadataMaps: FlatEntityMaps<FlatObjectMetadata>,
flatFieldMetadataMaps: FlatEntityMaps<FlatFieldMetadata>,
): ObjectMetadataEntity[] => {
return Object.values(flatObjectMetadataMaps.byId)
.filter((flatObjectMetadata) => flatObjectMetadata !== undefined)
.map((flatObjectMetadata) => {
const fields = getFlatFieldsFromFlatObjectMetadata(
flatObjectMetadata,
flatFieldMetadataMaps,
);
return {
...flatObjectMetadata,
fields,
} as unknown as ObjectMetadataEntity;
});
};
export const prefillCoreViews = async ({
coreDataSource,
workspaceId,
flatObjectMetadataMaps,
flatFieldMetadataMaps,
workspaceSchemaName,
twentyStandardFlatApplication,
}: PrefillCoreViewsArgs): Promise<ViewEntity[]> => {
const objectMetadataItems = buildObjectMetadataItemsFromFlatMaps(
flatObjectMetadataMaps,
flatFieldMetadataMaps,
);
const views = [
companiesAllView,
peopleAllView,
opportunitiesAllView,
opportunitiesByStageView,
notesAllView,
tasksAllView,
tasksAssignedToMeView,
tasksByStatusView,
workflowsAllView,
workflowVersionsAllView,
workflowRunsAllView,
dashboardsAllView,
workspaceMembersAllView,
messagesAllView,
messageThreadsAllView,
calendarEventsAllView,
timelineActivitiesAllView,
].map((seeder) =>
seeder({
objectMetadataItems,
useCoreNaming: true,
twentyStandardFlatApplication,
}),
);
const queryRunner = coreDataSource.createQueryRunner();
await queryRunner.connect();
try {
await queryRunner.startTransaction();
const createdViews = await createCoreViews(
queryRunner,
workspaceId,
views,
twentyStandardFlatApplication,
);
await prefillWorkspaceFavorites(
createdViews
.filter(
(view) =>
view.key === 'INDEX' &&
shouldSeedWorkspaceFavorite(
view.objectMetadataId,
objectMetadataItems,
),
)
.map((view) => view.id),
queryRunner.manager as WorkspaceEntityManager,
workspaceSchemaName,
);
await queryRunner.commitTransaction();
return createdViews;
} catch (error) {
if (queryRunner.isTransactionActive) {
try {
await queryRunner.rollbackTransaction();
} catch (error) {
// eslint-disable-next-line no-console
console.trace(`Failed to rollback transaction: ${error.message}`);
}
}
throw error;
} finally {
await queryRunner.release();
}
};
export const createCoreViews = async (
queryRunner: QueryRunner,
workspaceId: string,
viewDefinitions: ViewDefinition[],
twentyStandardFlatApplication: FlatApplication,
): Promise<ViewEntity[]> => {
const coreViews: Partial<ViewEntity>[] = viewDefinitions.map(
({
id,
name,
objectMetadataId,
type,
key,
position,
icon,
isCustom,
openRecordIn,
mainGroupByFieldMetadataId,
kanbanAggregateOperation,
kanbanAggregateOperationFieldMetadataId,
applicationId,
universalIdentifier,
}) => ({
id,
name: isString(name) ? name : name.message || '',
objectMetadataId,
type: type === 'kanban' ? ViewType.KANBAN : ViewType.TABLE,
key: key === ViewKey.INDEX ? ViewKey.INDEX : null,
position,
icon,
isCompact: false,
isCustom: isCustom ?? false,
openRecordIn:
openRecordIn === ViewOpenRecordInType.RECORD_PAGE
? ViewOpenRecordIn.RECORD_PAGE
: ViewOpenRecordIn.SIDE_PANEL,
kanbanAggregateOperation,
kanbanAggregateOperationFieldMetadataId,
mainGroupByFieldMetadataId,
workspaceId,
anyFieldFilterValue: null,
visibility: ViewVisibility.WORKSPACE,
applicationId,
universalIdentifier,
}),
);
const viewRepository = queryRunner.manager.getRepository(ViewEntity);
const createdViews = await viewRepository.save(coreViews);
for (const viewDefinition of viewDefinitions) {
if (viewDefinition.fields && viewDefinition.fields.length > 0) {
const coreViewFields: Partial<ViewFieldEntity>[] =
viewDefinition.fields.map((field) => ({
fieldMetadataId: field.fieldMetadataId,
position: field.position,
isVisible: field.isVisible,
size: field.size,
viewId: viewDefinition.id,
workspaceId,
applicationId: twentyStandardFlatApplication.id,
universalIdentifier: field.universalIdentifier,
}));
const viewFieldRepository =
queryRunner.manager.getRepository(ViewFieldEntity);
await viewFieldRepository.save(coreViewFields);
}
if (viewDefinition.filters && viewDefinition.filters.length > 0) {
const coreViewFilters: Partial<ViewFilterEntity>[] =
viewDefinition.filters.map((filter) => ({
fieldMetadataId: filter.fieldMetadataId,
viewId: viewDefinition.id,
operand: filter.operand,
value: filter.value,
workspaceId,
applicationId: twentyStandardFlatApplication.id,
universalIdentifier: filter.universalIdentifier,
}));
const viewFilterRepository =
queryRunner.manager.getRepository(ViewFilterEntity);
await viewFilterRepository.save(coreViewFilters);
}
if (
'groups' in viewDefinition &&
viewDefinition.groups &&
viewDefinition.groups.length > 0
) {
const coreViewGroups: Partial<ViewGroupEntity>[] =
viewDefinition.groups.map((group) => ({
fieldMetadataId: group.fieldMetadataId,
isVisible: group.isVisible,
fieldValue: group.fieldValue,
position: group.position,
viewId: viewDefinition.id,
workspaceId,
applicationId: twentyStandardFlatApplication.id,
universalIdentifier: group.universalIdentifier,
}));
const viewGroupRepository =
queryRunner.manager.getRepository(ViewGroupEntity);
await viewGroupRepository.save(coreViewGroups);
}
}
return createdViews;
};
@@ -1,46 +0,0 @@
import { type MessageDescriptor } from '@lingui/core';
import { type ViewFilterOperand } from 'twenty-shared/types';
import { type AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant';
import { type ViewOpenRecordInType } from 'src/engine/metadata-modules/view/types/view-open-record-in-type.type';
export interface ViewDefinition {
id?: string;
name: string | MessageDescriptor;
objectMetadataId: string;
type: string;
key: string | null;
position: number;
applicationId: string;
universalIdentifier: string;
icon?: string;
isCustom?: boolean;
openRecordIn?: ViewOpenRecordInType;
kanbanAggregateOperation?: AggregateOperations;
kanbanAggregateOperationFieldMetadataId?: string;
mainGroupByFieldMetadataId?: string;
calendarFieldMetadataId?: string;
calendarLayout?: string;
fields?: {
universalIdentifier: string;
fieldMetadataId: string;
position: number;
isVisible: boolean;
size: number;
aggregateOperation?: AggregateOperations;
}[];
filters?: {
universalIdentifier: string;
fieldMetadataId: string;
displayValue: string;
operand: ViewFilterOperand;
value: string;
}[];
groups?: {
universalIdentifier: string;
fieldMetadataId: string;
isVisible: boolean;
fieldValue: string;
position: number;
}[];
}
@@ -1,160 +0,0 @@
import { msg } from '@lingui/core/macro';
import { STANDARD_OBJECT_IDS } from 'twenty-shared/metadata';
import { v4 } from 'uuid';
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 { 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 { STANDARD_OBJECTS } from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-object.constant';
import {
BASE_OBJECT_STANDARD_FIELD_IDS,
CALENDAR_EVENT_STANDARD_FIELD_IDS,
} from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
export const calendarEventsAllView = ({
objectMetadataItems,
twentyStandardFlatApplication,
useCoreNaming,
}: {
objectMetadataItems: ObjectMetadataEntity[];
useCoreNaming?: boolean;
twentyStandardFlatApplication: FlatApplication;
}): ViewDefinition => {
const calendarEventObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.calendarEvent,
);
if (!calendarEventObjectMetadata) {
throw new Error('CalendarEvent object metadata not found');
}
const viewUniversalIdentifier =
STANDARD_OBJECTS.calendarEvent.views.allCalendarEvents.universalIdentifier;
return {
id: v4(),
universalIdentifier: viewUniversalIdentifier,
applicationId: twentyStandardFlatApplication.id,
name: useCoreNaming ? msg`All {objectLabelPlural}` : 'All Calendar Events',
objectMetadataId: calendarEventObjectMetadata.id ?? '',
type: 'calendar',
key: 'INDEX',
position: 0,
icon: 'IconCalendar',
calendarFieldMetadataId:
calendarEventObjectMetadata.fields.find(
(field) =>
field.standardId === CALENDAR_EVENT_STANDARD_FIELD_IDS.startsAt,
)?.id ?? '',
calendarLayout: 'MONTH',
filters: [],
fields: [
{
fieldMetadataId:
calendarEventObjectMetadata.fields.find(
(field) =>
field.standardId === CALENDAR_EVENT_STANDARD_FIELD_IDS.title,
)?.id ?? '',
position: 0,
isVisible: true,
size: DEFAULT_VIEW_FIELD_SIZE,
universalIdentifier:
STANDARD_OBJECTS.calendarEvent.views.allCalendarEvents.viewFields
.title.universalIdentifier,
},
{
fieldMetadataId:
calendarEventObjectMetadata.fields.find(
(field) =>
field.standardId === CALENDAR_EVENT_STANDARD_FIELD_IDS.startsAt,
)?.id ?? '',
position: 1,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.calendarEvent.views.allCalendarEvents.viewFields
.startsAt.universalIdentifier,
},
{
fieldMetadataId:
calendarEventObjectMetadata.fields.find(
(field) =>
field.standardId === CALENDAR_EVENT_STANDARD_FIELD_IDS.endsAt,
)?.id ?? '',
position: 2,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.calendarEvent.views.allCalendarEvents.viewFields
.endsAt.universalIdentifier,
},
{
fieldMetadataId:
calendarEventObjectMetadata.fields.find(
(field) =>
field.standardId === CALENDAR_EVENT_STANDARD_FIELD_IDS.isFullDay,
)?.id ?? '',
position: 3,
isVisible: true,
size: 100,
universalIdentifier:
STANDARD_OBJECTS.calendarEvent.views.allCalendarEvents.viewFields
.isFullDay.universalIdentifier,
},
{
fieldMetadataId:
calendarEventObjectMetadata.fields.find(
(field) =>
field.standardId === CALENDAR_EVENT_STANDARD_FIELD_IDS.location,
)?.id ?? '',
position: 4,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.calendarEvent.views.allCalendarEvents.viewFields
.location.universalIdentifier,
},
{
fieldMetadataId:
calendarEventObjectMetadata.fields.find(
(field) =>
field.standardId ===
CALENDAR_EVENT_STANDARD_FIELD_IDS.conferenceLink,
)?.id ?? '',
position: 5,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.calendarEvent.views.allCalendarEvents.viewFields
.conferenceLink.universalIdentifier,
},
{
fieldMetadataId:
calendarEventObjectMetadata.fields.find(
(field) =>
field.standardId === CALENDAR_EVENT_STANDARD_FIELD_IDS.isCanceled,
)?.id ?? '',
position: 6,
isVisible: true,
size: 100,
universalIdentifier:
STANDARD_OBJECTS.calendarEvent.views.allCalendarEvents.viewFields
.isCanceled.universalIdentifier,
},
{
fieldMetadataId:
calendarEventObjectMetadata.fields.find(
(field) =>
field.standardId === BASE_OBJECT_STANDARD_FIELD_IDS.createdAt,
)?.id ?? '',
position: 7,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.calendarEvent.views.allCalendarEvents.viewFields
.createdAt.universalIdentifier,
},
],
};
};
@@ -1,156 +0,0 @@
import { msg } from '@lingui/core/macro';
import { STANDARD_OBJECT_IDS } from 'twenty-shared/metadata';
import { v4 } from 'uuid';
import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.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 { 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 { STANDARD_OBJECTS } from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-object.constant';
import {
BASE_OBJECT_STANDARD_FIELD_IDS,
COMPANY_STANDARD_FIELD_IDS,
} from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
export const companiesAllView = ({
objectMetadataItems,
useCoreNaming = false,
twentyStandardFlatApplication,
}: {
objectMetadataItems: ObjectMetadataEntity[];
useCoreNaming?: boolean;
twentyStandardFlatApplication: FlatApplication;
}): ViewDefinition => {
const companyObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.company,
);
if (!companyObjectMetadata) {
throw new Error('Company object metadata not found');
}
const viewUniversalIdentifier =
STANDARD_OBJECTS.company.views.allCompanies.universalIdentifier;
return {
id: v4(),
universalIdentifier: viewUniversalIdentifier,
applicationId: twentyStandardFlatApplication.id,
name: useCoreNaming ? msg`All {objectLabelPlural}` : 'All Companies',
objectMetadataId: companyObjectMetadata.id ?? '',
type: 'table',
key: 'INDEX',
position: 0,
icon: 'IconList',
filters: [],
fields: [
{
fieldMetadataId:
companyObjectMetadata.fields.find(
(field) => field.standardId === COMPANY_STANDARD_FIELD_IDS.name,
)?.id ?? '',
position: 0,
isVisible: true,
size: DEFAULT_VIEW_FIELD_SIZE,
universalIdentifier:
STANDARD_OBJECTS.company.views.allCompanies.viewFields.name
.universalIdentifier,
},
{
fieldMetadataId:
companyObjectMetadata.fields.find(
(field) =>
field.standardId === COMPANY_STANDARD_FIELD_IDS.domainName,
)?.id ?? '',
position: 1,
isVisible: true,
size: 100,
aggregateOperation: AggregateOperations.COUNT,
universalIdentifier:
STANDARD_OBJECTS.company.views.allCompanies.viewFields.domainName
.universalIdentifier,
},
{
fieldMetadataId:
companyObjectMetadata.fields.find(
(field) =>
field.standardId === COMPANY_STANDARD_FIELD_IDS.createdBy,
)?.id ?? '',
position: 2,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.company.views.allCompanies.viewFields.createdBy
.universalIdentifier,
},
{
fieldMetadataId:
companyObjectMetadata.fields.find(
(field) =>
field.standardId === COMPANY_STANDARD_FIELD_IDS.accountOwner,
)?.id ?? '',
position: 3,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.company.views.allCompanies.viewFields.accountOwner
.universalIdentifier,
},
{
fieldMetadataId:
companyObjectMetadata.fields.find(
(field) =>
field.standardId === BASE_OBJECT_STANDARD_FIELD_IDS.createdAt,
)?.id ?? '',
position: 4,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.company.views.allCompanies.viewFields.createdAt
.universalIdentifier,
},
{
fieldMetadataId:
companyObjectMetadata.fields.find(
(field) =>
field.standardId === COMPANY_STANDARD_FIELD_IDS.employees,
)?.id ?? '',
position: 5,
isVisible: true,
size: 150,
aggregateOperation: AggregateOperations.MAX,
universalIdentifier:
STANDARD_OBJECTS.company.views.allCompanies.viewFields.employees
.universalIdentifier,
},
{
fieldMetadataId:
companyObjectMetadata.fields.find(
(field) =>
field.standardId === COMPANY_STANDARD_FIELD_IDS.linkedinLink,
)?.id ?? '',
position: 6,
isVisible: true,
size: 170,
aggregateOperation: AggregateOperations.PERCENTAGE_EMPTY,
universalIdentifier:
STANDARD_OBJECTS.company.views.allCompanies.viewFields.linkedinLink
.universalIdentifier,
},
{
fieldMetadataId:
companyObjectMetadata.fields.find(
(field) => field.standardId === COMPANY_STANDARD_FIELD_IDS.address,
)?.id ?? '',
position: 7,
isVisible: true,
size: 170,
aggregateOperation: AggregateOperations.COUNT_NOT_EMPTY,
universalIdentifier:
STANDARD_OBJECTS.company.views.allCompanies.viewFields.address
.universalIdentifier,
},
],
};
};
@@ -1 +0,0 @@
export const DEFAULT_VIEW_FIELD_SIZE = 180;
@@ -1,101 +0,0 @@
import { msg } from '@lingui/core/macro';
import { STANDARD_OBJECT_IDS } from 'twenty-shared/metadata';
import { v4 } from 'uuid';
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 { STANDARD_OBJECTS } from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-object.constant';
import {
BASE_OBJECT_STANDARD_FIELD_IDS,
DASHBOARD_STANDARD_FIELD_IDS,
} from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
export const dashboardsAllView = ({
objectMetadataItems,
useCoreNaming = false,
twentyStandardFlatApplication,
}: {
objectMetadataItems: ObjectMetadataEntity[];
useCoreNaming?: boolean;
twentyStandardFlatApplication: FlatApplication;
}): ViewDefinition => {
const dashboardObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.dashboard,
);
if (!dashboardObjectMetadata) {
throw new Error('Dashboard object metadata not found');
}
const viewUniversalIdentifier =
STANDARD_OBJECTS.dashboard.views.allDashboards.universalIdentifier;
return {
id: v4(),
universalIdentifier: viewUniversalIdentifier,
applicationId: twentyStandardFlatApplication.id,
name: useCoreNaming ? msg`All {objectLabelPlural}` : 'All Dashboards',
objectMetadataId: dashboardObjectMetadata.id ?? '',
type: 'table',
key: 'INDEX',
position: 0,
icon: 'IconLayoutDashboard',
openRecordIn: ViewOpenRecordInType.RECORD_PAGE,
filters: [],
fields: [
{
fieldMetadataId:
dashboardObjectMetadata.fields.find(
(field) => field.standardId === DASHBOARD_STANDARD_FIELD_IDS.title,
)?.id ?? '',
position: 0,
isVisible: true,
size: 200,
universalIdentifier:
STANDARD_OBJECTS.dashboard.views.allDashboards.viewFields.title
.universalIdentifier,
},
{
fieldMetadataId:
dashboardObjectMetadata.fields.find(
(field) =>
field.standardId === DASHBOARD_STANDARD_FIELD_IDS.createdBy,
)?.id ?? '',
position: 1,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.dashboard.views.allDashboards.viewFields.createdBy
.universalIdentifier,
},
{
fieldMetadataId:
dashboardObjectMetadata.fields.find(
(field) =>
field.standardId === BASE_OBJECT_STANDARD_FIELD_IDS.createdAt,
)?.id ?? '',
position: 2,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.dashboard.views.allDashboards.viewFields.createdAt
.universalIdentifier,
},
{
fieldMetadataId:
dashboardObjectMetadata.fields.find(
(field) =>
field.standardId === BASE_OBJECT_STANDARD_FIELD_IDS.updatedAt,
)?.id ?? '',
position: 3,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.dashboard.views.allDashboards.viewFields.updatedAt
.universalIdentifier,
},
],
};
};
@@ -1,75 +0,0 @@
import { msg } from '@lingui/core/macro';
import { STANDARD_OBJECT_IDS } from 'twenty-shared/metadata';
import { v4 } from 'uuid';
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 { 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 { STANDARD_OBJECTS } from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-object.constant';
import {
BASE_OBJECT_STANDARD_FIELD_IDS,
MESSAGE_THREAD_STANDARD_FIELD_IDS,
} from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
export const messageThreadsAllView = ({
objectMetadataItems,
twentyStandardFlatApplication,
useCoreNaming,
}: {
objectMetadataItems: ObjectMetadataEntity[];
useCoreNaming?: boolean;
twentyStandardFlatApplication: FlatApplication;
}): ViewDefinition => {
const messageThreadObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.messageThread,
);
if (!messageThreadObjectMetadata) {
throw new Error('MessageThread object metadata not found');
}
const viewUniversalIdentifier =
STANDARD_OBJECTS.messageThread.views.allMessageThreads.universalIdentifier;
return {
id: v4(),
universalIdentifier: viewUniversalIdentifier,
applicationId: twentyStandardFlatApplication.id,
name: useCoreNaming ? msg`All {objectLabelPlural}` : 'All Message Threads',
objectMetadataId: messageThreadObjectMetadata.id ?? '',
type: 'table',
key: 'INDEX',
position: 0,
icon: 'IconList',
filters: [],
fields: [
{
fieldMetadataId:
messageThreadObjectMetadata.fields.find(
(field) =>
field.standardId === MESSAGE_THREAD_STANDARD_FIELD_IDS.messages,
)?.id ?? '',
position: 0,
isVisible: true,
size: DEFAULT_VIEW_FIELD_SIZE,
universalIdentifier:
STANDARD_OBJECTS.messageThread.views.allMessageThreads.viewFields
.messages.universalIdentifier,
},
{
fieldMetadataId:
messageThreadObjectMetadata.fields.find(
(field) =>
field.standardId === BASE_OBJECT_STANDARD_FIELD_IDS.createdAt,
)?.id ?? '',
position: 1,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.messageThread.views.allMessageThreads.viewFields
.createdAt.universalIdentifier,
},
],
};
};
@@ -1,139 +0,0 @@
import { msg } from '@lingui/core/macro';
import { STANDARD_OBJECT_IDS } from 'twenty-shared/metadata';
import { v4 } from 'uuid';
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 { 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 { STANDARD_OBJECTS } from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-object.constant';
import {
BASE_OBJECT_STANDARD_FIELD_IDS,
MESSAGE_STANDARD_FIELD_IDS,
} from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
export const messagesAllView = ({
objectMetadataItems,
twentyStandardFlatApplication,
useCoreNaming,
}: {
objectMetadataItems: ObjectMetadataEntity[];
useCoreNaming?: boolean;
twentyStandardFlatApplication: FlatApplication;
}): ViewDefinition => {
const messageObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.message,
);
if (!messageObjectMetadata) {
throw new Error('Message object metadata not found');
}
const viewUniversalIdentifier =
STANDARD_OBJECTS.message.views.allMessages.universalIdentifier;
return {
id: v4(),
universalIdentifier: viewUniversalIdentifier,
applicationId: twentyStandardFlatApplication.id,
name: useCoreNaming ? msg`All {objectLabelPlural}` : 'All Messages',
objectMetadataId: messageObjectMetadata.id ?? '',
type: 'table',
key: 'INDEX',
position: 0,
icon: 'IconList',
filters: [],
fields: [
{
fieldMetadataId:
messageObjectMetadata.fields.find(
(field) => field.standardId === MESSAGE_STANDARD_FIELD_IDS.subject,
)?.id ?? '',
position: 0,
isVisible: true,
size: DEFAULT_VIEW_FIELD_SIZE,
universalIdentifier:
STANDARD_OBJECTS.message.views.allMessages.viewFields.subject
.universalIdentifier,
},
{
fieldMetadataId:
messageObjectMetadata.fields.find(
(field) =>
field.standardId === MESSAGE_STANDARD_FIELD_IDS.messageThread,
)?.id ?? '',
position: 1,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.message.views.allMessages.viewFields.messageThread
.universalIdentifier,
},
{
fieldMetadataId:
messageObjectMetadata.fields.find(
(field) =>
field.standardId ===
MESSAGE_STANDARD_FIELD_IDS.messageParticipants,
)?.id ?? '',
position: 2,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.message.views.allMessages.viewFields
.messageParticipants.universalIdentifier,
},
{
fieldMetadataId:
messageObjectMetadata.fields.find(
(field) =>
field.standardId === MESSAGE_STANDARD_FIELD_IDS.receivedAt,
)?.id ?? '',
position: 3,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.message.views.allMessages.viewFields.receivedAt
.universalIdentifier,
},
{
fieldMetadataId:
messageObjectMetadata.fields.find(
(field) =>
field.standardId === MESSAGE_STANDARD_FIELD_IDS.headerMessageId,
)?.id ?? '',
position: 4,
isVisible: true,
size: 180,
universalIdentifier:
STANDARD_OBJECTS.message.views.allMessages.viewFields.headerMessageId
.universalIdentifier,
},
{
fieldMetadataId:
messageObjectMetadata.fields.find(
(field) => field.standardId === MESSAGE_STANDARD_FIELD_IDS.text,
)?.id ?? '',
position: 5,
isVisible: true,
size: 200,
universalIdentifier:
STANDARD_OBJECTS.message.views.allMessages.viewFields.text
.universalIdentifier,
},
{
fieldMetadataId:
messageObjectMetadata.fields.find(
(field) =>
field.standardId === BASE_OBJECT_STANDARD_FIELD_IDS.createdAt,
)?.id ?? '',
position: 6,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.message.views.allMessages.viewFields.createdAt
.universalIdentifier,
},
],
};
};
@@ -1,119 +0,0 @@
import { msg } from '@lingui/core/macro';
import { STANDARD_OBJECT_IDS } from 'twenty-shared/metadata';
import { v4 } from 'uuid';
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 { type ViewDefinition } from 'src/engine/workspace-manager/standard-objects-prefill-data/types/view-definition.interface';
import { STANDARD_OBJECTS } from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-object.constant';
import {
BASE_OBJECT_STANDARD_FIELD_IDS,
NOTE_STANDARD_FIELD_IDS,
} from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
export const notesAllView = ({
objectMetadataItems,
useCoreNaming = false,
twentyStandardFlatApplication,
}: {
objectMetadataItems: ObjectMetadataEntity[];
useCoreNaming?: boolean;
twentyStandardFlatApplication: FlatApplication;
}): ViewDefinition => {
const noteObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.note,
);
if (!noteObjectMetadata) {
throw new Error('Note object metadata not found');
}
const viewUniversalIdentifier =
STANDARD_OBJECTS.note.views.allNotes.universalIdentifier;
return {
id: v4(),
universalIdentifier: viewUniversalIdentifier,
applicationId: twentyStandardFlatApplication.id,
name: useCoreNaming ? msg`All {objectLabelPlural}` : 'All Notes',
objectMetadataId: noteObjectMetadata.id,
type: 'table',
key: 'INDEX',
position: 0,
icon: 'IconNotes',
filters: [],
fields: [
{
fieldMetadataId:
noteObjectMetadata.fields.find(
(field) => field.standardId === NOTE_STANDARD_FIELD_IDS.title,
)?.id ?? '',
position: 0,
isVisible: true,
size: 210,
universalIdentifier:
STANDARD_OBJECTS.note.views.allNotes.viewFields.title
.universalIdentifier,
},
{
fieldMetadataId:
noteObjectMetadata.fields.find(
(field) => field.standardId === NOTE_STANDARD_FIELD_IDS.noteTargets,
)?.id ?? '',
position: 1,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.note.views.allNotes.viewFields.noteTargets
.universalIdentifier,
},
{
fieldMetadataId:
noteObjectMetadata.fields.find(
(field) => field.standardId === NOTE_STANDARD_FIELD_IDS.bodyV2,
)?.id ?? '',
position: 2,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.note.views.allNotes.viewFields.bodyV2
.universalIdentifier,
},
{
fieldMetadataId:
noteObjectMetadata.fields.find(
(field) => field.standardId === NOTE_STANDARD_FIELD_IDS.createdBy,
)?.id ?? '',
position: 3,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.note.views.allNotes.viewFields.createdBy
.universalIdentifier,
},
{
fieldMetadataId:
noteObjectMetadata.fields.find(
(field) =>
field.standardId === BASE_OBJECT_STANDARD_FIELD_IDS.createdAt,
)?.id ?? '',
position: 4,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.note.views.allNotes.viewFields.createdAt
.universalIdentifier,
},
/*
TODO: Add later, since we don't have real-time it probably doesn't work well?
{
fieldMetadataId:
objectMetadataMap[STANDARD_OBJECT_IDS.note].fields[.updatedAt
],
position: 0,
isVisible: true,
size: 210},
*/
],
};
};
@@ -1,126 +0,0 @@
import { msg } from '@lingui/core/macro';
import { STANDARD_OBJECT_IDS } from 'twenty-shared/metadata';
import { v4 } from 'uuid';
import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.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 { type ViewDefinition } from 'src/engine/workspace-manager/standard-objects-prefill-data/types/view-definition.interface';
import { STANDARD_OBJECTS } from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-object.constant';
import { OPPORTUNITY_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
export const opportunitiesAllView = ({
objectMetadataItems,
useCoreNaming = false,
twentyStandardFlatApplication,
}: {
objectMetadataItems: ObjectMetadataEntity[];
useCoreNaming?: boolean;
twentyStandardFlatApplication: FlatApplication;
}): ViewDefinition => {
const opportunityObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.opportunity,
);
if (!opportunityObjectMetadata) {
throw new Error('Opportunity object metadata not found');
}
const viewUniversalIdentifier =
STANDARD_OBJECTS.opportunity.views.allOpportunities.universalIdentifier;
return {
id: v4(),
universalIdentifier: viewUniversalIdentifier,
applicationId: twentyStandardFlatApplication.id,
name: useCoreNaming ? msg`All {objectLabelPlural}` : 'All Opportunities',
objectMetadataId: opportunityObjectMetadata.id,
type: 'table',
key: 'INDEX',
position: 0,
icon: 'IconList',
filters: [],
fields: [
{
fieldMetadataId:
opportunityObjectMetadata.fields.find(
(field) => field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.name,
)?.id ?? '',
position: 0,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.opportunity.views.allOpportunities.viewFields.name
.universalIdentifier,
},
{
fieldMetadataId:
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.amount,
)?.id ?? '',
position: 1,
isVisible: true,
size: 150,
aggregateOperation: AggregateOperations.AVG,
universalIdentifier:
STANDARD_OBJECTS.opportunity.views.allOpportunities.viewFields.amount
.universalIdentifier,
},
{
fieldMetadataId:
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.createdBy,
)?.id ?? '',
position: 2,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.opportunity.views.allOpportunities.viewFields
.createdBy.universalIdentifier,
},
{
fieldMetadataId:
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.closeDate,
)?.id ?? '',
position: 3,
isVisible: true,
size: 150,
aggregateOperation: AggregateOperations.MIN,
universalIdentifier:
STANDARD_OBJECTS.opportunity.views.allOpportunities.viewFields
.closeDate.universalIdentifier,
},
{
fieldMetadataId:
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.company,
)?.id ?? '',
position: 4,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.opportunity.views.allOpportunities.viewFields.company
.universalIdentifier,
},
{
fieldMetadataId:
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId ===
OPPORTUNITY_STANDARD_FIELD_IDS.pointOfContact,
)?.id ?? '',
position: 5,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.opportunity.views.allOpportunities.viewFields
.pointOfContact.universalIdentifier,
},
],
};
};
@@ -1,202 +0,0 @@
import { msg } from '@lingui/core/macro';
import { STANDARD_OBJECT_IDS } from 'twenty-shared/metadata';
import { v4 } from 'uuid';
import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.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 { type ViewDefinition } from 'src/engine/workspace-manager/standard-objects-prefill-data/types/view-definition.interface';
import { STANDARD_OBJECTS } from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-object.constant';
import { OPPORTUNITY_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
export const opportunitiesByStageView = ({
objectMetadataItems,
useCoreNaming = false,
twentyStandardFlatApplication,
}: {
objectMetadataItems: ObjectMetadataEntity[];
useCoreNaming?: boolean;
twentyStandardFlatApplication: FlatApplication;
}): ViewDefinition => {
const opportunityObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.opportunity,
);
if (!opportunityObjectMetadata) {
throw new Error('Opportunity object metadata not found');
}
const viewUniversalIdentifier =
STANDARD_OBJECTS.opportunity.views.byStage.universalIdentifier;
const stageFieldMetadataId =
opportunityObjectMetadata.fields.find(
(field) => field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.stage,
)?.id ?? '';
return {
id: v4(),
universalIdentifier: viewUniversalIdentifier,
applicationId: twentyStandardFlatApplication.id,
name: useCoreNaming ? msg`By Stage` : 'By Stage',
objectMetadataId: opportunityObjectMetadata.id,
type: 'kanban',
key: null,
position: 2,
icon: 'IconLayoutKanban',
kanbanAggregateOperation: AggregateOperations.SUM,
kanbanAggregateOperationFieldMetadataId:
opportunityObjectMetadata.fields.find(
(field) => field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.amount,
)?.id ?? '',
filters: [],
mainGroupByFieldMetadataId: stageFieldMetadataId,
fields: [
{
fieldMetadataId:
opportunityObjectMetadata.fields.find(
(field) => field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.name,
)?.id ?? '',
position: 0,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.opportunity.views.byStage.viewFields.name
.universalIdentifier,
},
{
fieldMetadataId:
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.amount,
)?.id ?? '',
position: 1,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.opportunity.views.byStage.viewFields.amount
.universalIdentifier,
},
{
fieldMetadataId:
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.createdBy,
)?.id ?? '',
position: 2,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.opportunity.views.byStage.viewFields.createdBy
.universalIdentifier,
},
{
fieldMetadataId:
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.closeDate,
)?.id ?? '',
position: 3,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.opportunity.views.byStage.viewFields.closeDate
.universalIdentifier,
},
{
fieldMetadataId:
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.company,
)?.id ?? '',
position: 4,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.opportunity.views.byStage.viewFields.company
.universalIdentifier,
},
{
fieldMetadataId:
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId ===
OPPORTUNITY_STANDARD_FIELD_IDS.pointOfContact,
)?.id ?? '',
position: 5,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.opportunity.views.byStage.viewFields.pointOfContact
.universalIdentifier,
},
],
groups: [
{
fieldMetadataId:
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.stage,
)?.id ?? '',
isVisible: true,
fieldValue: 'NEW',
position: 0,
universalIdentifier:
STANDARD_OBJECTS.opportunity.views.byStage.viewGroups!.new
.universalIdentifier,
},
{
fieldMetadataId:
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.stage,
)?.id ?? '',
isVisible: true,
fieldValue: 'SCREENING',
position: 1,
universalIdentifier:
STANDARD_OBJECTS.opportunity.views.byStage.viewGroups!.screening
.universalIdentifier,
},
{
fieldMetadataId:
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.stage,
)?.id ?? '',
isVisible: true,
fieldValue: 'MEETING',
position: 2,
universalIdentifier:
STANDARD_OBJECTS.opportunity.views.byStage.viewGroups!.meeting
.universalIdentifier,
},
{
fieldMetadataId:
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.stage,
)?.id ?? '',
isVisible: true,
fieldValue: 'PROPOSAL',
position: 3,
universalIdentifier:
STANDARD_OBJECTS.opportunity.views.byStage.viewGroups!.proposal
.universalIdentifier,
},
{
fieldMetadataId:
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.stage,
)?.id ?? '',
isVisible: true,
fieldValue: 'CUSTOMER',
position: 4,
universalIdentifier:
STANDARD_OBJECTS.opportunity.views.byStage.viewGroups!.customer
.universalIdentifier,
},
],
};
};
@@ -1,174 +0,0 @@
import { msg } from '@lingui/core/macro';
import { STANDARD_OBJECT_IDS } from 'twenty-shared/metadata';
import { v4 } from 'uuid';
import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.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 { type ViewDefinition } from 'src/engine/workspace-manager/standard-objects-prefill-data/types/view-definition.interface';
import { STANDARD_OBJECTS } from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-object.constant';
import {
BASE_OBJECT_STANDARD_FIELD_IDS,
PERSON_STANDARD_FIELD_IDS,
} from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
export const peopleAllView = ({
objectMetadataItems,
useCoreNaming = false,
twentyStandardFlatApplication,
}: {
objectMetadataItems: ObjectMetadataEntity[];
useCoreNaming?: boolean;
twentyStandardFlatApplication: FlatApplication;
}): ViewDefinition => {
const personObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.person,
);
if (!personObjectMetadata) {
throw new Error('Person object metadata not found');
}
const viewUniversalIdentifier =
STANDARD_OBJECTS.person.views.allPeople.universalIdentifier;
return {
id: v4(),
universalIdentifier: viewUniversalIdentifier,
applicationId: twentyStandardFlatApplication.id,
name: useCoreNaming ? msg`All {objectLabelPlural}` : 'All People',
objectMetadataId: personObjectMetadata.id,
type: 'table',
key: 'INDEX',
position: 0,
icon: 'IconList',
filters: [],
fields: [
{
fieldMetadataId:
personObjectMetadata.fields.find(
(field) => field.standardId === PERSON_STANDARD_FIELD_IDS.name,
)?.id ?? '',
position: 0,
isVisible: true,
size: 210,
universalIdentifier:
STANDARD_OBJECTS.person.views.allPeople.viewFields.name
.universalIdentifier,
},
{
fieldMetadataId:
personObjectMetadata.fields.find(
(field) => field.standardId === PERSON_STANDARD_FIELD_IDS.emails,
)?.id ?? '',
position: 1,
isVisible: true,
size: 150,
aggregateOperation: AggregateOperations.COUNT_UNIQUE_VALUES,
universalIdentifier:
STANDARD_OBJECTS.person.views.allPeople.viewFields.emails
.universalIdentifier,
},
{
fieldMetadataId:
personObjectMetadata.fields.find(
(field) => field.standardId === PERSON_STANDARD_FIELD_IDS.createdBy,
)?.id ?? '',
position: 2,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.person.views.allPeople.viewFields.createdBy
.universalIdentifier,
},
{
fieldMetadataId:
personObjectMetadata.fields.find(
(field) => field.standardId === PERSON_STANDARD_FIELD_IDS.company,
)?.id ?? '',
position: 3,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.person.views.allPeople.viewFields.company
.universalIdentifier,
},
{
fieldMetadataId:
personObjectMetadata.fields.find(
(field) => field.standardId === PERSON_STANDARD_FIELD_IDS.phones,
)?.id ?? '',
position: 4,
isVisible: true,
size: 150,
aggregateOperation: AggregateOperations.PERCENTAGE_EMPTY,
universalIdentifier:
STANDARD_OBJECTS.person.views.allPeople.viewFields.phones
.universalIdentifier,
},
{
fieldMetadataId:
personObjectMetadata.fields.find(
(field) =>
field.standardId === BASE_OBJECT_STANDARD_FIELD_IDS.createdAt,
)?.id ?? '',
position: 5,
isVisible: true,
size: 150,
aggregateOperation: AggregateOperations.MIN,
universalIdentifier:
STANDARD_OBJECTS.person.views.allPeople.viewFields.createdAt
.universalIdentifier,
},
{
fieldMetadataId:
personObjectMetadata.fields.find(
(field) => field.standardId === PERSON_STANDARD_FIELD_IDS.city,
)?.id ?? '',
position: 6,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.person.views.allPeople.viewFields.city
.universalIdentifier,
},
{
fieldMetadataId:
personObjectMetadata.fields.find(
(field) => field.standardId === PERSON_STANDARD_FIELD_IDS.jobTitle,
)?.id ?? '',
position: 7,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.person.views.allPeople.viewFields.jobTitle
.universalIdentifier,
},
{
fieldMetadataId:
personObjectMetadata.fields.find(
(field) =>
field.standardId === PERSON_STANDARD_FIELD_IDS.linkedinLink,
)?.id ?? '',
position: 8,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.person.views.allPeople.viewFields.linkedinLink
.universalIdentifier,
},
{
fieldMetadataId:
personObjectMetadata.fields.find(
(field) => field.standardId === PERSON_STANDARD_FIELD_IDS.xLink,
)?.id ?? '',
position: 9,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.person.views.allPeople.viewFields.xLink
.universalIdentifier,
},
],
};
};
@@ -1,164 +0,0 @@
import { msg } from '@lingui/core/macro';
import { STANDARD_OBJECT_IDS } from 'twenty-shared/metadata';
import { v4 } from 'uuid';
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 { type ViewDefinition } from 'src/engine/workspace-manager/standard-objects-prefill-data/types/view-definition.interface';
import { STANDARD_OBJECTS } from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-object.constant';
import {
BASE_OBJECT_STANDARD_FIELD_IDS,
TASK_STANDARD_FIELD_IDS,
} from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
export const tasksAllView = ({
objectMetadataItems,
useCoreNaming = false,
twentyStandardFlatApplication,
}: {
objectMetadataItems: ObjectMetadataEntity[];
useCoreNaming?: boolean;
twentyStandardFlatApplication: FlatApplication;
}): ViewDefinition => {
const taskObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.task,
);
if (!taskObjectMetadata) {
throw new Error('Task object metadata not found');
}
const viewUniversalIdentifier =
STANDARD_OBJECTS.task.views.allTasks.universalIdentifier;
return {
id: v4(),
universalIdentifier: viewUniversalIdentifier,
applicationId: twentyStandardFlatApplication.id,
name: useCoreNaming ? msg`All {objectLabelPlural}` : 'All Tasks',
objectMetadataId: taskObjectMetadata.id,
type: 'table',
key: 'INDEX',
position: 0,
icon: 'IconList',
filters: [] /* [
{
fieldMetadataId:
objectMetadataMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.type
],
displayValue: 'Task',
operand: 'is',
value: '["TASK"]'},
],*/,
fields: [
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.title,
)?.id ?? '',
position: 0,
isVisible: true,
size: 210,
universalIdentifier:
STANDARD_OBJECTS.task.views.allTasks.viewFields.title
.universalIdentifier,
},
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.status,
)?.id ?? '',
position: 2,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.task.views.allTasks.viewFields.status
.universalIdentifier,
},
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.taskTargets,
)?.id ?? '',
position: 3,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.task.views.allTasks.viewFields.taskTargets
.universalIdentifier,
},
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.createdBy,
)?.id ?? '',
position: 4,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.task.views.allTasks.viewFields.createdBy
.universalIdentifier,
},
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.dueAt,
)?.id ?? '',
position: 5,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.task.views.allTasks.viewFields.dueAt
.universalIdentifier,
},
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.assignee,
)?.id ?? '',
position: 6,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.task.views.allTasks.viewFields.assignee
.universalIdentifier,
},
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.bodyV2,
)?.id ?? '',
position: 7,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.task.views.allTasks.viewFields.bodyV2
.universalIdentifier,
},
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) =>
field.standardId === BASE_OBJECT_STANDARD_FIELD_IDS.createdAt,
)?.id ?? '',
position: 8,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.task.views.allTasks.viewFields.createdAt
.universalIdentifier,
},
/*
TODO: Add later, since we don't have real-time it probably doesn't work well?
{
fieldMetadataId:
objectMetadataMap[STANDARD_OBJECT_IDS.task].fields[.updatedAt
],
position: 0,
isVisible: true,
size: 210},
*/
],
};
};
@@ -1,212 +0,0 @@
import { msg } from '@lingui/core/macro';
import { STANDARD_OBJECT_IDS } from 'twenty-shared/metadata';
import { ViewFilterOperand } from 'twenty-shared/types';
import { v4 } from 'uuid';
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 { type ViewDefinition } from 'src/engine/workspace-manager/standard-objects-prefill-data/types/view-definition.interface';
import { STANDARD_OBJECTS } from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-object.constant';
import {
BASE_OBJECT_STANDARD_FIELD_IDS,
TASK_STANDARD_FIELD_IDS,
} from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
export const tasksAssignedToMeView = ({
objectMetadataItems,
useCoreNaming = false,
twentyStandardFlatApplication,
}: {
objectMetadataItems: ObjectMetadataEntity[];
useCoreNaming?: boolean;
twentyStandardFlatApplication: FlatApplication;
}): ViewDefinition => {
const taskObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.task,
);
if (!taskObjectMetadata) {
throw new Error('Task object metadata not found');
}
const viewUniversalIdentifier =
STANDARD_OBJECTS.task.views.assignedToMe.universalIdentifier;
return {
id: v4(),
universalIdentifier: viewUniversalIdentifier,
applicationId: twentyStandardFlatApplication.id,
name: useCoreNaming ? msg`Assigned to Me` : 'Assigned to Me',
objectMetadataId: taskObjectMetadata.id,
type: 'table',
key: null,
position: 2,
icon: 'IconUserCircle',
mainGroupByFieldMetadataId:
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.status,
)?.id ?? '',
filters: [
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.assignee,
)?.id ?? '',
displayValue: 'Me',
operand: ViewFilterOperand.IS,
value: JSON.stringify({
isCurrentWorkspaceMemberSelected: true,
selectedRecordIds: [],
}),
universalIdentifier:
STANDARD_OBJECTS.task.views.assignedToMe.viewFilters!.assigneeIsMe
.universalIdentifier,
},
],
fields: [
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.title,
)?.id ?? '',
position: 0,
isVisible: true,
size: 210,
universalIdentifier:
STANDARD_OBJECTS.task.views.assignedToMe.viewFields.title
.universalIdentifier,
},
/*{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.status
],
position: 2,
isVisible: true,
size: 150},*/
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.taskTargets,
)?.id ?? '',
position: 3,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.task.views.assignedToMe.viewFields.taskTargets
.universalIdentifier,
},
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.createdBy,
)?.id ?? '',
position: 4,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.task.views.assignedToMe.viewFields.createdBy
.universalIdentifier,
},
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.dueAt,
)?.id ?? '',
position: 5,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.task.views.assignedToMe.viewFields.dueAt
.universalIdentifier,
},
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.assignee,
)?.id ?? '',
position: 6,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.task.views.assignedToMe.viewFields.assignee
.universalIdentifier,
},
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.bodyV2,
)?.id ?? '',
position: 7,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.task.views.assignedToMe.viewFields.bodyV2
.universalIdentifier,
},
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) =>
field.standardId === BASE_OBJECT_STANDARD_FIELD_IDS.createdAt,
)?.id ?? '',
position: 8,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.task.views.assignedToMe.viewFields.createdAt
.universalIdentifier,
},
],
groups: [
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.status,
)?.id ?? '',
isVisible: true,
fieldValue: 'TODO',
position: 0,
universalIdentifier:
STANDARD_OBJECTS.task.views.assignedToMe.viewGroups!.todo
.universalIdentifier,
},
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.status,
)?.id ?? '',
isVisible: true,
fieldValue: 'IN_PROGRESS',
position: 1,
universalIdentifier:
STANDARD_OBJECTS.task.views.assignedToMe.viewGroups!.inProgress
.universalIdentifier,
},
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.status,
)?.id ?? '',
isVisible: true,
fieldValue: 'DONE',
position: 2,
universalIdentifier:
STANDARD_OBJECTS.task.views.assignedToMe.viewGroups!.done
.universalIdentifier,
},
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.status,
)?.id ?? '',
isVisible: true,
fieldValue: '',
position: 3,
universalIdentifier:
STANDARD_OBJECTS.task.views.assignedToMe.viewGroups!.empty
.universalIdentifier,
},
],
};
};
@@ -1,170 +0,0 @@
import { msg } from '@lingui/core/macro';
import { STANDARD_OBJECT_IDS } from 'twenty-shared/metadata';
import { v4 } from 'uuid';
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 { type ViewDefinition } from 'src/engine/workspace-manager/standard-objects-prefill-data/types/view-definition.interface';
import { STANDARD_OBJECTS } from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-object.constant';
import {
BASE_OBJECT_STANDARD_FIELD_IDS,
TASK_STANDARD_FIELD_IDS,
} from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
export const tasksByStatusView = ({
objectMetadataItems,
useCoreNaming = false,
twentyStandardFlatApplication,
}: {
objectMetadataItems: ObjectMetadataEntity[];
useCoreNaming?: boolean;
twentyStandardFlatApplication: FlatApplication;
}): ViewDefinition => {
const taskObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.task,
);
if (!taskObjectMetadata) {
throw new Error('Task object metadata not found');
}
const viewUniversalIdentifier =
STANDARD_OBJECTS.task.views.byStatus.universalIdentifier;
return {
id: v4(),
universalIdentifier: viewUniversalIdentifier,
applicationId: twentyStandardFlatApplication.id,
name: useCoreNaming ? msg`By Status` : 'By Status',
objectMetadataId: taskObjectMetadata.id,
type: 'kanban',
key: null,
position: 1,
icon: 'IconLayoutKanban',
mainGroupByFieldMetadataId:
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.status,
)?.id ?? '',
filters: [] /* [
{
fieldMetadataId:
objectMetadataMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.type
],
displayValue: 'Task',
operand: 'is',
value: '["TASK"]'},
],*/,
fields: [
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.title,
)?.id ?? '',
position: 0,
isVisible: true,
size: 210,
universalIdentifier:
STANDARD_OBJECTS.task.views.byStatus.viewFields.title
.universalIdentifier,
},
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.status,
)?.id ?? '',
position: 2,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.task.views.byStatus.viewFields.status
.universalIdentifier,
},
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.dueAt,
)?.id ?? '',
position: 3,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.task.views.byStatus.viewFields.dueAt
.universalIdentifier,
},
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.assignee,
)?.id ?? '',
position: 4,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.task.views.byStatus.viewFields.assignee
.universalIdentifier,
},
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) =>
field.standardId === BASE_OBJECT_STANDARD_FIELD_IDS.createdAt,
)?.id ?? '',
position: 6,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.task.views.byStatus.viewFields.createdAt
.universalIdentifier,
},
/*
TODO: Add later, since we don't have real-time it probably doesn't work well?
{
fieldMetadataId:
objectMetadataMap[STANDARD_OBJECT_IDS.task].fields[.updatedAt
],
position: 0,
isVisible: true,
size: 210},
*/
],
groups: [
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.status,
)?.id ?? '',
isVisible: true,
fieldValue: 'TODO',
position: 0,
universalIdentifier:
STANDARD_OBJECTS.task.views.byStatus.viewGroups!.todo
.universalIdentifier,
},
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.status,
)?.id ?? '',
isVisible: true,
fieldValue: 'IN_PROGRESS',
position: 1,
universalIdentifier:
STANDARD_OBJECTS.task.views.byStatus.viewGroups!.inProgress
.universalIdentifier,
},
{
fieldMetadataId:
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.status,
)?.id ?? '',
isVisible: true,
fieldValue: 'DONE',
position: 2,
universalIdentifier:
STANDARD_OBJECTS.task.views.byStatus.viewGroups!.done
.universalIdentifier,
},
],
};
};
@@ -1,120 +0,0 @@
import { msg } from '@lingui/core/macro';
import { STANDARD_OBJECT_IDS } from 'twenty-shared/metadata';
import { v4 } from 'uuid';
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 { STANDARD_OBJECTS } from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-object.constant';
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,
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,
},
],
};
};
@@ -1,126 +0,0 @@
import { msg } from '@lingui/core/macro';
import { STANDARD_OBJECT_IDS } from 'twenty-shared/metadata';
import { v4 } from 'uuid';
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 { STANDARD_OBJECTS } from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-object.constant';
import { WORKFLOW_RUN_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
export const workflowRunsAllView = ({
objectMetadataItems,
useCoreNaming = false,
twentyStandardFlatApplication,
}: {
objectMetadataItems: ObjectMetadataEntity[];
useCoreNaming?: boolean;
twentyStandardFlatApplication: FlatApplication;
}): ViewDefinition => {
const workflowRunObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.workflowRun,
);
if (!workflowRunObjectMetadata) {
throw new Error('Workflow run object metadata not found');
}
const viewUniversalIdentifier =
STANDARD_OBJECTS.workflowRun.views.allWorkflowRuns.universalIdentifier;
return {
id: v4(),
universalIdentifier: viewUniversalIdentifier,
applicationId: twentyStandardFlatApplication.id,
name: useCoreNaming ? msg`All {objectLabelPlural}` : 'All Workflow Runs',
objectMetadataId: workflowRunObjectMetadata.id,
type: 'table',
key: 'INDEX',
position: 0,
icon: 'IconHistoryToggle',
openRecordIn: ViewOpenRecordInType.RECORD_PAGE,
filters: [],
fields: [
{
fieldMetadataId:
workflowRunObjectMetadata.fields.find(
(field) =>
field.standardId === WORKFLOW_RUN_STANDARD_FIELD_IDS.name,
)?.id ?? '',
position: 0,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.workflowRun.views.allWorkflowRuns.viewFields.name
.universalIdentifier,
},
{
fieldMetadataId:
workflowRunObjectMetadata.fields.find(
(field) =>
field.standardId === WORKFLOW_RUN_STANDARD_FIELD_IDS.workflow,
)?.id ?? '',
position: 1,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.workflowRun.views.allWorkflowRuns.viewFields.workflow
.universalIdentifier,
},
{
fieldMetadataId:
workflowRunObjectMetadata.fields.find(
(field) =>
field.standardId === WORKFLOW_RUN_STANDARD_FIELD_IDS.status,
)?.id ?? '',
position: 2,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.workflowRun.views.allWorkflowRuns.viewFields.status
.universalIdentifier,
},
{
fieldMetadataId:
workflowRunObjectMetadata.fields.find(
(field) =>
field.standardId === WORKFLOW_RUN_STANDARD_FIELD_IDS.startedAt,
)?.id ?? '',
position: 3,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.workflowRun.views.allWorkflowRuns.viewFields
.startedAt.universalIdentifier,
},
{
fieldMetadataId:
workflowRunObjectMetadata.fields.find(
(field) =>
field.standardId === WORKFLOW_RUN_STANDARD_FIELD_IDS.createdBy,
)?.id ?? '',
position: 4,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.workflowRun.views.allWorkflowRuns.viewFields
.createdBy.universalIdentifier,
},
{
fieldMetadataId:
workflowRunObjectMetadata.fields.find(
(field) =>
field.standardId ===
WORKFLOW_RUN_STANDARD_FIELD_IDS.workflowVersion,
)?.id ?? '',
position: 5,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.workflowRun.views.allWorkflowRuns.viewFields
.workflowVersion.universalIdentifier,
},
],
};
};
@@ -1,118 +0,0 @@
import { msg } from '@lingui/core/macro';
import { STANDARD_OBJECT_IDS } from 'twenty-shared/metadata';
import { v4 } from 'uuid';
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 { STANDARD_OBJECTS } from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-object.constant';
import {
BASE_OBJECT_STANDARD_FIELD_IDS,
WORKFLOW_VERSION_STANDARD_FIELD_IDS,
} from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
export const workflowVersionsAllView = ({
objectMetadataItems,
useCoreNaming = false,
twentyStandardFlatApplication,
}: {
objectMetadataItems: ObjectMetadataEntity[];
useCoreNaming?: boolean;
twentyStandardFlatApplication: FlatApplication;
}): ViewDefinition => {
const workflowVersionObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.workflowVersion,
);
if (!workflowVersionObjectMetadata) {
throw new Error('Workflow version object metadata not found');
}
const viewUniversalIdentifier =
STANDARD_OBJECTS.workflowVersion.views.allWorkflowVersions
.universalIdentifier;
return {
id: v4(),
universalIdentifier: viewUniversalIdentifier,
applicationId: twentyStandardFlatApplication.id,
name: useCoreNaming
? msg`All {objectLabelPlural}`
: 'All Workflow Versions',
objectMetadataId: workflowVersionObjectMetadata.id,
type: 'table',
key: 'INDEX',
position: 0,
icon: 'IconVersions',
openRecordIn: ViewOpenRecordInType.RECORD_PAGE,
filters: [],
fields: [
{
fieldMetadataId:
workflowVersionObjectMetadata.fields.find(
(field) =>
field.standardId === WORKFLOW_VERSION_STANDARD_FIELD_IDS.name,
)?.id ?? '',
position: 0,
isVisible: true,
size: 210,
universalIdentifier:
STANDARD_OBJECTS.workflowVersion.views.allWorkflowVersions.viewFields
.name.universalIdentifier,
},
{
fieldMetadataId:
workflowVersionObjectMetadata.fields.find(
(field) =>
field.standardId === WORKFLOW_VERSION_STANDARD_FIELD_IDS.workflow,
)?.id ?? '',
position: 1,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.workflowVersion.views.allWorkflowVersions.viewFields
.workflow.universalIdentifier,
},
{
fieldMetadataId:
workflowVersionObjectMetadata.fields.find(
(field) =>
field.standardId === WORKFLOW_VERSION_STANDARD_FIELD_IDS.status,
)?.id ?? '',
position: 2,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.workflowVersion.views.allWorkflowVersions.viewFields
.status.universalIdentifier,
},
{
fieldMetadataId:
workflowVersionObjectMetadata.fields.find(
(field) =>
field.standardId === BASE_OBJECT_STANDARD_FIELD_IDS.updatedAt,
)?.id ?? '',
position: 3,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.workflowVersion.views.allWorkflowVersions.viewFields
.updatedAt.universalIdentifier,
},
{
fieldMetadataId:
workflowVersionObjectMetadata.fields.find(
(field) =>
field.standardId === WORKFLOW_VERSION_STANDARD_FIELD_IDS.runs,
)?.id ?? '',
position: 4,
isVisible: false,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.workflowVersion.views.allWorkflowVersions.viewFields
.runs.universalIdentifier,
},
],
};
};
@@ -1,126 +0,0 @@
import { msg } from '@lingui/core/macro';
import { STANDARD_OBJECT_IDS } from 'twenty-shared/metadata';
import { v4 } from 'uuid';
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 { STANDARD_OBJECTS } from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-object.constant';
import {
BASE_OBJECT_STANDARD_FIELD_IDS,
WORKFLOW_STANDARD_FIELD_IDS,
} from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
export const workflowsAllView = ({
objectMetadataItems,
useCoreNaming = false,
twentyStandardFlatApplication,
}: {
objectMetadataItems: ObjectMetadataEntity[];
useCoreNaming?: boolean;
twentyStandardFlatApplication: FlatApplication;
}): ViewDefinition => {
const workflowObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.workflow,
);
if (!workflowObjectMetadata) {
throw new Error('Workflow object metadata not found');
}
const viewUniversalIdentifier =
STANDARD_OBJECTS.workflow.views.allWorkflows.universalIdentifier;
return {
id: v4(),
universalIdentifier: viewUniversalIdentifier,
applicationId: twentyStandardFlatApplication.id,
name: useCoreNaming ? msg`All {objectLabelPlural}` : 'All Workflows',
objectMetadataId: workflowObjectMetadata.id,
type: 'table',
key: 'INDEX',
position: 0,
icon: 'IconSettingsAutomation',
openRecordIn: ViewOpenRecordInType.RECORD_PAGE,
filters: [],
fields: [
{
fieldMetadataId:
workflowObjectMetadata.fields.find(
(field) => field.standardId === WORKFLOW_STANDARD_FIELD_IDS.name,
)?.id ?? '',
position: 0,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.workflow.views.allWorkflows.viewFields.name
.universalIdentifier,
},
{
fieldMetadataId:
workflowObjectMetadata.fields.find(
(field) =>
field.standardId === WORKFLOW_STANDARD_FIELD_IDS.statuses,
)?.id ?? '',
position: 1,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.workflow.views.allWorkflows.viewFields.statuses
.universalIdentifier,
},
{
fieldMetadataId:
workflowObjectMetadata.fields.find(
(field) =>
field.standardId === BASE_OBJECT_STANDARD_FIELD_IDS.updatedAt,
)?.id ?? '',
position: 2,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.workflow.views.allWorkflows.viewFields.updatedAt
.universalIdentifier,
},
{
fieldMetadataId:
workflowObjectMetadata.fields.find(
(field) =>
field.standardId === WORKFLOW_STANDARD_FIELD_IDS.createdBy,
)?.id ?? '',
position: 3,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.workflow.views.allWorkflows.viewFields.createdBy
.universalIdentifier,
},
{
fieldMetadataId:
workflowObjectMetadata.fields.find(
(field) =>
field.standardId === WORKFLOW_STANDARD_FIELD_IDS.versions,
)?.id ?? '',
position: 4,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.workflow.views.allWorkflows.viewFields.versions
.universalIdentifier,
},
{
fieldMetadataId:
workflowObjectMetadata.fields.find(
(field) => field.standardId === WORKFLOW_STANDARD_FIELD_IDS.runs,
)?.id ?? '',
position: 5,
isVisible: false,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.workflow.views.allWorkflows.viewFields.runs
.universalIdentifier,
},
],
};
};
@@ -1,174 +0,0 @@
import { msg } from '@lingui/core/macro';
import { STANDARD_OBJECT_IDS } from 'twenty-shared/metadata';
import { v4 } from 'uuid';
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 { 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 { STANDARD_OBJECTS } from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-object.constant';
import {
BASE_OBJECT_STANDARD_FIELD_IDS,
WORKSPACE_MEMBER_STANDARD_FIELD_IDS,
} from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
export const workspaceMembersAllView = ({
objectMetadataItems,
twentyStandardFlatApplication,
useCoreNaming,
}: {
objectMetadataItems: ObjectMetadataEntity[];
useCoreNaming?: boolean;
twentyStandardFlatApplication: FlatApplication;
}): ViewDefinition => {
const workspaceMemberObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.workspaceMember,
);
if (!workspaceMemberObjectMetadata) {
throw new Error('WorkspaceMember object metadata not found');
}
const viewUniversalIdentifier =
STANDARD_OBJECTS.workspaceMember.views.allWorkspaceMembers
.universalIdentifier;
return {
id: v4(),
universalIdentifier: viewUniversalIdentifier,
applicationId: twentyStandardFlatApplication.id,
name: useCoreNaming
? msg`All {objectLabelPlural}`
: 'All Workspace Members',
objectMetadataId: workspaceMemberObjectMetadata.id ?? '',
type: 'table',
key: 'INDEX',
position: 0,
icon: 'IconList',
filters: [],
fields: [
{
fieldMetadataId:
workspaceMemberObjectMetadata.fields.find(
(field) =>
field.standardId === WORKSPACE_MEMBER_STANDARD_FIELD_IDS.name,
)?.id ?? '',
position: 0,
isVisible: true,
size: DEFAULT_VIEW_FIELD_SIZE,
universalIdentifier:
STANDARD_OBJECTS.workspaceMember.views.allWorkspaceMembers.viewFields
.name.universalIdentifier,
},
{
fieldMetadataId:
workspaceMemberObjectMetadata.fields.find(
(field) =>
field.standardId ===
WORKSPACE_MEMBER_STANDARD_FIELD_IDS.userEmail,
)?.id ?? '',
position: 1,
isVisible: true,
size: 180,
universalIdentifier:
STANDARD_OBJECTS.workspaceMember.views.allWorkspaceMembers.viewFields
.userEmail.universalIdentifier,
},
{
fieldMetadataId:
workspaceMemberObjectMetadata.fields.find(
(field) =>
field.standardId ===
WORKSPACE_MEMBER_STANDARD_FIELD_IDS.avatarUrl,
)?.id ?? '',
position: 2,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.workspaceMember.views.allWorkspaceMembers.viewFields
.avatarUrl.universalIdentifier,
},
{
fieldMetadataId:
workspaceMemberObjectMetadata.fields.find(
(field) =>
field.standardId ===
WORKSPACE_MEMBER_STANDARD_FIELD_IDS.colorScheme,
)?.id ?? '',
position: 3,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.workspaceMember.views.allWorkspaceMembers.viewFields
.colorScheme.universalIdentifier,
},
{
fieldMetadataId:
workspaceMemberObjectMetadata.fields.find(
(field) =>
field.standardId === WORKSPACE_MEMBER_STANDARD_FIELD_IDS.locale,
)?.id ?? '',
position: 4,
isVisible: true,
size: 120,
universalIdentifier:
STANDARD_OBJECTS.workspaceMember.views.allWorkspaceMembers.viewFields
.locale.universalIdentifier,
},
{
fieldMetadataId:
workspaceMemberObjectMetadata.fields.find(
(field) =>
field.standardId === WORKSPACE_MEMBER_STANDARD_FIELD_IDS.timeZone,
)?.id ?? '',
position: 5,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.workspaceMember.views.allWorkspaceMembers.viewFields
.timeZone.universalIdentifier,
},
{
fieldMetadataId:
workspaceMemberObjectMetadata.fields.find(
(field) =>
field.standardId ===
WORKSPACE_MEMBER_STANDARD_FIELD_IDS.dateFormat,
)?.id ?? '',
position: 6,
isVisible: true,
size: 120,
universalIdentifier:
STANDARD_OBJECTS.workspaceMember.views.allWorkspaceMembers.viewFields
.dateFormat.universalIdentifier,
},
{
fieldMetadataId:
workspaceMemberObjectMetadata.fields.find(
(field) =>
field.standardId ===
WORKSPACE_MEMBER_STANDARD_FIELD_IDS.timeFormat,
)?.id ?? '',
position: 7,
isVisible: true,
size: 120,
universalIdentifier:
STANDARD_OBJECTS.workspaceMember.views.allWorkspaceMembers.viewFields
.timeFormat.universalIdentifier,
},
{
fieldMetadataId:
workspaceMemberObjectMetadata.fields.find(
(field) =>
field.standardId === BASE_OBJECT_STANDARD_FIELD_IDS.createdAt,
)?.id ?? '',
position: 8,
isVisible: true,
size: 150,
universalIdentifier:
STANDARD_OBJECTS.workspaceMember.views.allWorkspaceMembers.viewFields
.createdAt.universalIdentifier,
},
],
};
};