Deprecate old relations completely (#12482)

# What

Fully deprecate old relations because we have one bug tied to it and it
make the codebase complex

# How I've made this PR:
1. remove metadata datasource (we only keep 'core') => this was causing
extra complexity in the refactor + flaky reset
2. merge dev and demo datasets => as I needed to update the tests which
is very painful, I don't want to do it twice
3. remove all code tied to RELATION_METADATA /
relation-metadata.resolver, or anything tied to the old relation system
4. Remove ONE_TO_ONE and MANY_TO_MANY that are not supported
5. fix impacts on the different areas : see functional testing below 

# Functional testing

## Functional testing from the front-end:
1. Database Reset 
2. Sign In 
3. Workspace sign-up 
5. Browsing table / kanban / show 
6. Assigning a record in a one to many / in a many to one 
7. Deleting a record involved in a relation  => broken but not tied to
this PR
8. "Add new" from relation picker  => broken but not tied to this PR
9. Creating a Task / Note, Updating a Task / Note relations, Deleting a
Task / Note (from table, show page, right drawer)  => broken but not
tied to this PR
10. creating a relation from settings (custom / standard x oneToMany /
manyToOne) 
11. updating a relation from settings should not be possible 
12. deleting a relation from settings (custom / standard x oneToMany /
manyToOne) 
13. Make sure timeline activity still work (relation were involved
there), espacially with Task / Note => to be double checked  => Cannot
convert undefined or null to object
14. Workspace deletion / User deletion  
15. CSV Import should keep working  
16. Permissions: I have tested without permissions V2 as it's still hard
to test v2 work and it's not in prod yet 
17. Workflows global test  

## From the API:
1. Review open-api documentation (REST)  
2. Make sure REST Api are still able to fetch relations ==> won't do, we
have a coupling Get/Update/Create there, this requires refactoring
3. Make sure REST Api is still able to update / remove relation => won't
do same

## Automated tests
1. lint + typescript 
2. front unit tests: 
3. server unit tests 2 
4. front stories: 
5. server integration: 
6. chromatic check : expected 0
7. e2e check : expected no more that current failures

## Remove // Todos
1. All are captured by functional tests above, nothing additional to do

## (Un)related regressions
1. Table loading state is not working anymore, we see the empty state
before table content
2. Filtering by Creator Tim Ap return empty results
3. Not possible to add Tasks / Notes / Files from show page

# Result

## New seeds that can be easily extended
<img width="1920" alt="image"
src="https://github.com/user-attachments/assets/d290d130-2a5f-44e6-b419-7e42a89eec4b"
/>

## -5k lines of code
## No more 'metadata' dataSource (we only have 'core)
## No more relationMetadata (I haven't drop the table yet it's not
referenced in the code anymore)
## We are ready to fix the 6 months lag between current API results and
our mocked tests
## No more bug on relation creation / deletion

---------

