Add opened section (#7265)

When object is not part of the workspace favorite list, we want to show
it in the "opened section" while its record page is accessed.

This PR:
- adds a new component `NavigationDrawerOpenedSection`
- makes workflow versions and runs not system object + creates a
prefilled view index for these
- do not create workspace favorites for these so these do not appear in
the workspace section

<img width="1129" alt="Capture d’écran 2024-09-26 à 11 45 25"
src="https://github.com/user-attachments/assets/c84d773c-0bef-4dce-b66a-55d7d00b0fb6">
This commit is contained in:
Thomas Trompette
2024-10-07 13:45:29 +02:00
committed by GitHub
parent 2bc7974da9
commit ce676f699d
25 changed files with 311 additions and 95 deletions

View File

@ -0,0 +1,9 @@
import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
export const shouldSeedWorkspaceFavorite = (
objectMetadataId,
objectMetadataMap,
): boolean =>
objectMetadataId !==
objectMetadataMap[STANDARD_OBJECT_IDS.workflowVersion].id &&
objectMetadataId !== objectMetadataMap[STANDARD_OBJECT_IDS.workflowRun].id;

View File

@ -2,6 +2,7 @@ import { DataSource, EntityManager } from 'typeorm';
import { seedWorkspaceFavorites } from 'src/database/typeorm-seeds/workspace/favorites';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import { shouldSeedWorkspaceFavorite } from 'src/engine/utils/should-seed-workspace-favorite';
import { companyPrefillDemoData } from 'src/engine/workspace-manager/demo-objects-prefill-data/company';
import { opportunityPrefillDemoData } from 'src/engine/workspace-manager/demo-objects-prefill-data/opportunity';
import { personPrefillDemoData } from 'src/engine/workspace-manager/demo-objects-prefill-data/person';
@ -42,7 +43,7 @@ export const demoObjectsPrefillData = async (
await seedWorkspaceFavorites(
viewDefinitionsWithId
.filter((view) => view.key === 'INDEX')
.filter((view) => view.key === 'INDEX' && shouldSeedWorkspaceFavorite(view.objectMetadataId, objectMetadataMap))
.map((view) => view.id),
entityManager,
schemaName,

View File

@ -2,6 +2,7 @@ import { DataSource, EntityManager } from 'typeorm';
import { seedWorkspaceFavorites } from 'src/database/typeorm-seeds/workspace/favorites';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
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 { viewPrefillData } from 'src/engine/workspace-manager/standard-objects-prefill-data/view';
@ -45,7 +46,14 @@ export const standardObjectsPrefillData = async (
await seedWorkspaceFavorites(
viewDefinitionsWithId
.filter((view) => view.key === 'INDEX')
.filter(
(view) =>
view.key === 'INDEX' &&
shouldSeedWorkspaceFavorite(
view.objectMetadataId,
objectMetadataMap,
),
)
.map((view) => view.id),
entityManager,
schemaName,

View File

@ -9,6 +9,8 @@ import { opportunitiesByStageView } from 'src/engine/workspace-manager/standard-
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 { 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 viewPrefillData = async (
@ -18,14 +20,20 @@ export const viewPrefillData = async (
isWorkflowEnabled: boolean,
) => {
const viewDefinitions = [
await companiesAllView(objectMetadataMap),
await peopleAllView(objectMetadataMap),
await opportunitiesAllView(objectMetadataMap),
await opportunitiesByStageView(objectMetadataMap),
await notesAllView(objectMetadataMap),
await tasksAllView(objectMetadataMap),
await tasksByStatusView(objectMetadataMap),
...(isWorkflowEnabled ? [await workflowsAllView(objectMetadataMap)] : []),
companiesAllView(objectMetadataMap),
peopleAllView(objectMetadataMap),
opportunitiesAllView(objectMetadataMap),
opportunitiesByStageView(objectMetadataMap),
notesAllView(objectMetadataMap),
tasksAllView(objectMetadataMap),
tasksByStatusView(objectMetadataMap),
...(isWorkflowEnabled
? [
workflowsAllView(objectMetadataMap),
workflowVersionsAllView(objectMetadataMap),
workflowRunsAllView(objectMetadataMap),
]
: []),
];
const viewDefinitionsWithId = viewDefinitions.map((viewDefinition) => ({

View File

@ -5,7 +5,7 @@ import {
} 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 companiesAllView = async (
export const companiesAllView = (
objectMetadataMap: Record<string, ObjectMetadataEntity>,
) => {
return {

View File

@ -5,7 +5,7 @@ import {
} 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 = async (
export const notesAllView = (
objectMetadataMap: Record<string, ObjectMetadataEntity>,
) => {
return {

View File

@ -2,7 +2,7 @@ import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadat
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 = async (
export const opportunitiesAllView = (
objectMetadataMap: Record<string, ObjectMetadataEntity>,
) => {
return {

View File

@ -2,7 +2,7 @@ import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadat
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 = async (
export const opportunitiesByStageView = (
objectMetadataMap: Record<string, ObjectMetadataEntity>,
) => {
return {

View File

@ -5,7 +5,7 @@ import {
} 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 = async (
export const peopleAllView = (
objectMetadataMap: Record<string, ObjectMetadataEntity>,
) => {
return {

View File

@ -5,7 +5,7 @@ import {
} 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 = async (
export const tasksAllView = (
objectMetadataMap: Record<string, ObjectMetadataEntity>,
) => {
return {

View File

@ -5,7 +5,7 @@ import {
} 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 tasksByStatusView = async (
export const tasksByStatusView = (
objectMetadataMap: Record<string, ObjectMetadataEntity>,
) => {
return {

View File

@ -0,0 +1,56 @@
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';
export const workflowRunsAllView = (
objectMetadataMap: Record<string, ObjectMetadataEntity>,
) => {
return {
name: 'All Workflow Runs',
objectMetadataId: objectMetadataMap[STANDARD_OBJECT_IDS.workflowRun].id,
type: 'table',
key: 'INDEX',
position: 0,
icon: 'IconHistory',
kanbanFieldMetadataId: '',
filters: [],
fields: [
{
fieldMetadataId:
objectMetadataMap[STANDARD_OBJECT_IDS.workflowRun].fields[
WORKFLOW_RUN_STANDARD_FIELD_IDS.name
],
position: 0,
isVisible: true,
size: 210,
},
{
fieldMetadataId:
objectMetadataMap[STANDARD_OBJECT_IDS.workflowRun].fields[
WORKFLOW_RUN_STANDARD_FIELD_IDS.status
],
position: 1,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataMap[STANDARD_OBJECT_IDS.workflowRun].fields[
WORKFLOW_RUN_STANDARD_FIELD_IDS.startedAt
],
position: 2,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataMap[STANDARD_OBJECT_IDS.workflowRun].fields[
WORKFLOW_RUN_STANDARD_FIELD_IDS.endedAt
],
position: 3,
isVisible: true,
size: 150,
},
],
};
};

View File

@ -0,0 +1,56 @@
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import { WORKFLOW_VERSION_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 workflowVersionsAllView = (
objectMetadataMap: Record<string, ObjectMetadataEntity>,
) => {
return {
name: 'All Workflow Versions',
objectMetadataId: objectMetadataMap[STANDARD_OBJECT_IDS.workflowVersion].id,
type: 'table',
key: 'INDEX',
position: 0,
icon: 'IconVersions',
kanbanFieldMetadataId: '',
filters: [],
fields: [
{
fieldMetadataId:
objectMetadataMap[STANDARD_OBJECT_IDS.workflowVersion].fields[
WORKFLOW_VERSION_STANDARD_FIELD_IDS.name
],
position: 0,
isVisible: true,
size: 210,
},
{
fieldMetadataId:
objectMetadataMap[STANDARD_OBJECT_IDS.workflowVersion].fields[
WORKFLOW_VERSION_STANDARD_FIELD_IDS.status
],
position: 1,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataMap[STANDARD_OBJECT_IDS.workflowVersion].fields[
WORKFLOW_VERSION_STANDARD_FIELD_IDS.trigger
],
position: 2,
isVisible: true,
size: 150,
},
{
fieldMetadataId:
objectMetadataMap[STANDARD_OBJECT_IDS.workflowVersion].fields[
WORKFLOW_VERSION_STANDARD_FIELD_IDS.steps
],
position: 3,
isVisible: true,
size: 150,
},
],
};
};

View File

@ -2,7 +2,7 @@ import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadat
import { WORKFLOW_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 workflowsAllView = async (
export const workflowsAllView = (
objectMetadataMap: Record<string, ObjectMetadataEntity>,
) => {
return {

View File

@ -412,11 +412,13 @@ export const WORKFLOW_STANDARD_FIELD_IDS = {
};
export const WORKFLOW_RUN_STANDARD_FIELD_IDS = {
name: '20202020-b840-4253-aef9-4e5013694587',
workflowVersion: '20202020-2f52-4ba8-8dc4-d0d6adb9578d',
workflow: '20202020-8c57-4e7f-84f5-f373f68e1b82',
startedAt: '20202020-a234-4e2d-bd15-85bcea6bb183',
endedAt: '20202020-e1c1-4b6b-bbbd-b2beaf2e159e',
status: '20202020-6b3e-4f9c-8c2b-2e5b8e6d6f3b',
position: '20202020-7802-4c40-ae89-1f506fe3365c',
createdBy: '20202020-6007-401a-8aa5-e6f38581a6f3',
output: '20202020-7be4-4db2-8ac6-3ff0d740843d',
};
@ -426,6 +428,7 @@ export const WORKFLOW_VERSION_STANDARD_FIELD_IDS = {
workflow: '20202020-afa3-46c3-91b0-0631ca6aa1c8',
trigger: '20202020-4eae-43e7-86e0-212b41a30b48',
status: '20202020-5a34-440e-8a25-39d8c3d1d4cf',
position: '20202020-791d-4950-ab28-0e704767ae1c',
runs: '20202020-1d08-46df-901a-85045f18099a',
steps: '20202020-5988-4a64-b94a-1f9b7b989039',
};