[COMMAND MENU ITEMS] Remove standard front components (#18581)

All standard command menu items will link to an engine component instead
of standard front components.
This commit is contained in:
Raphaël Bosi
2026-03-12 15:18:00 +01:00
committed by GitHub
parent c1da7be6d7
commit c9deab4373
186 changed files with 477 additions and 8472 deletions
@@ -1,66 +0,0 @@
name: CI Twenty Standard Front Component
on:
pull_request:
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
jobs:
changed-files-check:
uses: ./.github/workflows/changed-files.yaml
with:
files: |
package.json
yarn.lock
packages/twenty-standard-application/**
packages/twenty-sdk/**
packages/twenty-shared/**
standard-front-component-build-check:
needs: changed-files-check
if: needs.changed-files-check.outputs.any_changed == 'true'
timeout-minutes: 30
runs-on: ubuntu-latest
steps:
- name: Fetch custom Github Actions and base branch history
uses: actions/checkout@v4
with:
fetch-depth: 10
- name: Install dependencies
uses: ./.github/actions/yarn-install
- name: Build twenty-shared
run: npx nx build twenty-shared
- name: Build twenty-sdk
run: npx nx build twenty-sdk
- name: Build twenty-standard-application
run: npx nx build twenty-standard-application
- name: Check for pending standard front component build
run: |
if ! git diff --quiet -- packages/twenty-standard-application/src/build packages/twenty-standard-application/src/standard-front-component-build-manifest.ts; then
echo "::error::Standard front component build output is out of date. Please run 'npx nx build twenty-standard-application' and commit the changes."
echo ""
echo "The following changes were detected:"
echo "==================================================="
git diff -- packages/twenty-standard-application/src/build packages/twenty-standard-application/src/standard-front-component-build-manifest.ts
echo "==================================================="
exit 1
fi
ci-twenty-standard-front-component-status-check:
if: always() && !cancelled()
timeout-minutes: 5
runs-on: ubuntu-latest
needs:
[
changed-files-check,
standard-front-component-build-check,
]
steps:
- name: Fail job if any needs failed
if: contains(needs.*.result, 'failure')
run: exit 1
-1
View File
@@ -207,7 +207,6 @@
"packages/twenty-e2e-testing",
"packages/twenty-shared",
"packages/twenty-sdk",
"packages/twenty-standard-application",
"packages/twenty-apps",
"packages/twenty-cli",
"packages/create-twenty-app",
+1 -4
View File
@@ -15,7 +15,6 @@ COPY ./packages/twenty-ui/package.json /app/packages/twenty-ui/
COPY ./packages/twenty-shared/package.json /app/packages/twenty-shared/
COPY ./packages/twenty-front/package.json /app/packages/twenty-front/
COPY ./packages/twenty-sdk/package.json /app/packages/twenty-sdk/
COPY ./packages/twenty-standard-application/package.json /app/packages/twenty-standard-application/
# Install all dependencies
RUN yarn && yarn cache clean && npx nx reset
@@ -29,13 +28,11 @@ COPY ./packages/twenty-emails /app/packages/twenty-emails
COPY ./packages/twenty-shared /app/packages/twenty-shared
COPY ./packages/twenty-ui /app/packages/twenty-ui
COPY ./packages/twenty-sdk /app/packages/twenty-sdk
COPY ./packages/twenty-standard-application /app/packages/twenty-standard-application
COPY ./packages/twenty-server /app/packages/twenty-server
RUN npx nx build twenty-standard-application
RUN npx nx run twenty-server:build
RUN yarn workspaces focus --production twenty-emails twenty-shared twenty-sdk twenty-standard-application twenty-server
RUN yarn workspaces focus --production twenty-emails twenty-shared twenty-sdk twenty-server
# Build the front
FROM common-deps AS twenty-front-build
@@ -1575,8 +1575,13 @@ export type EmailsConfiguration = {
export enum EngineComponentKey {
ACTIVATE_WORKFLOW = 'ACTIVATE_WORKFLOW',
ADD_NODE_WORKFLOW = 'ADD_NODE_WORKFLOW',
ADD_TO_FAVORITES = 'ADD_TO_FAVORITES',
ASK_AI = 'ASK_AI',
CANCEL_DASHBOARD_LAYOUT = 'CANCEL_DASHBOARD_LAYOUT',
CANCEL_RECORD_PAGE_LAYOUT = 'CANCEL_RECORD_PAGE_LAYOUT',
CREATE_NEW_RECORD = 'CREATE_NEW_RECORD',
CREATE_NEW_VIEW = 'CREATE_NEW_VIEW',
DEACTIVATE_WORKFLOW = 'DEACTIVATE_WORKFLOW',
DELETE_MULTIPLE_RECORDS = 'DELETE_MULTIPLE_RECORDS',
DELETE_SINGLE_RECORD = 'DELETE_SINGLE_RECORD',
@@ -1585,16 +1590,49 @@ export enum EngineComponentKey {
DISCARD_DRAFT_WORKFLOW = 'DISCARD_DRAFT_WORKFLOW',
DUPLICATE_DASHBOARD = 'DUPLICATE_DASHBOARD',
DUPLICATE_WORKFLOW = 'DUPLICATE_WORKFLOW',
EDIT_DASHBOARD_LAYOUT = 'EDIT_DASHBOARD_LAYOUT',
EDIT_RECORD_PAGE_LAYOUT = 'EDIT_RECORD_PAGE_LAYOUT',
EXPORT_FROM_RECORD_INDEX = 'EXPORT_FROM_RECORD_INDEX',
EXPORT_FROM_RECORD_SHOW = 'EXPORT_FROM_RECORD_SHOW',
EXPORT_MULTIPLE_RECORDS = 'EXPORT_MULTIPLE_RECORDS',
EXPORT_NOTE_TO_PDF = 'EXPORT_NOTE_TO_PDF',
EXPORT_VIEW = 'EXPORT_VIEW',
GO_TO_COMPANIES = 'GO_TO_COMPANIES',
GO_TO_DASHBOARDS = 'GO_TO_DASHBOARDS',
GO_TO_NOTES = 'GO_TO_NOTES',
GO_TO_OPPORTUNITIES = 'GO_TO_OPPORTUNITIES',
GO_TO_PEOPLE = 'GO_TO_PEOPLE',
GO_TO_RUNS = 'GO_TO_RUNS',
GO_TO_SETTINGS = 'GO_TO_SETTINGS',
GO_TO_TASKS = 'GO_TO_TASKS',
GO_TO_WORKFLOWS = 'GO_TO_WORKFLOWS',
HIDE_DELETED_RECORDS = 'HIDE_DELETED_RECORDS',
IMPORT_RECORDS = 'IMPORT_RECORDS',
MERGE_MULTIPLE_RECORDS = 'MERGE_MULTIPLE_RECORDS',
NAVIGATE_TO_NEXT_RECORD = 'NAVIGATE_TO_NEXT_RECORD',
NAVIGATE_TO_PREVIOUS_RECORD = 'NAVIGATE_TO_PREVIOUS_RECORD',
REMOVE_FROM_FAVORITES = 'REMOVE_FROM_FAVORITES',
RESTORE_MULTIPLE_RECORDS = 'RESTORE_MULTIPLE_RECORDS',
RESTORE_SINGLE_RECORD = 'RESTORE_SINGLE_RECORD',
SAVE_DASHBOARD_LAYOUT = 'SAVE_DASHBOARD_LAYOUT',
SAVE_RECORD_PAGE_LAYOUT = 'SAVE_RECORD_PAGE_LAYOUT',
SEARCH_RECORDS = 'SEARCH_RECORDS',
SEARCH_RECORDS_FALLBACK = 'SEARCH_RECORDS_FALLBACK',
SEE_ACTIVE_VERSION_WORKFLOW = 'SEE_ACTIVE_VERSION_WORKFLOW',
SEE_DELETED_RECORDS = 'SEE_DELETED_RECORDS',
SEE_RUNS_WORKFLOW = 'SEE_RUNS_WORKFLOW',
SEE_RUNS_WORKFLOW_VERSION = 'SEE_RUNS_WORKFLOW_VERSION',
SEE_VERSIONS_WORKFLOW = 'SEE_VERSIONS_WORKFLOW',
SEE_VERSIONS_WORKFLOW_VERSION = 'SEE_VERSIONS_WORKFLOW_VERSION',
SEE_VERSION_WORKFLOW_RUN = 'SEE_VERSION_WORKFLOW_RUN',
SEE_WORKFLOW_WORKFLOW_RUN = 'SEE_WORKFLOW_WORKFLOW_RUN',
SEE_WORKFLOW_WORKFLOW_VERSION = 'SEE_WORKFLOW_WORKFLOW_VERSION',
STOP_WORKFLOW_RUN = 'STOP_WORKFLOW_RUN',
TEST_WORKFLOW = 'TEST_WORKFLOW',
TIDY_UP_WORKFLOW = 'TIDY_UP_WORKFLOW',
USE_AS_DRAFT_WORKFLOW_VERSION = 'USE_AS_DRAFT_WORKFLOW_VERSION'
UPDATE_MULTIPLE_RECORDS = 'UPDATE_MULTIPLE_RECORDS',
USE_AS_DRAFT_WORKFLOW_VERSION = 'USE_AS_DRAFT_WORKFLOW_VERSION',
VIEW_PREVIOUS_AI_CHATS = 'VIEW_PREVIOUS_AI_CHATS'
}
export type EnterpriseLicenseInfoDto = {
@@ -1,24 +1,53 @@
import { CommandLink } from '@/command-menu-item/display/components/CommandLink';
import { CommandMenuItemOpenSidePanelPage } from '@/command-menu-item/display/components/CommandMenuItemOpenSidePanelPage';
import { DeleteMultipleRecordsCommand } from '@/command-menu-item/record/multiple-records/components/DeleteMultipleRecordsCommand';
import { DestroyMultipleRecordsCommand } from '@/command-menu-item/record/multiple-records/components/DestroyMultipleRecordsCommand';
import { ExportMultipleRecordsCommand } from '@/command-menu-item/record/multiple-records/components/ExportMultipleRecordsCommand';
import { MergeMultipleRecordsCommand } from '@/command-menu-item/record/multiple-records/components/MergeMultipleRecordsCommand';
import { RestoreMultipleRecordsCommand } from '@/command-menu-item/record/multiple-records/components/RestoreMultipleRecordsCommand';
import { UpdateMultipleRecordsCommand } from '@/command-menu-item/record/multiple-records/components/UpdateMultipleRecordsCommand';
import { CreateNewIndexRecordNoSelectionRecordCommand } from '@/command-menu-item/record/no-selection/components/CreateNewIndexRecordNoSelectionRecordCommand';
import { CreateNewViewNoSelectionRecordCommand } from '@/command-menu-item/record/no-selection/components/CreateNewViewNoSelectionRecordCommand';
import { HideDeletedRecordsNoSelectionRecordCommand } from '@/command-menu-item/record/no-selection/components/HideDeletedRecordsNoSelectionRecordCommand';
import { ImportRecordsNoSelectionRecordCommand } from '@/command-menu-item/record/no-selection/components/ImportRecordsNoSelectionRecordCommand';
import { SeeDeletedRecordsNoSelectionRecordCommand } from '@/command-menu-item/record/no-selection/components/SeeDeletedRecordsNoSelectionRecordCommand';
import { AddToFavoritesSingleRecordCommand } from '@/command-menu-item/record/single-record/components/AddToFavoritesSingleRecordCommand';
import { DeleteSingleRecordCommand } from '@/command-menu-item/record/single-record/components/DeleteSingleRecordCommand';
import { DestroySingleRecordCommand } from '@/command-menu-item/record/single-record/components/DestroySingleRecordCommand';
import { ExportNoteSingleRecordCommand } from '@/command-menu-item/record/single-record/components/ExportNoteSingleRecordCommand';
import { ExportSingleRecordCommand } from '@/command-menu-item/record/single-record/components/ExportSingleRecordCommand';
import { NavigateToNextRecordSingleRecordCommand } from '@/command-menu-item/record/single-record/components/NavigateToNextRecordSingleRecordCommand';
import { NavigateToPreviousRecordSingleRecordCommand } from '@/command-menu-item/record/single-record/components/NavigateToPreviousRecordSingleRecordCommand';
import { RemoveFromFavoritesSingleRecordCommand } from '@/command-menu-item/record/single-record/components/RemoveFromFavoritesSingleRecordCommand';
import { RestoreSingleRecordCommand } from '@/command-menu-item/record/single-record/components/RestoreSingleRecordCommand';
import { CancelDashboardSingleRecordCommand } from '@/command-menu-item/record/single-record/dashboard/components/CancelDashboardSingleRecordCommand';
import { DuplicateDashboardSingleRecordCommand } from '@/command-menu-item/record/single-record/dashboard/components/DuplicateDashboardSingleRecordCommand';
import { EditDashboardSingleRecordCommand } from '@/command-menu-item/record/single-record/dashboard/components/EditDashboardSingleRecordCommand';
import { SaveDashboardSingleRecordCommand } from '@/command-menu-item/record/single-record/dashboard/components/SaveDashboardSingleRecordCommand';
import { CancelRecordPageLayoutSingleRecordCommand } from '@/command-menu-item/record/single-record/record-page-layout/components/CancelRecordPageLayoutSingleRecordCommand';
import { EditRecordPageLayoutSingleRecordCommand } from '@/command-menu-item/record/single-record/record-page-layout/components/EditRecordPageLayoutSingleRecordCommand';
import { SaveRecordPageLayoutSingleRecordCommand } from '@/command-menu-item/record/single-record/record-page-layout/components/SaveRecordPageLayoutSingleRecordCommand';
import { SeeVersionWorkflowRunSingleRecordCommand } from '@/command-menu-item/record/single-record/workflow-runs/components/SeeVersionWorkflowRunSingleRecordCommand';
import { SeeWorkflowWorkflowRunSingleRecordCommand } from '@/command-menu-item/record/single-record/workflow-runs/components/SeeWorkflowWorkflowRunSingleRecordCommand';
import { StopWorkflowRunSingleRecordCommand } from '@/command-menu-item/record/single-record/workflow-runs/components/StopWorkflowRunSingleRecordCommand';
import { SeeRunsWorkflowVersionSingleRecordCommand } from '@/command-menu-item/record/single-record/workflow-versions/components/SeeRunsWorkflowVersionSingleRecordCommand';
import { SeeVersionsWorkflowVersionSingleRecordCommand } from '@/command-menu-item/record/single-record/workflow-versions/components/SeeVersionsWorkflowVersionSingleRecordCommand';
import { SeeWorkflowWorkflowVersionSingleRecordCommand } from '@/command-menu-item/record/single-record/workflow-versions/components/SeeWorkflowWorkflowVersionSingleRecordCommand';
import { UseAsDraftWorkflowVersionSingleRecordCommand } from '@/command-menu-item/record/single-record/workflow-versions/components/UseAsDraftWorkflowVersionSingleRecordCommand';
import { ActivateWorkflowSingleRecordCommand } from '@/command-menu-item/record/single-record/workflow/components/ActivateWorkflowSingleRecordCommand';
import { AddNodeWorkflowSingleRecordCommand } from '@/command-menu-item/record/single-record/workflow/components/AddNodeWorkflowSingleRecordCommand';
import { DeactivateWorkflowSingleRecordCommand } from '@/command-menu-item/record/single-record/workflow/components/DeactivateWorkflowSingleRecordCommand';
import { DiscardDraftWorkflowSingleRecordCommand } from '@/command-menu-item/record/single-record/workflow/components/DiscardDraftWorkflowSingleRecordCommand';
import { DuplicateWorkflowSingleRecordCommand } from '@/command-menu-item/record/single-record/workflow/components/DuplicateWorkflowSingleRecordCommand';
import { SeeActiveVersionWorkflowSingleRecordCommand } from '@/command-menu-item/record/single-record/workflow/components/SeeActiveVersionWorkflowSingleRecordCommand';
import { SeeRunsWorkflowSingleRecordCommand } from '@/command-menu-item/record/single-record/workflow/components/SeeRunsWorkflowSingleRecordCommand';
import { SeeVersionsWorkflowSingleRecordCommand } from '@/command-menu-item/record/single-record/workflow/components/SeeVersionsWorkflowSingleRecordCommand';
import { TestWorkflowSingleRecordCommand } from '@/command-menu-item/record/single-record/workflow/components/TestWorkflowSingleRecordCommand';
import { TidyUpWorkflowSingleRecordCommand } from '@/command-menu-item/record/single-record/workflow/components/TidyUpWorkflowSingleRecordCommand';
import { StopWorkflowRunSingleRecordCommand } from '@/command-menu-item/record/single-record/workflow-runs/components/StopWorkflowRunSingleRecordCommand';
import { UseAsDraftWorkflowVersionSingleRecordCommand } from '@/command-menu-item/record/single-record/workflow-versions/components/UseAsDraftWorkflowVersionSingleRecordCommand';
import { CoreObjectNamePlural } from '@/object-metadata/types/CoreObjectNamePlural';
import { msg } from '@lingui/core/macro';
import { AppPath, SettingsPath, SidePanelPages } from 'twenty-shared/types';
import { IconHistory, IconSearch, IconSparkles } from 'twenty-ui/display';
import { EngineComponentKey } from '~/generated-metadata/graphql';
export const ENGINE_COMPONENT_KEY_COMPONENT_MAP: Record<
@@ -74,4 +103,160 @@ export const ENGINE_COMPONENT_KEY_COMPONENT_MAP: Record<
<SaveDashboardSingleRecordCommand />
),
[EngineComponentKey.TIDY_UP_WORKFLOW]: <TidyUpWorkflowSingleRecordCommand />,
[EngineComponentKey.NAVIGATE_TO_NEXT_RECORD]: (
<NavigateToNextRecordSingleRecordCommand />
),
[EngineComponentKey.NAVIGATE_TO_PREVIOUS_RECORD]: (
<NavigateToPreviousRecordSingleRecordCommand />
),
[EngineComponentKey.EXPORT_NOTE_TO_PDF]: <ExportNoteSingleRecordCommand />,
[EngineComponentKey.EXPORT_FROM_RECORD_INDEX]: (
<ExportMultipleRecordsCommand />
),
[EngineComponentKey.EXPORT_FROM_RECORD_SHOW]: <ExportSingleRecordCommand />,
[EngineComponentKey.EXPORT_MULTIPLE_RECORDS]: (
<ExportMultipleRecordsCommand />
),
[EngineComponentKey.UPDATE_MULTIPLE_RECORDS]: (
<UpdateMultipleRecordsCommand />
),
[EngineComponentKey.IMPORT_RECORDS]: (
<ImportRecordsNoSelectionRecordCommand />
),
[EngineComponentKey.EXPORT_VIEW]: <ExportMultipleRecordsCommand />,
[EngineComponentKey.SEE_DELETED_RECORDS]: (
<SeeDeletedRecordsNoSelectionRecordCommand />
),
[EngineComponentKey.CREATE_NEW_VIEW]: (
<CreateNewViewNoSelectionRecordCommand />
),
[EngineComponentKey.HIDE_DELETED_RECORDS]: (
<HideDeletedRecordsNoSelectionRecordCommand />
),
[EngineComponentKey.EDIT_RECORD_PAGE_LAYOUT]: (
<EditRecordPageLayoutSingleRecordCommand />
),
[EngineComponentKey.CANCEL_RECORD_PAGE_LAYOUT]: (
<CancelRecordPageLayoutSingleRecordCommand />
),
[EngineComponentKey.EDIT_DASHBOARD_LAYOUT]: (
<EditDashboardSingleRecordCommand />
),
[EngineComponentKey.CANCEL_DASHBOARD_LAYOUT]: (
<CancelDashboardSingleRecordCommand />
),
[EngineComponentKey.GO_TO_PEOPLE]: (
<CommandLink
to={AppPath.RecordIndexPage}
params={{ objectNamePlural: CoreObjectNamePlural.Person }}
/>
),
[EngineComponentKey.GO_TO_COMPANIES]: (
<CommandLink
to={AppPath.RecordIndexPage}
params={{ objectNamePlural: CoreObjectNamePlural.Company }}
/>
),
[EngineComponentKey.GO_TO_DASHBOARDS]: (
<CommandLink
to={AppPath.RecordIndexPage}
params={{ objectNamePlural: CoreObjectNamePlural.Dashboard }}
/>
),
[EngineComponentKey.GO_TO_OPPORTUNITIES]: (
<CommandLink
to={AppPath.RecordIndexPage}
params={{
objectNamePlural: CoreObjectNamePlural.Opportunity,
}}
/>
),
[EngineComponentKey.GO_TO_SETTINGS]: (
<CommandLink
to={AppPath.SettingsCatchAll}
params={{
'*': SettingsPath.ProfilePage,
}}
/>
),
[EngineComponentKey.GO_TO_TASKS]: (
<CommandLink
to={AppPath.RecordIndexPage}
params={{ objectNamePlural: CoreObjectNamePlural.Task }}
/>
),
[EngineComponentKey.GO_TO_NOTES]: (
<CommandLink
to={AppPath.RecordIndexPage}
params={{ objectNamePlural: CoreObjectNamePlural.Note }}
/>
),
[EngineComponentKey.GO_TO_WORKFLOWS]: (
<CommandLink
to={AppPath.RecordIndexPage}
params={{ objectNamePlural: CoreObjectNamePlural.Workflow }}
/>
),
[EngineComponentKey.GO_TO_RUNS]: (
<CommandLink
to={AppPath.RecordIndexPage}
params={{ objectNamePlural: CoreObjectNamePlural.WorkflowRun }}
/>
),
[EngineComponentKey.SEARCH_RECORDS]: (
<CommandMenuItemOpenSidePanelPage
page={SidePanelPages.SearchRecords}
pageTitle={msg`Search`}
pageIcon={IconSearch}
shouldResetSearchState={true}
/>
),
[EngineComponentKey.SEARCH_RECORDS_FALLBACK]: (
<CommandMenuItemOpenSidePanelPage
page={SidePanelPages.SearchRecords}
pageTitle={msg`Search`}
pageIcon={IconSearch}
/>
),
[EngineComponentKey.ASK_AI]: (
<CommandMenuItemOpenSidePanelPage
page={SidePanelPages.AskAI}
pageTitle={msg`Ask AI`}
pageIcon={IconSparkles}
/>
),
[EngineComponentKey.VIEW_PREVIOUS_AI_CHATS]: (
<CommandMenuItemOpenSidePanelPage
page={SidePanelPages.ViewPreviousAIChats}
pageTitle={msg`View Previous AI Chats`}
pageIcon={IconHistory}
/>
),
[EngineComponentKey.SEE_ACTIVE_VERSION_WORKFLOW]: (
<SeeActiveVersionWorkflowSingleRecordCommand />
),
[EngineComponentKey.SEE_RUNS_WORKFLOW]: (
<SeeRunsWorkflowSingleRecordCommand />
),
[EngineComponentKey.SEE_VERSIONS_WORKFLOW]: (
<SeeVersionsWorkflowSingleRecordCommand />
),
[EngineComponentKey.ADD_NODE_WORKFLOW]: (
<AddNodeWorkflowSingleRecordCommand />
),
[EngineComponentKey.SEE_VERSION_WORKFLOW_RUN]: (
<SeeVersionWorkflowRunSingleRecordCommand />
),
[EngineComponentKey.SEE_WORKFLOW_WORKFLOW_RUN]: (
<SeeWorkflowWorkflowRunSingleRecordCommand />
),
[EngineComponentKey.SEE_RUNS_WORKFLOW_VERSION]: (
<SeeRunsWorkflowVersionSingleRecordCommand />
),
[EngineComponentKey.SEE_WORKFLOW_WORKFLOW_VERSION]: (
<SeeWorkflowWorkflowVersionSingleRecordCommand />
),
[EngineComponentKey.SEE_VERSIONS_WORKFLOW_VERSION]: (
<SeeVersionsWorkflowVersionSingleRecordCommand />
),
};
@@ -2070,6 +2070,8 @@ type CommandMenuItem {
}
enum EngineComponentKey {
NAVIGATE_TO_NEXT_RECORD
NAVIGATE_TO_PREVIOUS_RECORD
CREATE_NEW_RECORD
DELETE_SINGLE_RECORD
DELETE_MULTIPLE_RECORDS
@@ -2079,18 +2081,54 @@ enum EngineComponentKey {
DESTROY_MULTIPLE_RECORDS
ADD_TO_FAVORITES
REMOVE_FROM_FAVORITES
EXPORT_NOTE_TO_PDF
EXPORT_FROM_RECORD_INDEX
EXPORT_FROM_RECORD_SHOW
UPDATE_MULTIPLE_RECORDS
MERGE_MULTIPLE_RECORDS
EXPORT_MULTIPLE_RECORDS
IMPORT_RECORDS
EXPORT_VIEW
SEE_DELETED_RECORDS
CREATE_NEW_VIEW
HIDE_DELETED_RECORDS
GO_TO_PEOPLE
GO_TO_COMPANIES
GO_TO_DASHBOARDS
GO_TO_OPPORTUNITIES
GO_TO_SETTINGS
GO_TO_TASKS
GO_TO_NOTES
EDIT_RECORD_PAGE_LAYOUT
SAVE_RECORD_PAGE_LAYOUT
CANCEL_RECORD_PAGE_LAYOUT
EDIT_DASHBOARD_LAYOUT
SAVE_DASHBOARD_LAYOUT
CANCEL_DASHBOARD_LAYOUT
DUPLICATE_DASHBOARD
DUPLICATE_WORKFLOW
GO_TO_WORKFLOWS
ACTIVATE_WORKFLOW
DEACTIVATE_WORKFLOW
DISCARD_DRAFT_WORKFLOW
TEST_WORKFLOW
STOP_WORKFLOW_RUN
USE_AS_DRAFT_WORKFLOW_VERSION
SAVE_RECORD_PAGE_LAYOUT
SAVE_DASHBOARD_LAYOUT
SEE_ACTIVE_VERSION_WORKFLOW
SEE_RUNS_WORKFLOW
SEE_VERSIONS_WORKFLOW
ADD_NODE_WORKFLOW
TIDY_UP_WORKFLOW
DUPLICATE_WORKFLOW
GO_TO_RUNS
SEE_VERSION_WORKFLOW_RUN
SEE_WORKFLOW_WORKFLOW_RUN
STOP_WORKFLOW_RUN
SEE_RUNS_WORKFLOW_VERSION
SEE_WORKFLOW_WORKFLOW_VERSION
USE_AS_DRAFT_WORKFLOW_VERSION
SEE_VERSIONS_WORKFLOW_VERSION
SEARCH_RECORDS
SEARCH_RECORDS_FALLBACK
ASK_AI
VIEW_PREVIOUS_AI_CHATS
}
enum CommandMenuItemAvailabilityType {
@@ -1806,7 +1806,7 @@ export interface CommandMenuItem {
__typename: 'CommandMenuItem'
}
export type EngineComponentKey = 'CREATE_NEW_RECORD' | 'DELETE_SINGLE_RECORD' | 'DELETE_MULTIPLE_RECORDS' | 'RESTORE_SINGLE_RECORD' | 'RESTORE_MULTIPLE_RECORDS' | 'DESTROY_SINGLE_RECORD' | 'DESTROY_MULTIPLE_RECORDS' | 'ADD_TO_FAVORITES' | 'REMOVE_FROM_FAVORITES' | 'MERGE_MULTIPLE_RECORDS' | 'DUPLICATE_DASHBOARD' | 'DUPLICATE_WORKFLOW' | 'ACTIVATE_WORKFLOW' | 'DEACTIVATE_WORKFLOW' | 'DISCARD_DRAFT_WORKFLOW' | 'TEST_WORKFLOW' | 'STOP_WORKFLOW_RUN' | 'USE_AS_DRAFT_WORKFLOW_VERSION' | 'SAVE_RECORD_PAGE_LAYOUT' | 'SAVE_DASHBOARD_LAYOUT' | 'TIDY_UP_WORKFLOW'
export type EngineComponentKey = 'NAVIGATE_TO_NEXT_RECORD' | 'NAVIGATE_TO_PREVIOUS_RECORD' | 'CREATE_NEW_RECORD' | 'DELETE_SINGLE_RECORD' | 'DELETE_MULTIPLE_RECORDS' | 'RESTORE_SINGLE_RECORD' | 'RESTORE_MULTIPLE_RECORDS' | 'DESTROY_SINGLE_RECORD' | 'DESTROY_MULTIPLE_RECORDS' | 'ADD_TO_FAVORITES' | 'REMOVE_FROM_FAVORITES' | 'EXPORT_NOTE_TO_PDF' | 'EXPORT_FROM_RECORD_INDEX' | 'EXPORT_FROM_RECORD_SHOW' | 'UPDATE_MULTIPLE_RECORDS' | 'MERGE_MULTIPLE_RECORDS' | 'EXPORT_MULTIPLE_RECORDS' | 'IMPORT_RECORDS' | 'EXPORT_VIEW' | 'SEE_DELETED_RECORDS' | 'CREATE_NEW_VIEW' | 'HIDE_DELETED_RECORDS' | 'GO_TO_PEOPLE' | 'GO_TO_COMPANIES' | 'GO_TO_DASHBOARDS' | 'GO_TO_OPPORTUNITIES' | 'GO_TO_SETTINGS' | 'GO_TO_TASKS' | 'GO_TO_NOTES' | 'EDIT_RECORD_PAGE_LAYOUT' | 'SAVE_RECORD_PAGE_LAYOUT' | 'CANCEL_RECORD_PAGE_LAYOUT' | 'EDIT_DASHBOARD_LAYOUT' | 'SAVE_DASHBOARD_LAYOUT' | 'CANCEL_DASHBOARD_LAYOUT' | 'DUPLICATE_DASHBOARD' | 'GO_TO_WORKFLOWS' | 'ACTIVATE_WORKFLOW' | 'DEACTIVATE_WORKFLOW' | 'DISCARD_DRAFT_WORKFLOW' | 'TEST_WORKFLOW' | 'SEE_ACTIVE_VERSION_WORKFLOW' | 'SEE_RUNS_WORKFLOW' | 'SEE_VERSIONS_WORKFLOW' | 'ADD_NODE_WORKFLOW' | 'TIDY_UP_WORKFLOW' | 'DUPLICATE_WORKFLOW' | 'GO_TO_RUNS' | 'SEE_VERSION_WORKFLOW_RUN' | 'SEE_WORKFLOW_WORKFLOW_RUN' | 'STOP_WORKFLOW_RUN' | 'SEE_RUNS_WORKFLOW_VERSION' | 'SEE_WORKFLOW_WORKFLOW_VERSION' | 'USE_AS_DRAFT_WORKFLOW_VERSION' | 'SEE_VERSIONS_WORKFLOW_VERSION' | 'SEARCH_RECORDS' | 'SEARCH_RECORDS_FALLBACK' | 'ASK_AI' | 'VIEW_PREVIOUS_AI_CHATS'
export type CommandMenuItemAvailabilityType = 'GLOBAL' | 'RECORD_SELECTION' | 'FALLBACK'
@@ -8586,6 +8586,8 @@ export const enumLogicFunctionExecutionStatus = {
}
export const enumEngineComponentKey = {
NAVIGATE_TO_NEXT_RECORD: 'NAVIGATE_TO_NEXT_RECORD' as const,
NAVIGATE_TO_PREVIOUS_RECORD: 'NAVIGATE_TO_PREVIOUS_RECORD' as const,
CREATE_NEW_RECORD: 'CREATE_NEW_RECORD' as const,
DELETE_SINGLE_RECORD: 'DELETE_SINGLE_RECORD' as const,
DELETE_MULTIPLE_RECORDS: 'DELETE_MULTIPLE_RECORDS' as const,
@@ -8595,18 +8597,54 @@ export const enumEngineComponentKey = {
DESTROY_MULTIPLE_RECORDS: 'DESTROY_MULTIPLE_RECORDS' as const,
ADD_TO_FAVORITES: 'ADD_TO_FAVORITES' as const,
REMOVE_FROM_FAVORITES: 'REMOVE_FROM_FAVORITES' as const,
EXPORT_NOTE_TO_PDF: 'EXPORT_NOTE_TO_PDF' as const,
EXPORT_FROM_RECORD_INDEX: 'EXPORT_FROM_RECORD_INDEX' as const,
EXPORT_FROM_RECORD_SHOW: 'EXPORT_FROM_RECORD_SHOW' as const,
UPDATE_MULTIPLE_RECORDS: 'UPDATE_MULTIPLE_RECORDS' as const,
MERGE_MULTIPLE_RECORDS: 'MERGE_MULTIPLE_RECORDS' as const,
EXPORT_MULTIPLE_RECORDS: 'EXPORT_MULTIPLE_RECORDS' as const,
IMPORT_RECORDS: 'IMPORT_RECORDS' as const,
EXPORT_VIEW: 'EXPORT_VIEW' as const,
SEE_DELETED_RECORDS: 'SEE_DELETED_RECORDS' as const,
CREATE_NEW_VIEW: 'CREATE_NEW_VIEW' as const,
HIDE_DELETED_RECORDS: 'HIDE_DELETED_RECORDS' as const,
GO_TO_PEOPLE: 'GO_TO_PEOPLE' as const,
GO_TO_COMPANIES: 'GO_TO_COMPANIES' as const,
GO_TO_DASHBOARDS: 'GO_TO_DASHBOARDS' as const,
GO_TO_OPPORTUNITIES: 'GO_TO_OPPORTUNITIES' as const,
GO_TO_SETTINGS: 'GO_TO_SETTINGS' as const,
GO_TO_TASKS: 'GO_TO_TASKS' as const,
GO_TO_NOTES: 'GO_TO_NOTES' as const,
EDIT_RECORD_PAGE_LAYOUT: 'EDIT_RECORD_PAGE_LAYOUT' as const,
SAVE_RECORD_PAGE_LAYOUT: 'SAVE_RECORD_PAGE_LAYOUT' as const,
CANCEL_RECORD_PAGE_LAYOUT: 'CANCEL_RECORD_PAGE_LAYOUT' as const,
EDIT_DASHBOARD_LAYOUT: 'EDIT_DASHBOARD_LAYOUT' as const,
SAVE_DASHBOARD_LAYOUT: 'SAVE_DASHBOARD_LAYOUT' as const,
CANCEL_DASHBOARD_LAYOUT: 'CANCEL_DASHBOARD_LAYOUT' as const,
DUPLICATE_DASHBOARD: 'DUPLICATE_DASHBOARD' as const,
DUPLICATE_WORKFLOW: 'DUPLICATE_WORKFLOW' as const,
GO_TO_WORKFLOWS: 'GO_TO_WORKFLOWS' as const,
ACTIVATE_WORKFLOW: 'ACTIVATE_WORKFLOW' as const,
DEACTIVATE_WORKFLOW: 'DEACTIVATE_WORKFLOW' as const,
DISCARD_DRAFT_WORKFLOW: 'DISCARD_DRAFT_WORKFLOW' as const,
TEST_WORKFLOW: 'TEST_WORKFLOW' as const,
SEE_ACTIVE_VERSION_WORKFLOW: 'SEE_ACTIVE_VERSION_WORKFLOW' as const,
SEE_RUNS_WORKFLOW: 'SEE_RUNS_WORKFLOW' as const,
SEE_VERSIONS_WORKFLOW: 'SEE_VERSIONS_WORKFLOW' as const,
ADD_NODE_WORKFLOW: 'ADD_NODE_WORKFLOW' as const,
TIDY_UP_WORKFLOW: 'TIDY_UP_WORKFLOW' as const,
DUPLICATE_WORKFLOW: 'DUPLICATE_WORKFLOW' as const,
GO_TO_RUNS: 'GO_TO_RUNS' as const,
SEE_VERSION_WORKFLOW_RUN: 'SEE_VERSION_WORKFLOW_RUN' as const,
SEE_WORKFLOW_WORKFLOW_RUN: 'SEE_WORKFLOW_WORKFLOW_RUN' as const,
STOP_WORKFLOW_RUN: 'STOP_WORKFLOW_RUN' as const,
SEE_RUNS_WORKFLOW_VERSION: 'SEE_RUNS_WORKFLOW_VERSION' as const,
SEE_WORKFLOW_WORKFLOW_VERSION: 'SEE_WORKFLOW_WORKFLOW_VERSION' as const,
USE_AS_DRAFT_WORKFLOW_VERSION: 'USE_AS_DRAFT_WORKFLOW_VERSION' as const,
SAVE_RECORD_PAGE_LAYOUT: 'SAVE_RECORD_PAGE_LAYOUT' as const,
SAVE_DASHBOARD_LAYOUT: 'SAVE_DASHBOARD_LAYOUT' as const,
TIDY_UP_WORKFLOW: 'TIDY_UP_WORKFLOW' as const
SEE_VERSIONS_WORKFLOW_VERSION: 'SEE_VERSIONS_WORKFLOW_VERSION' as const,
SEARCH_RECORDS: 'SEARCH_RECORDS' as const,
SEARCH_RECORDS_FALLBACK: 'SEARCH_RECORDS_FALLBACK' as const,
ASK_AI: 'ASK_AI' as const,
VIEW_PREVIOUS_AI_CHATS: 'VIEW_PREVIOUS_AI_CHATS' as const
}
export const enumCommandMenuItemAvailabilityType = {
+1 -2
View File
@@ -229,8 +229,7 @@
"@yarnpkg/types": "^4.0.0",
"rimraf": "^5.0.5",
"twenty-emails": "workspace:*",
"twenty-shared": "workspace:*",
"twenty-standard-application": "workspace:*"
"twenty-shared": "workspace:*"
},
"engines": {
"node": "^24.5.0",
+1 -1
View File
@@ -47,7 +47,7 @@
"start": {
"executor": "nx:run-commands",
"cache": false,
"dependsOn": ["^build", "twenty-standard-application:build"],
"dependsOn": ["^build"],
"options": {
"cwd": "packages/twenty-server",
"command": "rimraf dist && NODE_ENV=development nest start --watch"
@@ -0,0 +1,37 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class UpdateEngineComponentKeyEnum1773320963832
implements MigrationInterface
{
name = 'UpdateEngineComponentKeyEnum1773320963832';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TYPE "core"."commandMenuItem_enginecomponentkey_enum" RENAME TO "commandMenuItem_enginecomponentkey_enum_old"`,
);
await queryRunner.query(
`CREATE TYPE "core"."commandMenuItem_enginecomponentkey_enum" AS ENUM('NAVIGATE_TO_NEXT_RECORD', 'NAVIGATE_TO_PREVIOUS_RECORD', 'CREATE_NEW_RECORD', 'DELETE_SINGLE_RECORD', 'DELETE_MULTIPLE_RECORDS', 'RESTORE_SINGLE_RECORD', 'RESTORE_MULTIPLE_RECORDS', 'DESTROY_SINGLE_RECORD', 'DESTROY_MULTIPLE_RECORDS', 'ADD_TO_FAVORITES', 'REMOVE_FROM_FAVORITES', 'EXPORT_NOTE_TO_PDF', 'EXPORT_FROM_RECORD_INDEX', 'EXPORT_FROM_RECORD_SHOW', 'UPDATE_MULTIPLE_RECORDS', 'MERGE_MULTIPLE_RECORDS', 'EXPORT_MULTIPLE_RECORDS', 'IMPORT_RECORDS', 'EXPORT_VIEW', 'SEE_DELETED_RECORDS', 'CREATE_NEW_VIEW', 'HIDE_DELETED_RECORDS', 'GO_TO_PEOPLE', 'GO_TO_COMPANIES', 'GO_TO_DASHBOARDS', 'GO_TO_OPPORTUNITIES', 'GO_TO_SETTINGS', 'GO_TO_TASKS', 'GO_TO_NOTES', 'EDIT_RECORD_PAGE_LAYOUT', 'SAVE_RECORD_PAGE_LAYOUT', 'CANCEL_RECORD_PAGE_LAYOUT', 'EDIT_DASHBOARD_LAYOUT', 'SAVE_DASHBOARD_LAYOUT', 'CANCEL_DASHBOARD_LAYOUT', 'DUPLICATE_DASHBOARD', 'GO_TO_WORKFLOWS', 'ACTIVATE_WORKFLOW', 'DEACTIVATE_WORKFLOW', 'DISCARD_DRAFT_WORKFLOW', 'TEST_WORKFLOW', 'SEE_ACTIVE_VERSION_WORKFLOW', 'SEE_RUNS_WORKFLOW', 'SEE_VERSIONS_WORKFLOW', 'ADD_NODE_WORKFLOW', 'TIDY_UP_WORKFLOW', 'DUPLICATE_WORKFLOW', 'GO_TO_RUNS', 'SEE_VERSION_WORKFLOW_RUN', 'SEE_WORKFLOW_WORKFLOW_RUN', 'STOP_WORKFLOW_RUN', 'SEE_RUNS_WORKFLOW_VERSION', 'SEE_WORKFLOW_WORKFLOW_VERSION', 'USE_AS_DRAFT_WORKFLOW_VERSION', 'SEE_VERSIONS_WORKFLOW_VERSION', 'SEARCH_RECORDS', 'SEARCH_RECORDS_FALLBACK', 'ASK_AI', 'VIEW_PREVIOUS_AI_CHATS')`,
);
await queryRunner.query(
`ALTER TABLE "core"."commandMenuItem" ALTER COLUMN "engineComponentKey" TYPE "core"."commandMenuItem_enginecomponentkey_enum" USING "engineComponentKey"::"text"::"core"."commandMenuItem_enginecomponentkey_enum"`,
);
await queryRunner.query(
`DROP TYPE "core"."commandMenuItem_enginecomponentkey_enum_old"`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TYPE "core"."commandMenuItem_enginecomponentkey_enum_old" AS ENUM('ACTIVATE_WORKFLOW', 'ADD_TO_FAVORITES', 'CREATE_NEW_RECORD', 'DEACTIVATE_WORKFLOW', 'DELETE_MULTIPLE_RECORDS', 'DELETE_SINGLE_RECORD', 'DESTROY_MULTIPLE_RECORDS', 'DESTROY_SINGLE_RECORD', 'DISCARD_DRAFT_WORKFLOW', 'DUPLICATE_DASHBOARD', 'DUPLICATE_WORKFLOW', 'MERGE_MULTIPLE_RECORDS', 'REMOVE_FROM_FAVORITES', 'RESTORE_MULTIPLE_RECORDS', 'RESTORE_SINGLE_RECORD', 'SAVE_DASHBOARD_LAYOUT', 'SAVE_RECORD_PAGE_LAYOUT', 'STOP_WORKFLOW_RUN', 'TEST_WORKFLOW', 'TIDY_UP_WORKFLOW', 'USE_AS_DRAFT_WORKFLOW_VERSION')`,
);
await queryRunner.query(
`ALTER TABLE "core"."commandMenuItem" ALTER COLUMN "engineComponentKey" TYPE "core"."commandMenuItem_enginecomponentkey_enum_old" USING "engineComponentKey"::"text"::"core"."commandMenuItem_enginecomponentkey_enum_old"`,
);
await queryRunner.query(
`DROP TYPE "core"."commandMenuItem_enginecomponentkey_enum"`,
);
await queryRunner.query(
`ALTER TYPE "core"."commandMenuItem_enginecomponentkey_enum_old" RENAME TO "commandMenuItem_enginecomponentkey_enum"`,
);
}
}
@@ -1,6 +1,8 @@
import { registerEnumType } from '@nestjs/graphql';
export enum EngineComponentKey {
NAVIGATE_TO_NEXT_RECORD = 'NAVIGATE_TO_NEXT_RECORD',
NAVIGATE_TO_PREVIOUS_RECORD = 'NAVIGATE_TO_PREVIOUS_RECORD',
CREATE_NEW_RECORD = 'CREATE_NEW_RECORD',
DELETE_SINGLE_RECORD = 'DELETE_SINGLE_RECORD',
DELETE_MULTIPLE_RECORDS = 'DELETE_MULTIPLE_RECORDS',
@@ -10,18 +12,54 @@ export enum EngineComponentKey {
DESTROY_MULTIPLE_RECORDS = 'DESTROY_MULTIPLE_RECORDS',
ADD_TO_FAVORITES = 'ADD_TO_FAVORITES',
REMOVE_FROM_FAVORITES = 'REMOVE_FROM_FAVORITES',
EXPORT_NOTE_TO_PDF = 'EXPORT_NOTE_TO_PDF',
EXPORT_FROM_RECORD_INDEX = 'EXPORT_FROM_RECORD_INDEX',
EXPORT_FROM_RECORD_SHOW = 'EXPORT_FROM_RECORD_SHOW',
UPDATE_MULTIPLE_RECORDS = 'UPDATE_MULTIPLE_RECORDS',
MERGE_MULTIPLE_RECORDS = 'MERGE_MULTIPLE_RECORDS',
EXPORT_MULTIPLE_RECORDS = 'EXPORT_MULTIPLE_RECORDS',
IMPORT_RECORDS = 'IMPORT_RECORDS',
EXPORT_VIEW = 'EXPORT_VIEW',
SEE_DELETED_RECORDS = 'SEE_DELETED_RECORDS',
CREATE_NEW_VIEW = 'CREATE_NEW_VIEW',
HIDE_DELETED_RECORDS = 'HIDE_DELETED_RECORDS',
GO_TO_PEOPLE = 'GO_TO_PEOPLE',
GO_TO_COMPANIES = 'GO_TO_COMPANIES',
GO_TO_DASHBOARDS = 'GO_TO_DASHBOARDS',
GO_TO_OPPORTUNITIES = 'GO_TO_OPPORTUNITIES',
GO_TO_SETTINGS = 'GO_TO_SETTINGS',
GO_TO_TASKS = 'GO_TO_TASKS',
GO_TO_NOTES = 'GO_TO_NOTES',
EDIT_RECORD_PAGE_LAYOUT = 'EDIT_RECORD_PAGE_LAYOUT',
SAVE_RECORD_PAGE_LAYOUT = 'SAVE_RECORD_PAGE_LAYOUT',
CANCEL_RECORD_PAGE_LAYOUT = 'CANCEL_RECORD_PAGE_LAYOUT',
EDIT_DASHBOARD_LAYOUT = 'EDIT_DASHBOARD_LAYOUT',
SAVE_DASHBOARD_LAYOUT = 'SAVE_DASHBOARD_LAYOUT',
CANCEL_DASHBOARD_LAYOUT = 'CANCEL_DASHBOARD_LAYOUT',
DUPLICATE_DASHBOARD = 'DUPLICATE_DASHBOARD',
DUPLICATE_WORKFLOW = 'DUPLICATE_WORKFLOW',
GO_TO_WORKFLOWS = 'GO_TO_WORKFLOWS',
ACTIVATE_WORKFLOW = 'ACTIVATE_WORKFLOW',
DEACTIVATE_WORKFLOW = 'DEACTIVATE_WORKFLOW',
DISCARD_DRAFT_WORKFLOW = 'DISCARD_DRAFT_WORKFLOW',
TEST_WORKFLOW = 'TEST_WORKFLOW',
STOP_WORKFLOW_RUN = 'STOP_WORKFLOW_RUN',
USE_AS_DRAFT_WORKFLOW_VERSION = 'USE_AS_DRAFT_WORKFLOW_VERSION',
SAVE_RECORD_PAGE_LAYOUT = 'SAVE_RECORD_PAGE_LAYOUT',
SAVE_DASHBOARD_LAYOUT = 'SAVE_DASHBOARD_LAYOUT',
SEE_ACTIVE_VERSION_WORKFLOW = 'SEE_ACTIVE_VERSION_WORKFLOW',
SEE_RUNS_WORKFLOW = 'SEE_RUNS_WORKFLOW',
SEE_VERSIONS_WORKFLOW = 'SEE_VERSIONS_WORKFLOW',
ADD_NODE_WORKFLOW = 'ADD_NODE_WORKFLOW',
TIDY_UP_WORKFLOW = 'TIDY_UP_WORKFLOW',
DUPLICATE_WORKFLOW = 'DUPLICATE_WORKFLOW',
GO_TO_RUNS = 'GO_TO_RUNS',
SEE_VERSION_WORKFLOW_RUN = 'SEE_VERSION_WORKFLOW_RUN',
SEE_WORKFLOW_WORKFLOW_RUN = 'SEE_WORKFLOW_WORKFLOW_RUN',
STOP_WORKFLOW_RUN = 'STOP_WORKFLOW_RUN',
SEE_RUNS_WORKFLOW_VERSION = 'SEE_RUNS_WORKFLOW_VERSION',
SEE_WORKFLOW_WORKFLOW_VERSION = 'SEE_WORKFLOW_WORKFLOW_VERSION',
USE_AS_DRAFT_WORKFLOW_VERSION = 'USE_AS_DRAFT_WORKFLOW_VERSION',
SEE_VERSIONS_WORKFLOW_VERSION = 'SEE_VERSIONS_WORKFLOW_VERSION',
SEARCH_RECORDS = 'SEARCH_RECORDS',
SEARCH_RECORDS_FALLBACK = 'SEARCH_RECORDS_FALLBACK',
ASK_AI = 'ASK_AI',
VIEW_PREVIOUS_AI_CHATS = 'VIEW_PREVIOUS_AI_CHATS',
}
registerEnumType(EngineComponentKey, {
@@ -3,8 +3,6 @@ import { STANDARD_OBJECTS } from 'twenty-shared/metadata';
import { CommandMenuItemAvailabilityType } from 'src/engine/metadata-modules/command-menu-item/enums/command-menu-item-availability-type.enum';
import { EngineComponentKey } from 'src/engine/metadata-modules/command-menu-item/enums/engine-component-key.enum';
import { STANDARD_FRONT_COMPONENTS } from './standard-front-component.constant';
export const STANDARD_COMMAND_MENU_ITEMS = {
navigateToNextRecord: {
universalIdentifier: '3db2457d-8e96-4b8e-94c9-ed95d3f95738',
@@ -17,9 +15,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
conditionalAvailabilityExpression:
'pageType == "RECORD_PAGE" and not isInSidePanel',
availabilityObjectMetadataUniversalIdentifier: null,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.navigateToNextRecord.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.NAVIGATE_TO_NEXT_RECORD,
},
navigateToPreviousRecord: {
universalIdentifier: 'ec10f871-415b-420b-8150-7e09f6f04833',
@@ -32,9 +29,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
conditionalAvailabilityExpression:
'pageType == "RECORD_PAGE" and not isInSidePanel',
availabilityObjectMetadataUniversalIdentifier: null,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.navigateToPreviousRecord.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.NAVIGATE_TO_PREVIOUS_RECORD,
},
createNewRecord: {
universalIdentifier: '08d255bf-58cd-47a5-bd82-78c5c58592f1',
@@ -173,9 +169,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
conditionalAvailabilityExpression:
'pageType == "RECORD_PAGE" and (objectMetadataItem.nameSingular == "note" or objectMetadataItem.nameSingular == "task") and someNonEmptyString(selectedRecords, "bodyV2.blocknote")',
availabilityObjectMetadataUniversalIdentifier: null,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.exportNoteToPdf.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.EXPORT_NOTE_TO_PDF,
},
exportFromRecordIndex: {
universalIdentifier: 'a934ba8a-ac8f-487d-9cd9-06dfdaec1f49',
@@ -187,9 +182,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
availabilityType: CommandMenuItemAvailabilityType.RECORD_SELECTION,
conditionalAvailabilityExpression: 'pageType == "INDEX_PAGE"',
availabilityObjectMetadataUniversalIdentifier: null,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.exportFromRecordIndex.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.EXPORT_FROM_RECORD_INDEX,
},
exportFromRecordShow: {
universalIdentifier: 'ba339455-f3c2-4ed1-bf77-3e316d7d6a66',
@@ -201,9 +195,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
availabilityType: CommandMenuItemAvailabilityType.RECORD_SELECTION,
conditionalAvailabilityExpression: 'pageType == "RECORD_PAGE"',
availabilityObjectMetadataUniversalIdentifier: null,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.exportFromRecordShow.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.EXPORT_FROM_RECORD_SHOW,
},
updateMultipleRecords: {
universalIdentifier: '2e080651-f098-4a78-bea9-7a70002dc57c',
@@ -216,9 +209,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
conditionalAvailabilityExpression:
'numberOfSelectedRecords >= 2 and objectPermissions.canUpdateObjectRecords',
availabilityObjectMetadataUniversalIdentifier: null,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.updateMultipleRecords.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.UPDATE_MULTIPLE_RECORDS,
},
mergeMultipleRecords: {
universalIdentifier: '6c14eb04-8e7e-4d47-93c0-8ec4834e2e60',
@@ -244,9 +236,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
availabilityType: CommandMenuItemAvailabilityType.RECORD_SELECTION,
conditionalAvailabilityExpression: 'numberOfSelectedRecords >= 2',
availabilityObjectMetadataUniversalIdentifier: null,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.exportMultipleRecords.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.EXPORT_MULTIPLE_RECORDS,
},
importRecords: {
universalIdentifier: 'a2dc9de7-4798-422e-bb55-bfad7b9bdbe8',
@@ -258,9 +249,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
availabilityType: CommandMenuItemAvailabilityType.GLOBAL,
conditionalAvailabilityExpression: 'not hasAnySoftDeleteFilterOnView',
availabilityObjectMetadataUniversalIdentifier: null,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.importRecords.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.IMPORT_RECORDS,
},
exportView: {
universalIdentifier: '80680f2a-c426-48b3-a839-c63a6183dc4b',
@@ -272,9 +262,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
availabilityType: CommandMenuItemAvailabilityType.GLOBAL,
conditionalAvailabilityExpression: null,
availabilityObjectMetadataUniversalIdentifier: null,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.exportView.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.EXPORT_VIEW,
},
seeDeletedRecords: {
universalIdentifier: 'd63c21c3-9785-4750-be87-5f36269b8e0d',
@@ -286,9 +275,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
availabilityType: CommandMenuItemAvailabilityType.GLOBAL,
conditionalAvailabilityExpression: 'not hasAnySoftDeleteFilterOnView',
availabilityObjectMetadataUniversalIdentifier: null,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.seeDeletedRecords.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.SEE_DELETED_RECORDS,
},
createNewView: {
universalIdentifier: '6ec7c339-e167-431d-bec6-d1c737df677c',
@@ -300,9 +288,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
availabilityType: CommandMenuItemAvailabilityType.GLOBAL,
conditionalAvailabilityExpression: 'not hasAnySoftDeleteFilterOnView',
availabilityObjectMetadataUniversalIdentifier: null,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.createNewView.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.CREATE_NEW_VIEW,
},
hideDeletedRecords: {
universalIdentifier: '1420db7f-0fba-49e2-b23e-4b7caa0fafa0',
@@ -314,9 +301,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
availabilityType: CommandMenuItemAvailabilityType.GLOBAL,
conditionalAvailabilityExpression: 'hasAnySoftDeleteFilterOnView',
availabilityObjectMetadataUniversalIdentifier: null,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.hideDeletedRecords.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.HIDE_DELETED_RECORDS,
},
goToPeople: {
universalIdentifier: 'dfe5fef8-d42c-40f0-941f-8e3b5eb01daa',
@@ -328,9 +314,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
availabilityType: CommandMenuItemAvailabilityType.GLOBAL,
conditionalAvailabilityExpression: 'targetObjectReadPermissions.person',
availabilityObjectMetadataUniversalIdentifier: null,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.goToPeople.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.GO_TO_PEOPLE,
},
goToCompanies: {
universalIdentifier: '196e4eec-bfdd-48a6-bcbb-6707ef11951a',
@@ -342,9 +327,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
availabilityType: CommandMenuItemAvailabilityType.GLOBAL,
conditionalAvailabilityExpression: 'targetObjectReadPermissions.company',
availabilityObjectMetadataUniversalIdentifier: null,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.goToCompanies.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.GO_TO_COMPANIES,
},
goToDashboards: {
universalIdentifier: '11dc07d1-21b2-4f86-af8c-6a664c02f00c',
@@ -356,9 +340,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
availabilityType: CommandMenuItemAvailabilityType.GLOBAL,
conditionalAvailabilityExpression: 'targetObjectReadPermissions.dashboard',
availabilityObjectMetadataUniversalIdentifier: null,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.goToDashboards.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.GO_TO_DASHBOARDS,
},
goToOpportunities: {
universalIdentifier: 'f04f5e00-a208-422f-acf2-ff189769510d',
@@ -371,9 +354,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
conditionalAvailabilityExpression:
'targetObjectReadPermissions.opportunity',
availabilityObjectMetadataUniversalIdentifier: null,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.goToOpportunities.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.GO_TO_OPPORTUNITIES,
},
goToSettings: {
universalIdentifier: 'ef9aba44-0068-453e-930a-f8c182af18ee',
@@ -385,9 +367,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
availabilityType: CommandMenuItemAvailabilityType.GLOBAL,
conditionalAvailabilityExpression: null,
availabilityObjectMetadataUniversalIdentifier: null,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.goToSettings.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.GO_TO_SETTINGS,
},
goToTasks: {
universalIdentifier: 'e8e3bd0b-5ce9-4577-bb61-588c0b1ad063',
@@ -399,9 +380,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
availabilityType: CommandMenuItemAvailabilityType.GLOBAL,
conditionalAvailabilityExpression: 'targetObjectReadPermissions.task',
availabilityObjectMetadataUniversalIdentifier: null,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.goToTasks.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.GO_TO_TASKS,
},
goToNotes: {
universalIdentifier: '08e0f0cc-ac2d-46cd-9bca-39a409b9addf',
@@ -413,9 +393,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
availabilityType: CommandMenuItemAvailabilityType.GLOBAL,
conditionalAvailabilityExpression: 'targetObjectReadPermissions.note',
availabilityObjectMetadataUniversalIdentifier: null,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.goToNotes.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.GO_TO_NOTES,
},
editRecordPageLayout: {
universalIdentifier: 'd9794c67-1799-424f-8871-5ea771dd4a6d',
@@ -428,9 +407,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
conditionalAvailabilityExpression:
'pageType == "RECORD_PAGE" and featureFlags.IS_RECORD_PAGE_LAYOUT_EDITING_ENABLED and noneDefined(selectedRecords, "deletedAt") and objectPermissions.canUpdateObjectRecords and objectMetadataItem.nameSingular != "dashboard"',
availabilityObjectMetadataUniversalIdentifier: null,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.editRecordPageLayout.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.EDIT_RECORD_PAGE_LAYOUT,
},
saveRecordPageLayout: {
universalIdentifier: 'a3363589-e2a6-4451-a53c-b8c2710785e2',
@@ -457,9 +435,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
conditionalAvailabilityExpression:
'pageType == "RECORD_PAGE" and isPageInEditMode and featureFlags.IS_RECORD_PAGE_LAYOUT_EDITING_ENABLED and noneDefined(selectedRecords, "deletedAt") and objectPermissions.canUpdateObjectRecords',
availabilityObjectMetadataUniversalIdentifier: null,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.cancelRecordPageLayout.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.CANCEL_RECORD_PAGE_LAYOUT,
},
editDashboardLayout: {
universalIdentifier: 'b9b53bbc-3129-4eb9-8344-c3f9628ffa7d',
@@ -473,9 +450,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
'pageType == "RECORD_PAGE" and noneDefined(selectedRecords, "deletedAt") and everyDefined(selectedRecords, "pageLayoutId") and objectPermissions.canUpdateObjectRecords',
availabilityObjectMetadataUniversalIdentifier:
STANDARD_OBJECTS.dashboard.universalIdentifier,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.editDashboardLayout.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.EDIT_DASHBOARD_LAYOUT,
},
saveDashboardLayout: {
universalIdentifier: '18b23908-f816-42ab-bc0a-eb5fae29c695',
@@ -504,9 +480,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
'pageType == "RECORD_PAGE" and isPageInEditMode and noneDefined(selectedRecords, "deletedAt") and everyDefined(selectedRecords, "pageLayoutId") and objectPermissions.canUpdateObjectRecords',
availabilityObjectMetadataUniversalIdentifier:
STANDARD_OBJECTS.dashboard.universalIdentifier,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.cancelDashboardLayout.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.CANCEL_DASHBOARD_LAYOUT,
},
duplicateDashboard: {
universalIdentifier: '2ee07307-60ce-41ef-bfee-7c718f67557e',
@@ -533,9 +508,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
availabilityType: CommandMenuItemAvailabilityType.GLOBAL,
conditionalAvailabilityExpression: 'targetObjectReadPermissions.workflow',
availabilityObjectMetadataUniversalIdentifier: null,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.goToWorkflows.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.GO_TO_WORKFLOWS,
},
activateWorkflow: {
universalIdentifier: '44f19c85-0fd0-482f-a14e-da513c60b1b3',
@@ -609,9 +583,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
'includesEvery(selectedRecords, "statuses", "ACTIVE") and includesEvery(selectedRecords, "statuses", "DRAFT") and noneDefined(selectedRecords, "deletedAt")',
availabilityObjectMetadataUniversalIdentifier:
STANDARD_OBJECTS.workflow.universalIdentifier,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.seeActiveVersionWorkflow.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.SEE_ACTIVE_VERSION_WORKFLOW,
},
seeRunsWorkflow: {
universalIdentifier: 'e57efc2d-00a2-493a-b76c-f2dabd23a5eb',
@@ -625,9 +598,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
'noneDefined(selectedRecords, "deletedAt")',
availabilityObjectMetadataUniversalIdentifier:
STANDARD_OBJECTS.workflow.universalIdentifier,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.seeRunsWorkflow.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.SEE_RUNS_WORKFLOW,
},
seeVersionsWorkflow: {
universalIdentifier: '92781d24-b875-4282-8cdb-d127f04a5c7d',
@@ -641,9 +613,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
'noneDefined(selectedRecords, "deletedAt")',
availabilityObjectMetadataUniversalIdentifier:
STANDARD_OBJECTS.workflow.universalIdentifier,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.seeVersionsWorkflow.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.SEE_VERSIONS_WORKFLOW,
},
addNodeWorkflow: {
universalIdentifier: '818117fa-6cad-4ebc-83c1-40f4afc28d94',
@@ -657,9 +628,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
'pageType == "RECORD_PAGE" and everyDefined(selectedRecords, "currentVersion.trigger") and everyDefined(selectedRecords, "currentVersion.steps") and every(selectedRecords, "currentVersion.steps.length") and noneDefined(selectedRecords, "deletedAt")',
availabilityObjectMetadataUniversalIdentifier:
STANDARD_OBJECTS.workflow.universalIdentifier,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.addNodeWorkflow.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.ADD_NODE_WORKFLOW,
},
tidyUpWorkflow: {
universalIdentifier: '1f3a3cab-161a-4775-af47-11be4d0bf411',
@@ -702,9 +672,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
conditionalAvailabilityExpression:
'not hasAnySoftDeleteFilterOnView and objectMetadataItem.nameSingular != "workflowRun" and objectMetadataItem.nameSingular != "workflowVersion" and objectMetadataItem.nameSingular != "workflow"',
availabilityObjectMetadataUniversalIdentifier: null,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.goToRuns.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.GO_TO_RUNS,
},
seeVersionWorkflowRun: {
universalIdentifier: 'cc3a065c-c89e-40ac-9449-4272c55b1bb8',
@@ -717,9 +686,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
conditionalAvailabilityExpression: null,
availabilityObjectMetadataUniversalIdentifier:
STANDARD_OBJECTS.workflowRun.universalIdentifier,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.seeVersionWorkflowRun.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.SEE_VERSION_WORKFLOW_RUN,
},
seeWorkflowWorkflowRun: {
universalIdentifier: '9d9cc62d-3543-45c3-93f3-23d2d8979f2b',
@@ -732,9 +700,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
conditionalAvailabilityExpression: null,
availabilityObjectMetadataUniversalIdentifier:
STANDARD_OBJECTS.workflowRun.universalIdentifier,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.seeWorkflowWorkflowRun.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.SEE_WORKFLOW_WORKFLOW_RUN,
},
stopWorkflowRun: {
universalIdentifier: '4c186606-9515-4561-a1eb-9a072b4f5e58',
@@ -763,9 +730,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
'everyDefined(selectedRecords, "workflow")',
availabilityObjectMetadataUniversalIdentifier:
STANDARD_OBJECTS.workflowVersion.universalIdentifier,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.seeRunsWorkflowVersion.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.SEE_RUNS_WORKFLOW_VERSION,
},
seeWorkflowWorkflowVersion: {
universalIdentifier: 'b43052db-023e-4083-9b63-2c2dfbfd1320',
@@ -779,9 +745,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
'everyDefined(selectedRecords, "workflow.id")',
availabilityObjectMetadataUniversalIdentifier:
STANDARD_OBJECTS.workflowVersion.universalIdentifier,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.seeWorkflowWorkflowVersion.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.SEE_WORKFLOW_WORKFLOW_VERSION,
},
useAsDraftWorkflowVersion: {
universalIdentifier: '483c0c1d-ea4d-4a4d-8a59-2dcf9f8e38f6',
@@ -810,9 +775,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
'everyDefined(selectedRecords, "workflow")',
availabilityObjectMetadataUniversalIdentifier:
STANDARD_OBJECTS.workflowVersion.universalIdentifier,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.seeVersionsWorkflowVersion.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.SEE_VERSIONS_WORKFLOW_VERSION,
},
searchRecords: {
universalIdentifier: 'fa24e25e-68f8-4548-82ff-c7b5168b7c7d',
@@ -824,9 +788,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
availabilityType: CommandMenuItemAvailabilityType.GLOBAL,
conditionalAvailabilityExpression: null,
availabilityObjectMetadataUniversalIdentifier: null,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.searchRecords.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.SEARCH_RECORDS,
},
searchRecordsFallback: {
universalIdentifier: 'c659890c-7266-46c9-bfe1-75cefff8b6d0',
@@ -838,9 +801,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
availabilityType: CommandMenuItemAvailabilityType.FALLBACK,
conditionalAvailabilityExpression: null,
availabilityObjectMetadataUniversalIdentifier: null,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.searchRecordsFallback.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.SEARCH_RECORDS_FALLBACK,
},
askAi: {
universalIdentifier: 'ce5fb54d-2b19-4dd1-b7b4-9532a1761a41',
@@ -852,9 +814,8 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
availabilityType: CommandMenuItemAvailabilityType.GLOBAL,
conditionalAvailabilityExpression: null,
availabilityObjectMetadataUniversalIdentifier: null,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.askAi.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.ASK_AI,
},
viewPreviousAiChats: {
universalIdentifier: '3084c3c9-cc23-4dad-9e00-92025f5cba7a',
@@ -866,8 +827,7 @@ export const STANDARD_COMMAND_MENU_ITEMS = {
availabilityType: CommandMenuItemAvailabilityType.GLOBAL,
conditionalAvailabilityExpression: null,
availabilityObjectMetadataUniversalIdentifier: null,
frontComponentUniversalIdentifier:
STANDARD_FRONT_COMPONENTS.viewPreviousAiChats.universalIdentifier,
engineComponentKey: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: EngineComponentKey.VIEW_PREVIOUS_AI_CHATS,
},
} as const;
@@ -1,517 +0,0 @@
import { STANDARD_FRONT_COMPONENT_BUILD_MANIFEST } from 'twenty-standard-application';
export const STANDARD_FRONT_COMPONENTS = {
navigateToNextRecord: {
universalIdentifier: 'aec12b85-29df-465f-a329-1c72c81ed95c',
name: 'Navigate to next record',
componentName: 'NavigateToNextRecord',
sourceComponentPath:
'front-components/record/navigate-to-next-record.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.navigateToNextRecord
.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.navigateToNextRecord
.builtComponentChecksum,
isHeadless: true,
},
navigateToPreviousRecord: {
universalIdentifier: 'b53c54b9-152a-4100-975c-1bc582bfb951',
name: 'Navigate to previous record',
componentName: 'NavigateToPreviousRecord',
sourceComponentPath:
'front-components/record/navigate-to-previous-record.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.navigateToPreviousRecord
.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.navigateToPreviousRecord
.builtComponentChecksum,
isHeadless: true,
},
exportNoteToPdf: {
universalIdentifier: '980399e9-e530-4430-bf47-7f3f482434b4',
name: 'Export note to PDF',
componentName: 'ExportNoteToPdf',
sourceComponentPath:
'front-components/record/export-note-to-pdf.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.exportNoteToPdf
.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.exportNoteToPdf
.builtComponentChecksum,
isHeadless: true,
},
exportFromRecordIndex: {
universalIdentifier: '6aca9ecc-b419-453d-8243-6d19faa8c8a7',
name: 'Export from record index',
componentName: 'ExportFromRecordIndex',
sourceComponentPath:
'front-components/record/export-from-record-index.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.exportFromRecordIndex
.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.exportFromRecordIndex
.builtComponentChecksum,
isHeadless: true,
},
exportFromRecordShow: {
universalIdentifier: '74d8f880-1be1-432e-b475-8970deed809e',
name: 'Export from record show',
componentName: 'ExportFromRecordShow',
sourceComponentPath:
'front-components/record/export-from-record-show.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.exportFromRecordShow
.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.exportFromRecordShow
.builtComponentChecksum,
isHeadless: true,
},
updateMultipleRecords: {
universalIdentifier: 'f89c3e6b-6d96-4103-8cfc-4de6017a75c0',
name: 'Update multiple records',
componentName: 'UpdateMultipleRecords',
sourceComponentPath:
'front-components/record/update-multiple-records.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.updateMultipleRecords
.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.updateMultipleRecords
.builtComponentChecksum,
isHeadless: true,
},
exportMultipleRecords: {
universalIdentifier: '05381918-8c9c-421f-ab89-10e365a463f8',
name: 'Export multiple records',
componentName: 'ExportMultipleRecords',
sourceComponentPath:
'front-components/record/export-multiple-records.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.exportMultipleRecords
.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.exportMultipleRecords
.builtComponentChecksum,
isHeadless: true,
},
importRecords: {
universalIdentifier: 'acfd8025-36d1-4a35-9508-a0422e53d380',
name: 'Import records',
componentName: 'ImportRecords',
sourceComponentPath:
'front-components/record/import-records.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.importRecords.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.importRecords
.builtComponentChecksum,
isHeadless: true,
},
exportView: {
universalIdentifier: '012dc64f-ad2b-419a-98ea-d0019ff3d56d',
name: 'Export view',
componentName: 'ExportView',
sourceComponentPath:
'front-components/record/export-view.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.exportView.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.exportView.builtComponentChecksum,
isHeadless: true,
},
seeDeletedRecords: {
universalIdentifier: 'dad2327b-9020-4d13-a38c-14d1207e66fc',
name: 'See deleted records',
componentName: 'SeeDeletedRecords',
sourceComponentPath:
'front-components/record/see-deleted-records.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.seeDeletedRecords
.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.seeDeletedRecords
.builtComponentChecksum,
isHeadless: true,
},
createNewView: {
universalIdentifier: 'd7bf58ad-e716-47c1-8c51-209c755c5f27',
name: 'Create view',
componentName: 'CreateNewView',
sourceComponentPath:
'front-components/record/create-new-view.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.createNewView.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.createNewView
.builtComponentChecksum,
isHeadless: true,
},
hideDeletedRecords: {
universalIdentifier: '75e93e21-effb-48ef-ba1c-588c358fd56f',
name: 'Hide deleted records',
componentName: 'HideDeletedRecords',
sourceComponentPath:
'front-components/record/hide-deleted-records.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.hideDeletedRecords
.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.hideDeletedRecords
.builtComponentChecksum,
isHeadless: true,
},
goToPeople: {
universalIdentifier: '5a5c1e43-9fb5-49bf-bcde-355973f913b9',
name: 'Go to People',
componentName: 'GoToPeople',
sourceComponentPath:
'front-components/navigation/go-to-people.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.goToPeople.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.goToPeople.builtComponentChecksum,
isHeadless: true,
},
goToCompanies: {
universalIdentifier: '22ac113b-fe7d-41de-b06f-d863964bc445',
name: 'Go to Companies',
componentName: 'GoToCompanies',
sourceComponentPath:
'front-components/navigation/go-to-companies.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.goToCompanies.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.goToCompanies
.builtComponentChecksum,
isHeadless: true,
},
goToDashboards: {
universalIdentifier: 'c71cc879-50af-4e20-9bdc-52f90c9862ed',
name: 'Go to Dashboards',
componentName: 'GoToDashboards',
sourceComponentPath:
'front-components/navigation/go-to-dashboards.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.goToDashboards.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.goToDashboards
.builtComponentChecksum,
isHeadless: true,
},
goToOpportunities: {
universalIdentifier: 'ebb4c2ca-6b70-4d2e-8919-79475a278273',
name: 'Go to Opportunities',
componentName: 'GoToOpportunities',
sourceComponentPath:
'front-components/navigation/go-to-opportunities.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.goToOpportunities
.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.goToOpportunities
.builtComponentChecksum,
isHeadless: true,
},
goToSettings: {
universalIdentifier: '1fb7b785-b79a-42b7-aff2-e57fe1d74e35',
name: 'Go to Settings',
componentName: 'GoToSettings',
sourceComponentPath:
'front-components/navigation/go-to-settings.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.goToSettings.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.goToSettings
.builtComponentChecksum,
isHeadless: true,
},
goToTasks: {
universalIdentifier: 'c08ff958-141d-4892-8737-1faf6b630a2b',
name: 'Go to Tasks',
componentName: 'GoToTasks',
sourceComponentPath:
'front-components/navigation/go-to-tasks.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.goToTasks.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.goToTasks.builtComponentChecksum,
isHeadless: true,
},
goToNotes: {
universalIdentifier: 'd32f7962-e8e1-46d6-856c-ccc71e71d50c',
name: 'Go to Notes',
componentName: 'GoToNotes',
sourceComponentPath:
'front-components/navigation/go-to-notes.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.goToNotes.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.goToNotes.builtComponentChecksum,
isHeadless: true,
},
editRecordPageLayout: {
universalIdentifier: 'd1a8a4c5-2644-4d4b-b684-64625a700760',
name: 'Edit record page layout',
componentName: 'EditRecordPageLayout',
sourceComponentPath:
'front-components/page-layout/edit-record-page-layout.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.editRecordPageLayout
.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.editRecordPageLayout
.builtComponentChecksum,
isHeadless: true,
},
cancelRecordPageLayout: {
universalIdentifier: 'd392762b-4c42-4471-9c45-c92e66728380',
name: 'Cancel record page layout edition',
componentName: 'CancelRecordPageLayout',
sourceComponentPath:
'front-components/page-layout/cancel-record-page-layout.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.cancelRecordPageLayout
.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.cancelRecordPageLayout
.builtComponentChecksum,
isHeadless: true,
},
editDashboardLayout: {
universalIdentifier: '8a87b33b-f196-414c-a60a-16402aa0b57f',
name: 'Edit dashboard layout',
componentName: 'EditDashboardLayout',
sourceComponentPath:
'front-components/dashboard/edit-dashboard-layout.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.editDashboardLayout
.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.editDashboardLayout
.builtComponentChecksum,
isHeadless: true,
},
cancelDashboardLayout: {
universalIdentifier: 'dac81512-3890-4ba5-8471-bd94738ab80a',
name: 'Cancel dashboard layout edition',
componentName: 'CancelDashboardLayout',
sourceComponentPath:
'front-components/dashboard/cancel-dashboard-layout.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.cancelDashboardLayout
.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.cancelDashboardLayout
.builtComponentChecksum,
isHeadless: true,
},
goToWorkflows: {
universalIdentifier: '9d313f79-170f-47cc-b9c4-a2076a86232f',
name: 'Go to Workflows',
componentName: 'GoToWorkflows',
sourceComponentPath:
'front-components/navigation/go-to-workflows.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.goToWorkflows.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.goToWorkflows
.builtComponentChecksum,
isHeadless: true,
},
seeActiveVersionWorkflow: {
universalIdentifier: '6259a4a5-428e-41b9-a032-333c2d51e15f',
name: 'See active version',
componentName: 'SeeActiveVersionWorkflow',
sourceComponentPath:
'front-components/workflow/see-active-version-workflow.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.seeActiveVersionWorkflow
.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.seeActiveVersionWorkflow
.builtComponentChecksum,
isHeadless: true,
},
seeRunsWorkflow: {
universalIdentifier: 'b8fa3327-e5c4-43f4-a3ac-c17d26af0847',
name: 'See runs',
componentName: 'SeeRunsWorkflow',
sourceComponentPath:
'front-components/workflow/see-runs-workflow.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.seeRunsWorkflow
.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.seeRunsWorkflow
.builtComponentChecksum,
isHeadless: true,
},
seeVersionsWorkflow: {
universalIdentifier: '62f41c00-629f-400d-85f8-d532d76c7879',
name: 'See versions history',
componentName: 'SeeVersionsWorkflow',
sourceComponentPath:
'front-components/workflow/see-versions-workflow.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.seeVersionsWorkflow
.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.seeVersionsWorkflow
.builtComponentChecksum,
isHeadless: true,
},
addNodeWorkflow: {
universalIdentifier: 'da1e499c-1298-4ec4-9a7b-5f2276075888',
name: 'Add a node',
componentName: 'AddNodeWorkflow',
sourceComponentPath:
'front-components/workflow/add-node-workflow.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.addNodeWorkflow
.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.addNodeWorkflow
.builtComponentChecksum,
isHeadless: true,
},
goToRuns: {
universalIdentifier: '0bd0ccfc-1909-4d19-b694-610878f07a3a',
name: 'Go to runs',
componentName: 'GoToRuns',
sourceComponentPath:
'front-components/navigation/go-to-runs.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.goToRuns.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.goToRuns.builtComponentChecksum,
isHeadless: true,
},
seeVersionWorkflowRun: {
universalIdentifier: '2e09d6b0-60c3-447c-8d5d-1af70a2d037b',
name: 'See version (workflow run)',
componentName: 'SeeVersionWorkflowRun',
sourceComponentPath:
'front-components/workflow-run/see-version-workflow-run.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.seeVersionWorkflowRun
.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.seeVersionWorkflowRun
.builtComponentChecksum,
isHeadless: true,
},
seeWorkflowWorkflowRun: {
universalIdentifier: '88a80460-6e2f-4587-8a04-a67d894fdf69',
name: 'See workflow (workflow run)',
componentName: 'SeeWorkflowWorkflowRun',
sourceComponentPath:
'front-components/workflow-run/see-workflow-workflow-run.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.seeWorkflowWorkflowRun
.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.seeWorkflowWorkflowRun
.builtComponentChecksum,
isHeadless: true,
},
seeRunsWorkflowVersion: {
universalIdentifier: '3d673f94-ecf9-4e38-8eac-684cf4cad617',
name: 'See runs (workflow version)',
componentName: 'SeeRunsWorkflowVersion',
sourceComponentPath:
'front-components/workflow-version/see-runs-workflow-version.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.seeRunsWorkflowVersion
.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.seeRunsWorkflowVersion
.builtComponentChecksum,
isHeadless: true,
},
seeWorkflowWorkflowVersion: {
universalIdentifier: 'aec002df-0fc1-45ed-8526-9600623ef5f6',
name: 'See workflow (workflow version)',
componentName: 'SeeWorkflowWorkflowVersion',
sourceComponentPath:
'front-components/workflow-version/see-workflow-workflow-version.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.seeWorkflowWorkflowVersion
.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.seeWorkflowWorkflowVersion
.builtComponentChecksum,
isHeadless: true,
},
seeVersionsWorkflowVersion: {
universalIdentifier: 'a93c9f09-7a7f-4665-982a-0709a652c5bd',
name: 'See versions history (workflow version)',
componentName: 'SeeVersionsWorkflowVersion',
sourceComponentPath:
'front-components/workflow-version/see-versions-workflow-version.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.seeVersionsWorkflowVersion
.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.seeVersionsWorkflowVersion
.builtComponentChecksum,
isHeadless: true,
},
searchRecords: {
universalIdentifier: '7791c67a-e58d-4a2d-9cfd-58110a04cb8f',
name: 'Search records',
componentName: 'SearchRecords',
sourceComponentPath:
'front-components/side-panel/search-records.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.searchRecords.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.searchRecords
.builtComponentChecksum,
isHeadless: true,
},
searchRecordsFallback: {
universalIdentifier: '7f7fc9f2-0291-4264-a789-d21e8f1c774e',
name: 'Search records fallback',
componentName: 'SearchRecordsFallback',
sourceComponentPath:
'front-components/side-panel/search-records-fallback.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.searchRecordsFallback
.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.searchRecordsFallback
.builtComponentChecksum,
isHeadless: true,
},
askAi: {
universalIdentifier: '75d8fed0-36d9-4798-afa5-1472ecac0884',
name: 'Ask AI',
componentName: 'AskAi',
sourceComponentPath:
'front-components/side-panel/ask-ai.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.askAi.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.askAi.builtComponentChecksum,
isHeadless: true,
},
viewPreviousAiChats: {
universalIdentifier: '5e7876fa-7a9b-487f-8e05-1a1c7ce029d9',
name: 'View previous AI chats',
componentName: 'ViewPreviousAiChats',
sourceComponentPath:
'front-components/side-panel/view-previous-ai-chats.front-component.tsx',
builtComponentPath:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.viewPreviousAiChats
.builtComponentPath,
builtComponentChecksum:
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST.viewPreviousAiChats
.builtComponentChecksum,
isHeadless: true,
},
} as const;
@@ -16,6 +16,5 @@ export const TWENTY_STANDARD_ALL_METADATA_NAME = [
'pageLayout',
'pageLayoutTab',
'pageLayoutWidget',
'frontComponent',
'commandMenuItem',
] as const satisfies AllMetadataName[];
@@ -1,64 +0,0 @@
import { Injectable, Logger } from '@nestjs/common';
import fs from 'fs';
import path from 'path';
import { FileFolder } from 'twenty-shared/types';
import { STANDARD_FRONT_COMPONENT_BUILD_MANIFEST } from 'twenty-standard-application';
import { FileStorageService } from 'src/engine/core-modules/file-storage/file-storage.service';
import { TWENTY_STANDARD_APPLICATION } from 'src/engine/workspace-manager/twenty-standard-application/constants/twenty-standard-applications';
const BUILT_FRONT_COMPONENTS_PATH = path.resolve(
path.dirname(require.resolve('twenty-standard-application/package.json')),
'src/build',
);
@Injectable()
export class StandardFrontComponentUploadService {
private readonly logger = new Logger(
StandardFrontComponentUploadService.name,
);
constructor(private readonly fileStorageService: FileStorageService) {}
async uploadBuiltFrontComponents({
workspaceId,
}: {
workspaceId: string;
}): Promise<void> {
const applicationUniversalIdentifier =
TWENTY_STANDARD_APPLICATION.universalIdentifier;
const manifestEntries = Object.values(
STANDARD_FRONT_COMPONENT_BUILD_MANIFEST,
);
for (const entry of manifestEntries) {
const localFilePath = path.join(
BUILT_FRONT_COMPONENTS_PATH,
entry.builtComponentPath,
);
if (!fs.existsSync(localFilePath)) {
this.logger.warn(
`Built front component file not found: ${localFilePath}`,
);
continue;
}
const fileContent = fs.readFileSync(localFilePath);
await this.fileStorageService.writeFile({
sourceFile: fileContent,
mimeType: 'application/javascript',
fileFolder: FileFolder.BuiltFrontComponent,
applicationUniversalIdentifier,
workspaceId,
resourcePath: entry.builtComponentPath,
settings: { isTemporaryFile: false, toDelete: false },
});
}
}
}
@@ -14,7 +14,6 @@ import { GlobalWorkspaceOrmManager } from 'src/engine/twenty-orm/global-workspac
import { buildSystemAuthContext } from 'src/engine/twenty-orm/utils/build-system-auth-context.util';
import { WorkspaceCacheService } from 'src/engine/workspace-cache/services/workspace-cache.service';
import { TWENTY_STANDARD_ALL_METADATA_NAME } from 'src/engine/workspace-manager/twenty-standard-application/constants/twenty-standard-all-metadata-name.constant';
import { StandardFrontComponentUploadService } from 'src/engine/workspace-manager/twenty-standard-application/services/standard-front-component-upload.service';
import { computeTwentyStandardApplicationAllFlatEntityMaps } from 'src/engine/workspace-manager/twenty-standard-application/utils/twenty-standard-application-all-flat-entity-maps.constant';
import { WorkspaceMigrationBuilderException } from 'src/engine/workspace-manager/workspace-migration/exceptions/workspace-migration-builder-exception';
import { WorkspaceMigrationValidateBuildAndRunService } from 'src/engine/workspace-manager/workspace-migration/services/workspace-migration-validate-build-and-run-service';
@@ -30,7 +29,6 @@ export class TwentyStandardApplicationService {
private readonly workspaceMigrationValidateBuildAndRunService: WorkspaceMigrationValidateBuildAndRunService,
private readonly workspaceCacheService: WorkspaceCacheService,
private readonly globalWorkspaceOrmManager: GlobalWorkspaceOrmManager,
private readonly standardFrontComponentUploadService: StandardFrontComponentUploadService,
) {}
// Note: To remove and handle natively in validateBuildAndRun after favorite migration to metadata
@@ -77,10 +75,6 @@ export class TwentyStandardApplicationService {
'featureFlagsMap',
]);
await this.standardFrontComponentUploadService.uploadBuiltFrontComponents({
workspaceId,
});
const shouldIncludeRecordPageLayouts = this.twentyConfigService.get(
'SHOULD_SEED_STANDARD_RECORD_PAGE_LAYOUTS',
);
@@ -7,14 +7,10 @@ import { GlobalWorkspaceDataSourceModule } from 'src/engine/twenty-orm/global-wo
import { WorkspaceCacheModule } from 'src/engine/workspace-cache/workspace-cache.module';
import { WorkspaceMigrationModule } from 'src/engine/workspace-manager/workspace-migration/workspace-migration.module';
import { StandardFrontComponentUploadService } from './services/standard-front-component-upload.service';
import { TwentyStandardApplicationService } from './services/twenty-standard-application.service';
@Module({
providers: [
TwentyStandardApplicationService,
StandardFrontComponentUploadService,
],
providers: [TwentyStandardApplicationService],
imports: [
ApplicationModule,
TwentyConfigModule,
@@ -3,7 +3,6 @@ import { v4 } from 'uuid';
import { type FlatCommandMenuItemMaps } from 'src/engine/metadata-modules/flat-command-menu-item/types/flat-command-menu-item-maps.type';
import { createEmptyFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/constant/create-empty-flat-entity-maps.constant';
import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type';
import { type FlatFrontComponent } from 'src/engine/metadata-modules/flat-front-component/types/flat-front-component.type';
import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
import { STANDARD_COMMAND_MENU_ITEMS } from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-command-menu-item.constant';
import { createStandardCommandMenuItemFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/command-menu-item/create-standard-command-menu-item-flat-metadata.util';
@@ -17,13 +16,12 @@ export const buildStandardFlatCommandMenuItemMaps = ({
now,
workspaceId,
twentyStandardApplicationId,
dependencyFlatEntityMaps: { flatFrontComponentMaps, flatObjectMetadataMaps },
dependencyFlatEntityMaps: { flatObjectMetadataMaps },
}: {
now: string;
workspaceId: string;
twentyStandardApplicationId: string;
dependencyFlatEntityMaps: {
flatFrontComponentMaps: FlatEntityMaps<FlatFrontComponent>;
flatObjectMetadataMaps: FlatEntityMaps<FlatObjectMetadata>;
};
}): FlatCommandMenuItemMaps => {
@@ -37,7 +35,6 @@ export const buildStandardFlatCommandMenuItemMaps = ({
workspaceId,
twentyStandardApplicationId,
dependencyFlatEntityMaps: {
flatFrontComponentMaps,
flatObjectMetadataMaps,
},
now,
@@ -3,7 +3,6 @@ import { isDefined } from 'twenty-shared/utils';
import { type FlatCommandMenuItem } from 'src/engine/metadata-modules/flat-command-menu-item/types/flat-command-menu-item.type';
import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type';
import { findFlatEntityByUniversalIdentifier } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-universal-identifier.util';
import { type FlatFrontComponent } from 'src/engine/metadata-modules/flat-front-component/types/flat-front-component.type';
import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
import { STANDARD_COMMAND_MENU_ITEMS } from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-command-menu-item.constant';
import { TWENTY_STANDARD_APPLICATION } from 'src/engine/workspace-manager/twenty-standard-application/constants/twenty-standard-applications';
@@ -13,7 +12,7 @@ export const createStandardCommandMenuItemFlatMetadata = ({
commandMenuItemId,
workspaceId,
twentyStandardApplicationId,
dependencyFlatEntityMaps: { flatFrontComponentMaps, flatObjectMetadataMaps },
dependencyFlatEntityMaps: { flatObjectMetadataMaps },
now,
}: {
commandMenuItemName: keyof typeof STANDARD_COMMAND_MENU_ITEMS;
@@ -21,33 +20,12 @@ export const createStandardCommandMenuItemFlatMetadata = ({
workspaceId: string;
twentyStandardApplicationId: string;
dependencyFlatEntityMaps: {
flatFrontComponentMaps: FlatEntityMaps<FlatFrontComponent>;
flatObjectMetadataMaps: FlatEntityMaps<FlatObjectMetadata>;
};
now: string;
}): FlatCommandMenuItem => {
const definition = STANDARD_COMMAND_MENU_ITEMS[commandMenuItemName];
let resolvedFrontComponentId: string | null = null;
let resolvedFrontComponentUniversalIdentifier: string | null = null;
if (isDefined(definition.frontComponentUniversalIdentifier)) {
const flatFrontComponent = findFlatEntityByUniversalIdentifier({
flatEntityMaps: flatFrontComponentMaps,
universalIdentifier: definition.frontComponentUniversalIdentifier,
});
if (!isDefined(flatFrontComponent)) {
throw new Error(
`Front component not found for universal identifier ${definition.frontComponentUniversalIdentifier}`,
);
}
resolvedFrontComponentId = flatFrontComponent.id;
resolvedFrontComponentUniversalIdentifier =
flatFrontComponent.universalIdentifier;
}
let resolvedObjectMetadataId: string | null = null;
let resolvedObjectMetadataUniversalIdentifier: string | null = null;
@@ -84,9 +62,8 @@ export const createStandardCommandMenuItemFlatMetadata = ({
availabilityType: definition.availabilityType,
conditionalAvailabilityExpression:
definition.conditionalAvailabilityExpression ?? null,
frontComponentId: resolvedFrontComponentId,
frontComponentUniversalIdentifier:
resolvedFrontComponentUniversalIdentifier,
frontComponentId: null,
frontComponentUniversalIdentifier: null,
engineComponentKey: definition.engineComponentKey,
workflowVersionId: null,
availabilityObjectMetadataId: resolvedObjectMetadataId,
@@ -1,42 +0,0 @@
import { v4 } from 'uuid';
import { createEmptyFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/constant/create-empty-flat-entity-maps.constant';
import { type FlatFrontComponentMaps } from 'src/engine/metadata-modules/flat-front-component/types/flat-front-component-maps.type';
import { addFlatEntityToFlatEntityMapsThroughMutationOrThrow } from 'src/engine/workspace-manager/workspace-migration/utils/add-flat-entity-to-flat-entity-maps-through-mutation-or-throw.util';
import { STANDARD_FRONT_COMPONENTS } from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-front-component.constant';
import { createStandardFrontComponentFlatMetadata } from 'src/engine/workspace-manager/twenty-standard-application/utils/front-component/create-standard-front-component-flat-metadata.util';
const STANDARD_FRONT_COMPONENT_NAMES = Object.keys(
STANDARD_FRONT_COMPONENTS,
) as Array<keyof typeof STANDARD_FRONT_COMPONENTS>;
export const buildStandardFlatFrontComponentMaps = ({
now,
workspaceId,
twentyStandardApplicationId,
}: {
now: string;
workspaceId: string;
twentyStandardApplicationId: string;
dependencyFlatEntityMaps: undefined;
}): FlatFrontComponentMaps => {
const flatFrontComponentMaps: FlatFrontComponentMaps =
createEmptyFlatEntityMaps();
for (const frontComponentName of STANDARD_FRONT_COMPONENT_NAMES) {
const flatFrontComponent = createStandardFrontComponentFlatMetadata({
frontComponentName,
frontComponentId: v4(),
workspaceId,
twentyStandardApplicationId,
now,
});
addFlatEntityToFlatEntityMapsThroughMutationOrThrow({
flatEntity: flatFrontComponent,
flatEntityMapsToMutate: flatFrontComponentMaps,
});
}
return flatFrontComponentMaps;
};
@@ -1,37 +0,0 @@
import { type FlatFrontComponent } from 'src/engine/metadata-modules/flat-front-component/types/flat-front-component.type';
import { STANDARD_FRONT_COMPONENTS } from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-front-component.constant';
import { TWENTY_STANDARD_APPLICATION } from 'src/engine/workspace-manager/twenty-standard-application/constants/twenty-standard-applications';
export const createStandardFrontComponentFlatMetadata = ({
frontComponentName,
frontComponentId,
workspaceId,
twentyStandardApplicationId,
now,
}: {
frontComponentName: keyof typeof STANDARD_FRONT_COMPONENTS;
frontComponentId: string;
workspaceId: string;
twentyStandardApplicationId: string;
now: string;
}): FlatFrontComponent => {
const definition = STANDARD_FRONT_COMPONENTS[frontComponentName];
return {
id: frontComponentId,
universalIdentifier: definition.universalIdentifier,
applicationId: twentyStandardApplicationId,
applicationUniversalIdentifier:
TWENTY_STANDARD_APPLICATION.universalIdentifier,
workspaceId,
name: definition.name,
description: null,
sourceComponentPath: definition.sourceComponentPath,
builtComponentPath: definition.builtComponentPath,
componentName: definition.componentName,
builtComponentChecksum: definition.builtComponentChecksum,
isHeadless: definition.isHeadless,
createdAt: now,
updatedAt: now,
};
};
@@ -10,7 +10,6 @@ import { getStandardObjectMetadataRelatedEntityIds } from 'src/engine/workspace-
import { getStandardPageLayoutMetadataRelatedEntityIds } from 'src/engine/workspace-manager/twenty-standard-application/utils/get-standard-page-layout-metadata-related-entity-ids.util';
import { buildStandardFlatIndexMetadataMaps } from 'src/engine/workspace-manager/twenty-standard-application/utils/index/build-standard-flat-index-metadata-maps.util';
import { buildStandardFlatCommandMenuItemMaps } from 'src/engine/workspace-manager/twenty-standard-application/utils/command-menu-item/build-standard-flat-command-menu-item-maps.util';
import { buildStandardFlatFrontComponentMaps } from 'src/engine/workspace-manager/twenty-standard-application/utils/front-component/build-standard-flat-front-component-maps.util';
import { buildStandardFlatNavigationMenuItemMaps } from 'src/engine/workspace-manager/twenty-standard-application/utils/navigation-menu-item/build-standard-flat-navigation-menu-item-maps.util';
import { buildStandardFlatObjectMetadataMaps } from 'src/engine/workspace-manager/twenty-standard-application/utils/object-metadata/build-standard-flat-object-metadata-maps.util';
import { buildStandardFlatPageLayoutTabMetadataMaps } from 'src/engine/workspace-manager/twenty-standard-application/utils/page-layout-tab/build-standard-flat-page-layout-tab-metadata-maps.util';
@@ -203,19 +202,11 @@ export const computeTwentyStandardApplicationAllFlatEntityMaps = ({
},
});
const flatFrontComponentMaps = buildStandardFlatFrontComponentMaps({
now,
workspaceId,
twentyStandardApplicationId,
dependencyFlatEntityMaps: undefined,
});
const flatCommandMenuItemMaps = buildStandardFlatCommandMenuItemMaps({
now,
workspaceId,
twentyStandardApplicationId,
dependencyFlatEntityMaps: {
flatFrontComponentMaps,
flatObjectMetadataMaps,
},
});
@@ -236,7 +227,6 @@ export const computeTwentyStandardApplicationAllFlatEntityMaps = ({
flatPageLayoutMaps,
flatPageLayoutTabMaps,
flatPageLayoutWidgetMaps,
flatFrontComponentMaps,
flatCommandMenuItemMaps,
};
@@ -1,22 +0,0 @@
{
"name": "twenty-standard-application",
"private": true,
"version": "0.1.0",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"license": "AGPL-3.0",
"scripts": {
"build": "tsx scripts/build-standard-front-components.ts"
},
"devDependencies": {
"esbuild": "^0.25.10",
"react": "^18.3.1",
"tinyglobby": "^0.2.15",
"tsx": "^4.19.3",
"twenty-sdk": "workspace:*",
"twenty-shared": "workspace:*"
},
"engines": {
"node": "^24.5.0"
}
}
@@ -1,21 +0,0 @@
{
"name": "twenty-standard-application",
"$schema": "../../node_modules/nx/schemas/project-schema.json",
"projectType": "library",
"tags": ["scope:shared"],
"targets": {
"build": {
"executor": "nx:run-commands",
"cache": true,
"options": {
"cwd": "packages/twenty-standard-application",
"commands": [
"tsx scripts/build-standard-front-components.ts",
"tsc -p tsconfig.build.json"
],
"parallel": false
},
"dependsOn": ["^build"]
}
}
}
@@ -1,96 +0,0 @@
import crypto from 'crypto';
import esbuild from 'esbuild';
import fs from 'fs';
import path from 'path';
import { glob } from 'tinyglobby';
import { getBaseFrontComponentBuildOptions } from 'twenty-sdk/build';
import { kebabToCamelCase } from 'twenty-shared/utils';
const FRONT_COMPONENTS_DIR = path.resolve(__dirname, '../src/front-components');
const BUILT_OUTPUT_DIR = path.resolve(__dirname, '../src/build');
const MANIFEST_OUTPUT_PATH = path.resolve(
__dirname,
'../src/standard-front-component-build-manifest.ts',
);
const buildStandardFrontComponents = async () => {
const tsxFiles = (
await glob(['**/*.front-component.tsx'], {
cwd: FRONT_COMPONENTS_DIR,
absolute: true,
onlyFiles: true,
})
).sort();
if (tsxFiles.length === 0) {
throw new Error(
`No .front-component.tsx files found in ${FRONT_COMPONENTS_DIR}`,
);
}
fs.mkdirSync(BUILT_OUTPUT_DIR, { recursive: true });
await esbuild.build({
...getBaseFrontComponentBuildOptions(),
entryPoints: tsxFiles,
outdir: BUILT_OUTPUT_DIR,
outbase: FRONT_COMPONENTS_DIR,
minify: true,
});
const manifestEntries: Record<
string,
{ builtComponentPath: string; builtComponentChecksum: string }
> = {};
for (const tsxFile of tsxFiles) {
const relativeTsx = path.relative(FRONT_COMPONENTS_DIR, tsxFile);
const relativeMjs = relativeTsx.replace(
'.front-component.tsx',
'.front-component.mjs',
);
const mjsFilePath = path.join(BUILT_OUTPUT_DIR, relativeMjs);
if (!fs.existsSync(mjsFilePath)) {
throw new Error(`Expected built file not found: ${mjsFilePath}`);
}
const content = fs.readFileSync(mjsFilePath);
const checksum = crypto.createHash('md5').update(content).digest('hex');
const stem = path.basename(tsxFile, '.front-component.tsx');
const camelKey = kebabToCamelCase(stem);
manifestEntries[camelKey] = {
builtComponentPath: relativeMjs,
builtComponentChecksum: checksum,
};
}
const manifestContent = `/*
* _____ _
*|_ _|_ _____ _ __ | |_ _ _
* | | \\ \\ /\\ / / _ \\ '_ \\| __| | | | Auto-generated file
* | | \\ V V / __/ | | | |_| |_| | Any edits to this will be overridden
* |_| \\_/\\_/ \\___|_| |_|\\__|\\__, |
* |___/
*/
export const STANDARD_FRONT_COMPONENT_BUILD_MANIFEST = ${JSON.stringify(manifestEntries, null, 2)} as const;
`;
fs.writeFileSync(MANIFEST_OUTPUT_PATH, manifestContent);
// eslint-disable-next-line no-console
console.log(
`Built ${tsxFiles.length} standard front components, manifest written to ${MANIFEST_OUTPUT_PATH}`,
);
};
buildStandardFrontComponents().catch((error) => {
// eslint-disable-next-line no-console
console.error('Failed to build standard front components:', error);
process.exit(1);
});
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More