Co-authored-by: Weiko <corentin@twenty.com>
Co-authored-by: Félix Malfait <felix@twenty.com>
This commit is contained in:
Charles Bochet
2025-06-10 16:45:27 +02:00
committed by GitHub
parent 264861e020
commit a68895189c
426 changed files with 48870 additions and 54125 deletions
@@ -7,7 +7,7 @@ export const STRIPE_ID = '1f70157c-4ea5-4d81-bc49-e1401abfbb94';
export const FIGMA_ID = '9d5bcf43-7d38-4e88-82cb-d6d4ce638bf0';
export const NOTION_ID = '06290608-8bf0-4806-99ae-a715a6a93fad';
export const companyPrefillData = async (
export const prefillCompanies = async (
entityManager: WorkspaceEntityManager,
schemaName: string,
) => {
@@ -6,10 +6,9 @@ import {
FIGMA_ID,
NOTION_ID,
STRIPE_ID,
} from 'src/engine/workspace-manager/standard-objects-prefill-data/company';
} from 'src/engine/workspace-manager/standard-objects-prefill-data/prefill-companies';
// FixMe: Is this file a duplicate of src/database/typeorm-seeds/workspace/people.ts
export const personPrefillData = async (
export const prefillPeople = async (
entityManager: WorkspaceEntityManager,
schemaName: string,
) => {
@@ -1,9 +1,53 @@
import { v4 } from 'uuid';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import { WorkspaceEntityManager } from 'src/engine/twenty-orm/entity-manager/workspace-entity-manager';
import { ViewDefinition } from 'src/engine/workspace-manager/standard-objects-prefill-data/types/view-definition.interface';
import { companiesAllView } from 'src/engine/workspace-manager/standard-objects-prefill-data/views/companies-all.view';
import { customAllView } from 'src/engine/workspace-manager/standard-objects-prefill-data/views/custom-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 { 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';
export const createWorkspaceViews = async (
export const prefillViews = async (
entityManager: WorkspaceEntityManager,
schemaName: string,
objectMetadataItems: ObjectMetadataEntity[],
) => {
const customObjectMetadataItems = objectMetadataItems.filter(
(item) => item.isCustom,
);
const customViews = customObjectMetadataItems.map((item) =>
customAllView(item),
);
const views = [
companiesAllView(objectMetadataItems),
peopleAllView(objectMetadataItems),
opportunitiesAllView(objectMetadataItems),
opportunitiesByStageView(objectMetadataItems),
notesAllView(objectMetadataItems),
tasksAllView(objectMetadataItems),
tasksAssignedToMeView(objectMetadataItems),
tasksByStatusView(objectMetadataItems),
workflowsAllView(objectMetadataItems),
workflowVersionsAllView(objectMetadataItems),
workflowRunsAllView(objectMetadataItems),
...customViews,
];
return createWorkspaceViews(entityManager, schemaName, views);
};
const createWorkspaceViews = async (
entityManager: WorkspaceEntityManager,
schemaName: string,
viewDefinitions: ViewDefinition[],
@@ -0,0 +1,26 @@
import { v4 } from 'uuid';
import { WorkspaceEntityManager } from 'src/engine/twenty-orm/entity-manager/workspace-entity-manager';
const tableName = 'favorite';
export const prefillWorkspaceFavorites = async (
viewIds: string[],
entityManager: WorkspaceEntityManager,
schemaName: string,
) => {
await entityManager
.createQueryBuilder(undefined, undefined, undefined, {
shouldBypassPermissionChecks: true,
})
.insert()
.into(`${schemaName}.${tableName}`, ['id', 'viewId', 'position'])
.values(
viewIds.map((viewId, index) => ({
id: v4(),
viewId,
position: index,
})),
)
.execute();
};
@@ -1,37 +0,0 @@
import { ObjectMetadataStandardIdToIdMap } from 'src/engine/metadata-modules/object-metadata/interfaces/object-metadata-standard-id-to-id-map';
import { WorkspaceEntityManager } from 'src/engine/twenty-orm/entity-manager/workspace-entity-manager';
import { createWorkspaceViews } from 'src/engine/workspace-manager/standard-objects-prefill-data/create-workspace-views';
import { companiesAllView } from 'src/engine/workspace-manager/standard-objects-prefill-data/views/companies-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 { 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';
export const seedViewWithDemoData = async (
entityManager: WorkspaceEntityManager,
schemaName: string,
objectMetadataStandardIdToIdMap: ObjectMetadataStandardIdToIdMap,
) => {
const viewDefinitions = [
companiesAllView(objectMetadataStandardIdToIdMap),
peopleAllView(objectMetadataStandardIdToIdMap),
opportunitiesAllView(objectMetadataStandardIdToIdMap),
opportunitiesByStageView(objectMetadataStandardIdToIdMap),
notesAllView(objectMetadataStandardIdToIdMap),
tasksAllView(objectMetadataStandardIdToIdMap),
tasksAssignedToMeView(objectMetadataStandardIdToIdMap),
tasksByStatusView(objectMetadataStandardIdToIdMap),
workflowsAllView(objectMetadataStandardIdToIdMap),
workflowVersionsAllView(objectMetadataStandardIdToIdMap),
workflowRunsAllView(objectMetadataStandardIdToIdMap),
];
return createWorkspaceViews(entityManager, schemaName, viewDefinitions);
};
@@ -1,58 +1,35 @@
import { DataSource } from 'typeorm';
import { seedWorkspaceFavorites } from 'src/database/typeorm-seeds/workspace/favorites';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import { WorkspaceEntityManager } from 'src/engine/twenty-orm/entity-manager/workspace-entity-manager';
import { shouldSeedWorkspaceFavorite } from 'src/engine/utils/should-seed-workspace-favorite';
import { companyPrefillData } from 'src/engine/workspace-manager/standard-objects-prefill-data/company';
import { personPrefillData } from 'src/engine/workspace-manager/standard-objects-prefill-data/person';
import { seedViewWithDemoData } from 'src/engine/workspace-manager/standard-objects-prefill-data/seed-view-with-demo-data';
import { prefillCompanies } from 'src/engine/workspace-manager/standard-objects-prefill-data/prefill-companies';
import { prefillPeople } from 'src/engine/workspace-manager/standard-objects-prefill-data/prefill-people';
import { prefillViews } from 'src/engine/workspace-manager/standard-objects-prefill-data/prefill-views';
import { prefillWorkspaceFavorites } from 'src/engine/workspace-manager/standard-objects-prefill-data/prefill-workspace-favorites';
export const standardObjectsPrefillData = async (
mainDataSource: DataSource,
schemaName: string,
objectMetadata: ObjectMetadataEntity[],
objectMetadataItems: ObjectMetadataEntity[],
) => {
const objectMetadataMap = objectMetadata.reduce((acc, object) => {
if (!object.standardId) {
throw new Error('Standard Id is not set for object: ${object.name}');
}
// @ts-expect-error legacy noImplicitAny
acc[object.standardId] = {
id: object.id,
fields: object.fields.reduce((acc, field) => {
if (!field.standardId) {
throw new Error('Standard Id is not set for field: ${field.name}');
}
// @ts-expect-error legacy noImplicitAny
acc[field.standardId] = field.id;
return acc;
}, {}),
};
return acc;
}, {});
mainDataSource.transaction(async (entityManager: WorkspaceEntityManager) => {
await companyPrefillData(entityManager, schemaName);
await personPrefillData(entityManager, schemaName);
const viewDefinitionsWithId = await seedViewWithDemoData(
await prefillCompanies(entityManager, schemaName);
await prefillPeople(entityManager, schemaName);
const viewDefinitionsWithId = await prefillViews(
entityManager,
schemaName,
objectMetadataMap,
objectMetadataItems,
);
await seedWorkspaceFavorites(
await prefillWorkspaceFavorites(
viewDefinitionsWithId
.filter(
(view) =>
view.key === 'INDEX' &&
shouldSeedWorkspaceFavorite(
view.objectMetadataId,
objectMetadataMap,
objectMetadataItems,
),
)
.map((view) => view.id),
@@ -1,6 +1,5 @@
import { ObjectMetadataStandardIdToIdMap } from 'src/engine/metadata-modules/object-metadata/interfaces/object-metadata-standard-id-to-id-map';
import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import {
BASE_OBJECT_STANDARD_FIELD_IDS,
COMPANY_STANDARD_FIELD_IDS,
@@ -8,12 +7,19 @@ import {
import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
export const companiesAllView = (
objectMetadataStandardIdToIdMap: ObjectMetadataStandardIdToIdMap,
objectMetadataItems: ObjectMetadataEntity[],
) => {
const companyObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.company,
);
if (!companyObjectMetadata) {
throw new Error('Company object metadata not found');
}
return {
name: 'All Companies',
objectMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.company].id,
objectMetadataId: companyObjectMetadata.id ?? '',
type: 'table',
key: 'INDEX',
position: 0,
@@ -23,18 +29,23 @@ export const companiesAllView = (
fields: [
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.company].fields[
COMPANY_STANDARD_FIELD_IDS.name
],
companyObjectMetadata.fields.find(
(field) => field.standardId === COMPANY_STANDARD_FIELD_IDS.name,
)?.id ??
'' ??
'',
position: 0,
isVisible: true,
size: 180,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.company].fields[
COMPANY_STANDARD_FIELD_IDS.domainName
],
companyObjectMetadata.fields.find(
(field) =>
field.standardId === COMPANY_STANDARD_FIELD_IDS.domainName,
)?.id ??
'' ??
'',
position: 1,
isVisible: true,
size: 100,
@@ -42,36 +53,40 @@ export const companiesAllView = (
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.company].fields[
COMPANY_STANDARD_FIELD_IDS.createdBy
],
companyObjectMetadata.fields.find(
(field) =>
field.standardId === COMPANY_STANDARD_FIELD_IDS.createdBy,
)?.id ?? '',
position: 2,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.company].fields[
COMPANY_STANDARD_FIELD_IDS.accountOwner
],
companyObjectMetadata.fields.find(
(field) =>
field.standardId === COMPANY_STANDARD_FIELD_IDS.accountOwner,
)?.id ?? '',
position: 3,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.company].fields[
BASE_OBJECT_STANDARD_FIELD_IDS.createdAt
],
companyObjectMetadata.fields.find(
(field) =>
field.standardId === BASE_OBJECT_STANDARD_FIELD_IDS.createdAt,
)?.id ?? '',
position: 4,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.company].fields[
COMPANY_STANDARD_FIELD_IDS.employees
],
companyObjectMetadata.fields.find(
(field) =>
field.standardId === COMPANY_STANDARD_FIELD_IDS.employees,
)?.id ?? '',
position: 5,
isVisible: true,
size: 150,
@@ -79,9 +94,10 @@ export const companiesAllView = (
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.company].fields[
COMPANY_STANDARD_FIELD_IDS.linkedinLink
],
companyObjectMetadata.fields.find(
(field) =>
field.standardId === COMPANY_STANDARD_FIELD_IDS.linkedinLink,
)?.id ?? '',
position: 6,
isVisible: true,
size: 170,
@@ -89,9 +105,9 @@ export const companiesAllView = (
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.company].fields[
COMPANY_STANDARD_FIELD_IDS.address
],
companyObjectMetadata.fields.find(
(field) => field.standardId === COMPANY_STANDARD_FIELD_IDS.address,
)?.id ?? '',
position: 7,
isVisible: true,
size: 170,
@@ -0,0 +1,44 @@
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
export const customAllView = (objectMetadataItem: ObjectMetadataEntity) => {
const nameField = objectMetadataItem.fields.find(
(field) => field.name === 'name',
);
const otherFields = objectMetadataItem.fields.filter(
(field) => field.name !== 'name',
);
if (!nameField) {
throw new Error(
`Name field not found while creating All ${objectMetadataItem.namePlural} view`,
);
}
return {
name: `All ${objectMetadataItem.namePlural}`,
objectMetadataId: objectMetadataItem.id,
type: 'table',
key: 'INDEX',
position: 0,
icon: 'IconList',
kanbanFieldMetadataId: '',
filters: [],
fields: [
{
fieldMetadataId:
objectMetadataItem.fields.find((field) => field.name === 'name')
?.id ?? '',
position: 0,
isVisible: true,
size: 180,
},
...otherFields.map((field, index) => ({
fieldMetadataId: field.id,
position: index + 1,
isVisible: true,
size: 180,
})),
],
};
};
@@ -1,18 +1,22 @@
import { ObjectMetadataStandardIdToIdMap } from 'src/engine/metadata-modules/object-metadata/interfaces/object-metadata-standard-id-to-id-map';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import {
BASE_OBJECT_STANDARD_FIELD_IDS,
NOTE_STANDARD_FIELD_IDS,
} from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
export const notesAllView = (
objectMetadataStandardIdToIdMap: ObjectMetadataStandardIdToIdMap,
) => {
export const notesAllView = (objectMetadataItems: ObjectMetadataEntity[]) => {
const noteObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.note,
);
if (!noteObjectMetadata) {
throw new Error('Note object metadata not found');
}
return {
name: 'All Notes',
objectMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.note].id,
objectMetadataId: noteObjectMetadata.id,
type: 'table',
key: 'INDEX',
position: 0,
@@ -22,45 +26,46 @@ export const notesAllView = (
fields: [
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.note].fields[
NOTE_STANDARD_FIELD_IDS.title
],
noteObjectMetadata.fields.find(
(field) => field.standardId === NOTE_STANDARD_FIELD_IDS.title,
)?.id ?? '',
position: 0,
isVisible: true,
size: 210,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.note].fields[
NOTE_STANDARD_FIELD_IDS.noteTargets
],
noteObjectMetadata.fields.find(
(field) => field.standardId === NOTE_STANDARD_FIELD_IDS.noteTargets,
)?.id ?? '',
position: 1,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.note].fields[
NOTE_STANDARD_FIELD_IDS.bodyV2
],
noteObjectMetadata.fields.find(
(field) => field.standardId === NOTE_STANDARD_FIELD_IDS.bodyV2,
)?.id ?? '',
position: 2,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.note].fields[
NOTE_STANDARD_FIELD_IDS.createdBy
],
noteObjectMetadata.fields.find(
(field) => field.standardId === NOTE_STANDARD_FIELD_IDS.createdBy,
)?.id ?? '',
position: 3,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.note].fields[
BASE_OBJECT_STANDARD_FIELD_IDS.createdAt
],
noteObjectMetadata.fields.find(
(field) =>
field.standardId === BASE_OBJECT_STANDARD_FIELD_IDS.createdAt,
)?.id ?? '',
position: 4,
isVisible: true,
size: 150,
@@ -1,16 +1,22 @@
import { ObjectMetadataStandardIdToIdMap } from 'src/engine/metadata-modules/object-metadata/interfaces/object-metadata-standard-id-to-id-map';
import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import { OPPORTUNITY_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
export const opportunitiesAllView = (
objectMetadataStandardIdToIdMap: ObjectMetadataStandardIdToIdMap,
objectMetadataItems: ObjectMetadataEntity[],
) => {
const opportunityObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.opportunity,
);
if (!opportunityObjectMetadata) {
throw new Error('Opportunity object metadata not found');
}
return {
name: 'All Opportunities',
objectMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity].id,
objectMetadataId: opportunityObjectMetadata.id,
type: 'table',
key: 'INDEX',
position: 0,
@@ -20,16 +26,19 @@ export const opportunitiesAllView = (
fields: [
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.name],
opportunityObjectMetadata.fields.find(
(field) => field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.name,
)?.id ?? '',
position: 0,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.amount],
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.amount,
)?.id ?? '',
position: 1,
isVisible: true,
size: 150,
@@ -37,16 +46,20 @@ export const opportunitiesAllView = (
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.createdBy],
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.createdBy,
)?.id ?? '',
position: 2,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.closeDate],
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.closeDate,
)?.id ?? '',
position: 3,
isVisible: true,
size: 150,
@@ -54,16 +67,21 @@ export const opportunitiesAllView = (
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.company],
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.company,
)?.id ?? '',
position: 4,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.pointOfContact],
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId ===
OPPORTUNITY_STANDARD_FIELD_IDS.pointOfContact,
)?.id ?? '',
position: 5,
isVisible: true,
size: 150,
@@ -1,75 +1,93 @@
import { ObjectMetadataStandardIdToIdMap } from 'src/engine/metadata-modules/object-metadata/interfaces/object-metadata-standard-id-to-id-map';
import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import { OPPORTUNITY_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
export const opportunitiesByStageView = (
objectMetadataStandardIdToIdMap: ObjectMetadataStandardIdToIdMap,
objectMetadataItems: ObjectMetadataEntity[],
) => {
const opportunityObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.opportunity,
);
if (!opportunityObjectMetadata) {
throw new Error('Opportunity object metadata not found');
}
return {
name: 'By Stage',
objectMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity].id,
objectMetadataId: opportunityObjectMetadata.id,
type: 'kanban',
key: null,
position: 2,
icon: 'IconLayoutKanban',
kanbanFieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity].fields[
OPPORTUNITY_STANDARD_FIELD_IDS.stage
],
opportunityObjectMetadata.fields.find(
(field) => field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.stage,
)?.id ?? '',
kanbanAggregateOperation: AggregateOperations.MIN,
kanbanAggregateOperationFieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity].fields[
OPPORTUNITY_STANDARD_FIELD_IDS.amount
],
opportunityObjectMetadata.fields.find(
(field) => field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.amount,
)?.id ?? '',
filters: [],
fields: [
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.name],
opportunityObjectMetadata.fields.find(
(field) => field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.name,
)?.id ?? '',
position: 0,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.amount],
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.amount,
)?.id ?? '',
position: 1,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.createdBy],
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.createdBy,
)?.id ?? '',
position: 2,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.closeDate],
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.closeDate,
)?.id ?? '',
position: 3,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.company],
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.company,
)?.id ?? '',
position: 4,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.pointOfContact],
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId ===
OPPORTUNITY_STANDARD_FIELD_IDS.pointOfContact,
)?.id ?? '',
position: 5,
isVisible: true,
size: 150,
@@ -78,40 +96,50 @@ export const opportunitiesByStageView = (
groups: [
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.stage],
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.stage,
)?.id ?? '',
isVisible: true,
fieldValue: 'NEW',
position: 0,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.stage],
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.stage,
)?.id ?? '',
isVisible: true,
fieldValue: 'SCREENING',
position: 1,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.stage],
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.stage,
)?.id ?? '',
isVisible: true,
fieldValue: 'MEETING',
position: 2,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.stage],
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.stage,
)?.id ?? '',
isVisible: true,
fieldValue: 'PROPOSAL',
position: 3,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.stage],
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.stage,
)?.id ?? '',
isVisible: true,
fieldValue: 'CUSTOMER',
position: 4,
@@ -1,38 +1,47 @@
import { ObjectMetadataStandardIdToIdMap } from 'src/engine/metadata-modules/object-metadata/interfaces/object-metadata-standard-id-to-id-map';
import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import { OPPORTUNITY_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
export const opportunitiesTableByStageView = (
objectMetadataStandardIdToIdMap: ObjectMetadataStandardIdToIdMap,
objectMetadataItems: ObjectMetadataEntity[],
) => {
const opportunityObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.opportunity,
);
if (!opportunityObjectMetadata) {
throw new Error('Opportunity object metadata not found');
}
return {
name: 'By Stage',
objectMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity].id,
objectMetadataId: opportunityObjectMetadata.id,
type: 'table',
key: null,
position: 1,
icon: 'IconList',
kanbanFieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity].fields[
OPPORTUNITY_STANDARD_FIELD_IDS.stage
],
opportunityObjectMetadata.fields.find(
(field) => field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.stage,
)?.id ?? '',
filters: [],
fields: [
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.name],
opportunityObjectMetadata.fields.find(
(field) => field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.name,
)?.id ?? '',
position: 0,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.amount],
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.amount,
)?.id ?? '',
position: 1,
isVisible: true,
size: 150,
@@ -40,16 +49,20 @@ export const opportunitiesTableByStageView = (
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.createdBy],
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.createdBy,
)?.id ?? '',
position: 2,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.closeDate],
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.closeDate,
)?.id ?? '',
position: 3,
isVisible: true,
size: 150,
@@ -57,8 +70,10 @@ export const opportunitiesTableByStageView = (
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.company],
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.company,
)?.id ?? '',
position: 4,
isVisible: true,
size: 150,
@@ -66,8 +81,11 @@ export const opportunitiesTableByStageView = (
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.pointOfContact],
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId ===
OPPORTUNITY_STANDARD_FIELD_IDS.pointOfContact,
)?.id ?? '',
position: 5,
isVisible: true,
size: 150,
@@ -76,40 +94,50 @@ export const opportunitiesTableByStageView = (
groups: [
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.stage],
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.stage,
)?.id ?? '',
isVisible: true,
fieldValue: 'NEW',
position: 0,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.stage],
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.stage,
)?.id ?? '',
isVisible: true,
fieldValue: 'SCREENING',
position: 1,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.stage],
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.stage,
)?.id ?? '',
isVisible: true,
fieldValue: 'MEETING',
position: 2,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.stage],
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.stage,
)?.id ?? '',
isVisible: true,
fieldValue: 'PROPOSAL',
position: 3,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.opportunity]
.fields[OPPORTUNITY_STANDARD_FIELD_IDS.stage],
opportunityObjectMetadata.fields.find(
(field) =>
field.standardId === OPPORTUNITY_STANDARD_FIELD_IDS.stage,
)?.id ?? '',
isVisible: true,
fieldValue: 'CUSTOMER',
position: 4,
@@ -1,19 +1,23 @@
import { ObjectMetadataStandardIdToIdMap } from 'src/engine/metadata-modules/object-metadata/interfaces/object-metadata-standard-id-to-id-map';
import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import {
BASE_OBJECT_STANDARD_FIELD_IDS,
PERSON_STANDARD_FIELD_IDS,
} from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
export const peopleAllView = (
objectMetadataStandardIdToIdMap: ObjectMetadataStandardIdToIdMap,
) => {
export const peopleAllView = (objectMetadataItems: ObjectMetadataEntity[]) => {
const personObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.person,
);
if (!personObjectMetadata) {
throw new Error('Person object metadata not found');
}
return {
name: 'All People',
objectMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.person].id,
objectMetadataId: personObjectMetadata.id,
type: 'table',
key: 'INDEX',
position: 0,
@@ -23,18 +27,18 @@ export const peopleAllView = (
fields: [
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.person].fields[
PERSON_STANDARD_FIELD_IDS.name
],
personObjectMetadata.fields.find(
(field) => field.standardId === PERSON_STANDARD_FIELD_IDS.name,
)?.id ?? '',
position: 0,
isVisible: true,
size: 210,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.person].fields[
PERSON_STANDARD_FIELD_IDS.emails
],
personObjectMetadata.fields.find(
(field) => field.standardId === PERSON_STANDARD_FIELD_IDS.emails,
)?.id ?? '',
position: 1,
isVisible: true,
size: 150,
@@ -42,27 +46,27 @@ export const peopleAllView = (
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.person].fields[
PERSON_STANDARD_FIELD_IDS.createdBy
],
personObjectMetadata.fields.find(
(field) => field.standardId === PERSON_STANDARD_FIELD_IDS.createdBy,
)?.id ?? '',
position: 2,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.person].fields[
PERSON_STANDARD_FIELD_IDS.company
],
personObjectMetadata.fields.find(
(field) => field.standardId === PERSON_STANDARD_FIELD_IDS.company,
)?.id ?? '',
position: 3,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.person].fields[
PERSON_STANDARD_FIELD_IDS.phones
],
personObjectMetadata.fields.find(
(field) => field.standardId === PERSON_STANDARD_FIELD_IDS.phones,
)?.id ?? '',
position: 4,
isVisible: true,
size: 150,
@@ -70,9 +74,10 @@ export const peopleAllView = (
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.person].fields[
BASE_OBJECT_STANDARD_FIELD_IDS.createdAt
],
personObjectMetadata.fields.find(
(field) =>
field.standardId === BASE_OBJECT_STANDARD_FIELD_IDS.createdAt,
)?.id ?? '',
position: 5,
isVisible: true,
size: 150,
@@ -80,36 +85,37 @@ export const peopleAllView = (
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.person].fields[
PERSON_STANDARD_FIELD_IDS.city
],
personObjectMetadata.fields.find(
(field) => field.standardId === PERSON_STANDARD_FIELD_IDS.city,
)?.id ?? '',
position: 6,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.person].fields[
PERSON_STANDARD_FIELD_IDS.jobTitle
],
personObjectMetadata.fields.find(
(field) => field.standardId === PERSON_STANDARD_FIELD_IDS.jobTitle,
)?.id ?? '',
position: 7,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.person].fields[
PERSON_STANDARD_FIELD_IDS.linkedinLink
],
personObjectMetadata.fields.find(
(field) =>
field.standardId === PERSON_STANDARD_FIELD_IDS.linkedinLink,
)?.id ?? '',
position: 8,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.person].fields[
PERSON_STANDARD_FIELD_IDS.xLink
],
personObjectMetadata.fields.find(
(field) => field.standardId === PERSON_STANDARD_FIELD_IDS.xLink,
)?.id ?? '',
position: 9,
isVisible: true,
size: 150,
@@ -1,18 +1,22 @@
import { ObjectMetadataStandardIdToIdMap } from 'src/engine/metadata-modules/object-metadata/interfaces/object-metadata-standard-id-to-id-map';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import {
BASE_OBJECT_STANDARD_FIELD_IDS,
TASK_STANDARD_FIELD_IDS,
} from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
export const tasksAllView = (
objectMetadataStandardIdToIdMap: ObjectMetadataStandardIdToIdMap,
) => {
export const tasksAllView = (objectMetadataItems: ObjectMetadataEntity[]) => {
const taskObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.task,
);
if (!taskObjectMetadata) {
throw new Error('Task object metadata not found');
}
return {
name: 'All Tasks',
objectMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].id,
objectMetadataId: taskObjectMetadata.id,
type: 'table',
key: 'INDEX',
position: 0,
@@ -32,72 +36,73 @@ export const tasksAllView = (
fields: [
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.title
],
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.title,
)?.id ?? '',
position: 0,
isVisible: true,
size: 210,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.status
],
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.status,
)?.id ?? '',
position: 2,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.taskTargets
],
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.taskTargets,
)?.id ?? '',
position: 3,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.createdBy
],
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.createdBy,
)?.id ?? '',
position: 4,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.dueAt
],
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.dueAt,
)?.id ?? '',
position: 5,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.assignee
],
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.assignee,
)?.id ?? '',
position: 6,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.bodyV2
],
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.bodyV2,
)?.id ?? '',
position: 7,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
BASE_OBJECT_STANDARD_FIELD_IDS.createdAt
],
taskObjectMetadata.fields.find(
(field) =>
field.standardId === BASE_OBJECT_STANDARD_FIELD_IDS.createdAt,
)?.id ?? '',
position: 8,
isVisible: true,
size: 150,
@@ -1,5 +1,4 @@
import { ObjectMetadataStandardIdToIdMap } from 'src/engine/metadata-modules/object-metadata/interfaces/object-metadata-standard-id-to-id-map';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import {
BASE_OBJECT_STANDARD_FIELD_IDS,
TASK_STANDARD_FIELD_IDS,
@@ -7,12 +6,19 @@ import {
import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
export const tasksAssignedToMeView = (
objectMetadataStandardIdToIdMap: ObjectMetadataStandardIdToIdMap,
objectMetadataItems: ObjectMetadataEntity[],
) => {
const taskObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.task,
);
if (!taskObjectMetadata) {
throw new Error('Task object metadata not found');
}
return {
name: 'Assigned to Me',
objectMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].id,
objectMetadataId: taskObjectMetadata.id,
type: 'table',
key: null,
position: 2,
@@ -21,9 +27,9 @@ export const tasksAssignedToMeView = (
filters: [
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.assignee
],
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.assignee,
)?.id ?? '',
displayValue: 'Me',
operand: 'is',
value: JSON.stringify({
@@ -35,9 +41,9 @@ export const tasksAssignedToMeView = (
fields: [
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.title
],
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.title,
)?.id ?? '',
position: 0,
isVisible: true,
size: 210,
@@ -53,54 +59,55 @@ export const tasksAssignedToMeView = (
},*/
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.taskTargets
],
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.taskTargets,
)?.id ?? '',
position: 3,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.createdBy
],
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.createdBy,
)?.id ?? '',
position: 4,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.dueAt
],
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.dueAt,
)?.id ?? '',
position: 5,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.assignee
],
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.assignee,
)?.id ?? '',
position: 6,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.body
],
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.body,
)?.id ?? '',
position: 7,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
BASE_OBJECT_STANDARD_FIELD_IDS.createdAt
],
taskObjectMetadata.fields.find(
(field) =>
field.standardId === BASE_OBJECT_STANDARD_FIELD_IDS.createdAt,
)?.id ?? '',
position: 8,
isVisible: true,
size: 150,
@@ -109,36 +116,36 @@ export const tasksAssignedToMeView = (
groups: [
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.status
],
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.status,
)?.id ?? '',
isVisible: true,
fieldValue: 'TODO',
position: 0,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.status
],
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.status,
)?.id ?? '',
isVisible: true,
fieldValue: 'IN_PROGRESS',
position: 1,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.status
],
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.status,
)?.id ?? '',
isVisible: true,
fieldValue: 'DONE',
position: 2,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.status
],
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.status,
)?.id ?? '',
isVisible: true,
fieldValue: '',
position: 3,
@@ -1,5 +1,4 @@
import { ObjectMetadataStandardIdToIdMap } from 'src/engine/metadata-modules/object-metadata/interfaces/object-metadata-standard-id-to-id-map';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import {
BASE_OBJECT_STANDARD_FIELD_IDS,
TASK_STANDARD_FIELD_IDS,
@@ -7,20 +6,27 @@ import {
import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
export const tasksByStatusView = (
objectMetadataStandardIdToIdMap: ObjectMetadataStandardIdToIdMap,
objectMetadataItems: ObjectMetadataEntity[],
) => {
const taskObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.task,
);
if (!taskObjectMetadata) {
throw new Error('Task object metadata not found');
}
return {
name: 'By Status',
objectMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].id,
objectMetadataId: taskObjectMetadata.id,
type: 'kanban',
key: null,
position: 1,
icon: 'IconLayoutKanban',
kanbanFieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.status
],
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.status,
)?.id ?? '',
filters: [] /* [
{
fieldMetadataId:
@@ -35,45 +41,46 @@ export const tasksByStatusView = (
fields: [
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.title
],
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.title,
)?.id ?? '',
position: 0,
isVisible: true,
size: 210,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.status
],
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.status,
)?.id ?? '',
position: 2,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.dueAt
],
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.dueAt,
)?.id ?? '',
position: 3,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.assignee
],
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.assignee,
)?.id ?? '',
position: 4,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
BASE_OBJECT_STANDARD_FIELD_IDS.createdAt
],
taskObjectMetadata.fields.find(
(field) =>
field.standardId === BASE_OBJECT_STANDARD_FIELD_IDS.createdAt,
)?.id ?? '',
position: 6,
isVisible: true,
size: 150,
@@ -94,27 +101,27 @@ export const tasksByStatusView = (
groups: [
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.status
],
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.status,
)?.id ?? '',
isVisible: true,
fieldValue: 'TODO',
position: 0,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.status
],
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.status,
)?.id ?? '',
isVisible: true,
fieldValue: 'IN_PROGRESS',
position: 1,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.task].fields[
TASK_STANDARD_FIELD_IDS.status
],
taskObjectMetadata.fields.find(
(field) => field.standardId === TASK_STANDARD_FIELD_IDS.status,
)?.id ?? '',
isVisible: true,
fieldValue: 'DONE',
position: 2,
@@ -1,16 +1,22 @@
import { ObjectMetadataStandardIdToIdMap } from 'src/engine/metadata-modules/object-metadata/interfaces/object-metadata-standard-id-to-id-map';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import { WORKFLOW_RUN_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
import { ViewOpenRecordInType } from 'src/modules/view/standard-objects/view.workspace-entity';
export const workflowRunsAllView = (
objectMetadataStandardIdToIdMap: ObjectMetadataStandardIdToIdMap,
objectMetadataItems: ObjectMetadataEntity[],
) => {
const workflowRunObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.workflowRun,
);
if (!workflowRunObjectMetadata) {
throw new Error('Workflow run object metadata not found');
}
return {
name: 'All Workflow Runs',
objectMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.workflowRun].id,
objectMetadataId: workflowRunObjectMetadata.id,
type: 'table',
key: 'INDEX',
position: 0,
@@ -21,48 +27,61 @@ export const workflowRunsAllView = (
fields: [
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.workflowRun]
.fields[WORKFLOW_RUN_STANDARD_FIELD_IDS.name],
workflowRunObjectMetadata.fields.find(
(field) =>
field.standardId === WORKFLOW_RUN_STANDARD_FIELD_IDS.name,
)?.id ?? '',
position: 0,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.workflowRun]
.fields[WORKFLOW_RUN_STANDARD_FIELD_IDS.workflow],
workflowRunObjectMetadata.fields.find(
(field) =>
field.standardId === WORKFLOW_RUN_STANDARD_FIELD_IDS.workflow,
)?.id ?? '',
position: 1,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.workflowRun]
.fields[WORKFLOW_RUN_STANDARD_FIELD_IDS.status],
workflowRunObjectMetadata.fields.find(
(field) =>
field.standardId === WORKFLOW_RUN_STANDARD_FIELD_IDS.status,
)?.id ?? '',
position: 2,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.workflowRun]
.fields[WORKFLOW_RUN_STANDARD_FIELD_IDS.startedAt],
workflowRunObjectMetadata.fields.find(
(field) =>
field.standardId === WORKFLOW_RUN_STANDARD_FIELD_IDS.startedAt,
)?.id ?? '',
position: 3,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.workflowRun]
.fields[WORKFLOW_RUN_STANDARD_FIELD_IDS.createdBy],
workflowRunObjectMetadata.fields.find(
(field) =>
field.standardId === WORKFLOW_RUN_STANDARD_FIELD_IDS.createdBy,
)?.id ?? '',
position: 4,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.workflowRun]
.fields[WORKFLOW_RUN_STANDARD_FIELD_IDS.workflowVersion],
workflowRunObjectMetadata.fields.find(
(field) =>
field.standardId ===
WORKFLOW_RUN_STANDARD_FIELD_IDS.workflowVersion,
)?.id ?? '',
position: 5,
isVisible: true,
size: 150,
@@ -1,5 +1,4 @@
import { ObjectMetadataStandardIdToIdMap } from 'src/engine/metadata-modules/object-metadata/interfaces/object-metadata-standard-id-to-id-map';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import {
BASE_OBJECT_STANDARD_FIELD_IDS,
WORKFLOW_VERSION_STANDARD_FIELD_IDS,
@@ -8,12 +7,19 @@ import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync
import { ViewOpenRecordInType } from 'src/modules/view/standard-objects/view.workspace-entity';
export const workflowVersionsAllView = (
objectMetadataStandardIdToIdMap: ObjectMetadataStandardIdToIdMap,
objectMetadataItems: ObjectMetadataEntity[],
) => {
const workflowVersionObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.workflowVersion,
);
if (!workflowVersionObjectMetadata) {
throw new Error('Workflow version object metadata not found');
}
return {
name: 'All Workflow Versions',
objectMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.workflowVersion].id,
objectMetadataId: workflowVersionObjectMetadata.id,
type: 'table',
key: 'INDEX',
position: 0,
@@ -24,40 +30,50 @@ export const workflowVersionsAllView = (
fields: [
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.workflowVersion]
.fields[WORKFLOW_VERSION_STANDARD_FIELD_IDS.name],
workflowVersionObjectMetadata.fields.find(
(field) =>
field.standardId === WORKFLOW_VERSION_STANDARD_FIELD_IDS.name,
)?.id ?? '',
position: 0,
isVisible: true,
size: 210,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.workflowVersion]
.fields[WORKFLOW_VERSION_STANDARD_FIELD_IDS.workflow],
workflowVersionObjectMetadata.fields.find(
(field) =>
field.standardId === WORKFLOW_VERSION_STANDARD_FIELD_IDS.workflow,
)?.id ?? '',
position: 1,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.workflowVersion]
.fields[WORKFLOW_VERSION_STANDARD_FIELD_IDS.status],
workflowVersionObjectMetadata.fields.find(
(field) =>
field.standardId === WORKFLOW_VERSION_STANDARD_FIELD_IDS.status,
)?.id ?? '',
position: 2,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.workflowVersion]
.fields[BASE_OBJECT_STANDARD_FIELD_IDS.updatedAt],
workflowVersionObjectMetadata.fields.find(
(field) =>
field.standardId === BASE_OBJECT_STANDARD_FIELD_IDS.updatedAt,
)?.id ?? '',
position: 3,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.workflowVersion]
.fields[WORKFLOW_VERSION_STANDARD_FIELD_IDS.runs],
workflowVersionObjectMetadata.fields.find(
(field) =>
field.standardId === WORKFLOW_VERSION_STANDARD_FIELD_IDS.runs,
)?.id ?? '',
position: 4,
isVisible: true,
size: 150,
@@ -1,5 +1,4 @@
import { ObjectMetadataStandardIdToIdMap } from 'src/engine/metadata-modules/object-metadata/interfaces/object-metadata-standard-id-to-id-map';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import {
BASE_OBJECT_STANDARD_FIELD_IDS,
WORKFLOW_STANDARD_FIELD_IDS,
@@ -8,12 +7,19 @@ import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync
import { ViewOpenRecordInType } from 'src/modules/view/standard-objects/view.workspace-entity';
export const workflowsAllView = (
objectMetadataStandardIdToIdMap: ObjectMetadataStandardIdToIdMap,
objectMetadataItems: ObjectMetadataEntity[],
) => {
const workflowObjectMetadata = objectMetadataItems.find(
(object) => object.standardId === STANDARD_OBJECT_IDS.workflow,
);
if (!workflowObjectMetadata) {
throw new Error('Workflow object metadata not found');
}
return {
name: 'All Workflows',
objectMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.workflow].id,
objectMetadataId: workflowObjectMetadata.id,
type: 'table',
key: 'INDEX',
position: 0,
@@ -24,54 +30,58 @@ export const workflowsAllView = (
fields: [
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.workflow].fields[
WORKFLOW_STANDARD_FIELD_IDS.name
],
workflowObjectMetadata.fields.find(
(field) => field.standardId === WORKFLOW_STANDARD_FIELD_IDS.name,
)?.id ?? '',
position: 0,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.workflow].fields[
WORKFLOW_STANDARD_FIELD_IDS.statuses
],
workflowObjectMetadata.fields.find(
(field) =>
field.standardId === WORKFLOW_STANDARD_FIELD_IDS.statuses,
)?.id ?? '',
position: 1,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.workflow].fields[
BASE_OBJECT_STANDARD_FIELD_IDS.updatedAt
],
workflowObjectMetadata.fields.find(
(field) =>
field.standardId === BASE_OBJECT_STANDARD_FIELD_IDS.updatedAt,
)?.id ?? '',
position: 2,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.workflow].fields[
WORKFLOW_STANDARD_FIELD_IDS.createdBy
],
workflowObjectMetadata.fields.find(
(field) =>
field.standardId === WORKFLOW_STANDARD_FIELD_IDS.createdBy,
)?.id ?? '',
position: 3,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.workflow].fields[
WORKFLOW_STANDARD_FIELD_IDS.versions
],
workflowObjectMetadata.fields.find(
(field) =>
field.standardId === WORKFLOW_STANDARD_FIELD_IDS.versions,
)?.id ?? '',
position: 4,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataStandardIdToIdMap[STANDARD_OBJECT_IDS.workflow].fields[
WORKFLOW_STANDARD_FIELD_IDS.runs
],
workflowObjectMetadata.fields.find(
(field) => field.standardId === WORKFLOW_STANDARD_FIELD_IDS.runs,
)?.id ?? '',
position: 5,
isVisible: true,
size: 150,