diff --git a/packages/twenty-front/src/modules/command-menu-item/record/constants/DefaultRecordCommandMenuItemsConfig.tsx b/packages/twenty-front/src/modules/command-menu-item/record/constants/DefaultRecordCommandMenuItemsConfig.tsx index 6004afbcfc..248807da8c 100644 --- a/packages/twenty-front/src/modules/command-menu-item/record/constants/DefaultRecordCommandMenuItemsConfig.tsx +++ b/packages/twenty-front/src/modules/command-menu-item/record/constants/DefaultRecordCommandMenuItemsConfig.tsx @@ -142,8 +142,10 @@ export const DEFAULT_RECORD_COMMAND_MENU_ITEMS_CONFIG: Record< selectedRecord, hasAnySoftDeleteFilterOnView, objectPermissions, + objectMetadataItem, }) => - (isDefined(selectedRecord) && + (!objectMetadataItem?.isSystem && + isDefined(selectedRecord) && !selectedRecord.isRemote && !hasAnySoftDeleteFilterOnView && objectPermissions.canSoftDeleteObjectRecords && @@ -170,8 +172,10 @@ export const DEFAULT_RECORD_COMMAND_MENU_ITEMS_CONFIG: Record< isRemote, hasAnySoftDeleteFilterOnView, numberOfSelectedRecords, + objectMetadataItem, }) => - (objectPermissions.canSoftDeleteObjectRecords && + (!objectMetadataItem?.isSystem && + objectPermissions.canSoftDeleteObjectRecords && !isRemote && !hasAnySoftDeleteFilterOnView && isDefined(numberOfSelectedRecords) && @@ -196,8 +200,10 @@ export const DEFAULT_RECORD_COMMAND_MENU_ITEMS_CONFIG: Record< isRemote, isShowPage, hasAnySoftDeleteFilterOnView, + objectMetadataItem, }) => - (!isRemote && + (!objectMetadataItem?.isSystem && + !isRemote && isDefined(selectedRecord?.deletedAt) && objectPermissions.canSoftDeleteObjectRecords && ((isDefined(isShowPage) && isShowPage) || @@ -225,8 +231,10 @@ export const DEFAULT_RECORD_COMMAND_MENU_ITEMS_CONFIG: Record< isRemote, hasAnySoftDeleteFilterOnView, numberOfSelectedRecords, + objectMetadataItem, }) => - (objectPermissions.canSoftDeleteObjectRecords && + (!objectMetadataItem?.isSystem && + objectPermissions.canSoftDeleteObjectRecords && !isRemote && isDefined(hasAnySoftDeleteFilterOnView) && hasAnySoftDeleteFilterOnView && @@ -246,8 +254,14 @@ export const DEFAULT_RECORD_COMMAND_MENU_ITEMS_CONFIG: Record< Icon: IconTrashX, accent: 'danger', isPinned: true, - shouldBeRegistered: ({ selectedRecord, objectPermissions, isRemote }) => - (objectPermissions.canDestroyObjectRecords && + shouldBeRegistered: ({ + selectedRecord, + objectPermissions, + isRemote, + objectMetadataItem, + }) => + (!objectMetadataItem?.isSystem && + objectPermissions.canDestroyObjectRecords && !isRemote && isDefined(selectedRecord?.deletedAt)) ?? false, @@ -272,8 +286,10 @@ export const DEFAULT_RECORD_COMMAND_MENU_ITEMS_CONFIG: Record< isRemote, hasAnySoftDeleteFilterOnView, numberOfSelectedRecords, + objectMetadataItem, }) => - (objectPermissions.canDestroyObjectRecords && + (!objectMetadataItem?.isSystem && + objectPermissions.canDestroyObjectRecords && !isRemote && isDefined(hasAnySoftDeleteFilterOnView) && hasAnySoftDeleteFilterOnView && @@ -297,7 +313,9 @@ export const DEFAULT_RECORD_COMMAND_MENU_ITEMS_CONFIG: Record< selectedRecord, isFavorite, hasAnySoftDeleteFilterOnView, + objectMetadataItem, }) => + !objectMetadataItem?.isSystem && !selectedRecord?.isRemote && !isFavorite && !isDefined(selectedRecord?.deletedAt) && @@ -321,7 +339,9 @@ export const DEFAULT_RECORD_COMMAND_MENU_ITEMS_CONFIG: Record< selectedRecord, isFavorite, hasAnySoftDeleteFilterOnView, + objectMetadataItem, }) => + !objectMetadataItem?.isSystem && isDefined(selectedRecord) && !selectedRecord?.isRemote && isDefined(isFavorite) && @@ -392,8 +412,10 @@ export const DEFAULT_RECORD_COMMAND_MENU_ITEMS_CONFIG: Record< Icon: IconEdit, accent: 'default', isPinned: true, - shouldBeRegistered: ({ objectPermissions, isRemote }) => - objectPermissions.canUpdateObjectRecords && !isRemote, + shouldBeRegistered: ({ objectPermissions, isRemote, objectMetadataItem }) => + !objectMetadataItem?.isSystem && + objectPermissions.canUpdateObjectRecords && + !isRemote, availableOn: [CommandMenuItemViewType.INDEX_PAGE_BULK_SELECTION], component: , }, diff --git a/packages/twenty-front/src/modules/page-layout/components/PageLayoutRendererContent.tsx b/packages/twenty-front/src/modules/page-layout/components/PageLayoutRendererContent.tsx index 958fe7725d..8881a1f081 100644 --- a/packages/twenty-front/src/modules/page-layout/components/PageLayoutRendererContent.tsx +++ b/packages/twenty-front/src/modules/page-layout/components/PageLayoutRendererContent.tsx @@ -1,3 +1,5 @@ +import { metadataStoreState } from '@/metadata-store/states/metadataStoreState'; +import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { PageLayoutLeftPanel } from '@/page-layout/components/PageLayoutLeftPanel'; import { PageLayoutTabList } from '@/page-layout/components/PageLayoutTabList'; import { PageLayoutTabListEffect } from '@/page-layout/components/PageLayoutTabListEffect'; @@ -19,6 +21,7 @@ import { useLayoutRenderingContext } from '@/ui/layout/contexts/LayoutRenderingC import { activeTabIdComponentState } from '@/ui/layout/tab-list/states/activeTabIdComponentState'; import { ScrollWrapper } from '@/ui/utilities/scroll/components/ScrollWrapper'; import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; +import { useAtomFamilyStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomFamilyStateValue'; import { useSetAtomComponentState } from '@/ui/utilities/state/jotai/hooks/useSetAtomComponentState'; import { styled } from '@linaria/react'; import { t } from '@lingui/core/macro'; @@ -72,6 +75,17 @@ export const PageLayoutRendererContent = () => { const isMobile = useIsMobile(); + const metadataStore = useAtomFamilyStateValue( + metadataStoreState, + 'objectMetadataItems', + ); + + const isSystemObject = + (metadataStore.current as ObjectMetadataItem[]).find( + (item) => + item.nameSingular === targetRecordIdentifier?.targetObjectNameSingular, + )?.isSystem ?? false; + if (!isDefined(currentPageLayout)) { return null; } @@ -100,8 +114,14 @@ export const PageLayoutRendererContent = () => { isEditMode: isPageLayoutInEditMode, }); + const tabsForCurrentObject = isSystemObject + ? tabsWithVisibleWidgets.filter( + (tab) => tab.title === 'Home' || tab.title === 'Timeline', + ) + : tabsWithVisibleWidgets; + const { tabsToRenderInTabList, pinnedLeftTab } = getTabsByDisplayMode({ - tabs: tabsWithVisibleWidgets, + tabs: tabsForCurrentObject, pageLayoutType: currentPageLayout.type, isMobile, isInSidePanel, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-20/1-20-backfill-missing-standard-views.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-19/1-19-backfill-missing-standard-views.command.ts similarity index 99% rename from packages/twenty-server/src/database/commands/upgrade-version-command/1-20/1-20-backfill-missing-standard-views.command.ts rename to packages/twenty-server/src/database/commands/upgrade-version-command/1-19/1-19-backfill-missing-standard-views.command.ts index 02517364ff..b7f6da20e9 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-20/1-20-backfill-missing-standard-views.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-19/1-19-backfill-missing-standard-views.command.ts @@ -15,7 +15,7 @@ import { computeTwentyStandardApplicationAllFlatEntityMaps } from 'src/engine/wo import { WorkspaceMigrationValidateBuildAndRunService } from 'src/engine/workspace-manager/workspace-migration/services/workspace-migration-validate-build-and-run-service'; @Command({ - name: 'upgrade:1-20:backfill-missing-standard-views', + name: 'upgrade:1-19:backfill-missing-standard-views', description: 'Backfill missing standard views and their child entities (fields, groups, filters, field groups) for workspaces', }) diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-19/1-19-upgrade-version-command.module.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-19/1-19-upgrade-version-command.module.ts index 8ccc471ca6..5e51e2b97d 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-19/1-19-upgrade-version-command.module.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-19/1-19-upgrade-version-command.module.ts @@ -3,6 +3,7 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { AddMissingSystemFieldsToStandardObjectsCommand } from 'src/database/commands/upgrade-version-command/1-19/1-19-add-missing-system-fields-to-standard-objects.command'; import { BackfillMessageChannelMessageAssociationMessageFolderCommand } from 'src/database/commands/upgrade-version-command/1-19/1-19-backfill-message-channel-message-association-message-folder.command'; +import { BackfillMissingStandardViewsCommand } from 'src/database/commands/upgrade-version-command/1-19/1-19-backfill-missing-standard-views.command'; import { BackfillSystemFieldsIsSystemCommand } from 'src/database/commands/upgrade-version-command/1-19/1-19-backfill-system-fields-is-system.command'; import { FixInvalidStandardUniversalIdentifiersCommand } from 'src/database/commands/upgrade-version-command/1-19/1-19-fix-invalid-standard-universal-identifiers.command'; import { SeedServerIdCommand } from 'src/database/commands/upgrade-version-command/1-19/1-19-seed-server-id.command'; @@ -32,6 +33,7 @@ import { WorkspaceMigrationModule } from 'src/engine/workspace-manager/workspace BackfillSystemFieldsIsSystemCommand, AddMissingSystemFieldsToStandardObjectsCommand, BackfillMessageChannelMessageAssociationMessageFolderCommand, + BackfillMissingStandardViewsCommand, FixInvalidStandardUniversalIdentifiersCommand, SeedServerIdCommand, ], @@ -39,6 +41,7 @@ import { WorkspaceMigrationModule } from 'src/engine/workspace-manager/workspace BackfillSystemFieldsIsSystemCommand, AddMissingSystemFieldsToStandardObjectsCommand, BackfillMessageChannelMessageAssociationMessageFolderCommand, + BackfillMissingStandardViewsCommand, FixInvalidStandardUniversalIdentifiersCommand, SeedServerIdCommand, ], diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-20/1-20-upgrade-version-command.module.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-20/1-20-upgrade-version-command.module.ts index d43c1377d2..98a56d8f66 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-20/1-20-upgrade-version-command.module.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-20/1-20-upgrade-version-command.module.ts @@ -1,7 +1,6 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { BackfillMissingStandardViewsCommand } from 'src/database/commands/upgrade-version-command/1-20/1-20-backfill-missing-standard-views.command'; import { BackfillPageLayoutsCommand } from 'src/database/commands/upgrade-version-command/1-20/1-20-backfill-page-layouts.command'; import { ApplicationModule } from 'src/engine/core-modules/application/application.module'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; @@ -25,13 +24,7 @@ import { WorkspaceMigrationModule } from 'src/engine/workspace-manager/workspace WorkspaceMigrationModule, FeatureFlagModule, ], - providers: [ - BackfillMissingStandardViewsCommand, - BackfillPageLayoutsCommand, - ], - exports: [ - BackfillMissingStandardViewsCommand, - BackfillPageLayoutsCommand, - ], + providers: [BackfillPageLayoutsCommand], + exports: [BackfillPageLayoutsCommand], }) export class V1_20_UpgradeVersionCommandModule {} diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/upgrade.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/upgrade.command.ts index 4050175129..9d8a497ab8 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/upgrade.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/upgrade.command.ts @@ -31,8 +31,8 @@ import { AddMissingSystemFieldsToStandardObjectsCommand } from 'src/database/com import { BackfillMessageChannelMessageAssociationMessageFolderCommand } from 'src/database/commands/upgrade-version-command/1-19/1-19-backfill-message-channel-message-association-message-folder.command'; import { BackfillSystemFieldsIsSystemCommand } from 'src/database/commands/upgrade-version-command/1-19/1-19-backfill-system-fields-is-system.command'; import { FixInvalidStandardUniversalIdentifiersCommand } from 'src/database/commands/upgrade-version-command/1-19/1-19-fix-invalid-standard-universal-identifiers.command'; +import { BackfillMissingStandardViewsCommand } from 'src/database/commands/upgrade-version-command/1-19/1-19-backfill-missing-standard-views.command'; import { SeedServerIdCommand } from 'src/database/commands/upgrade-version-command/1-19/1-19-seed-server-id.command'; -import { BackfillMissingStandardViewsCommand } from 'src/database/commands/upgrade-version-command/1-20/1-20-backfill-missing-standard-views.command'; import { BackfillPageLayoutsCommand } from 'src/database/commands/upgrade-version-command/1-20/1-20-backfill-page-layouts.command'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity'; @@ -79,11 +79,11 @@ export class UpgradeCommand extends UpgradeCommandRunner { protected readonly backfillSystemFieldsIsSystemCommand: BackfillSystemFieldsIsSystemCommand, protected readonly addMissingSystemFieldsToStandardObjectsCommand: AddMissingSystemFieldsToStandardObjectsCommand, protected readonly backfillMessageChannelMessageAssociationMessageFolderCommand: BackfillMessageChannelMessageAssociationMessageFolderCommand, + protected readonly backfillMissingStandardViewsCommand: BackfillMissingStandardViewsCommand, protected readonly fixRoleAndAgentUniversalIdentifiersCommand: FixInvalidStandardUniversalIdentifiersCommand, protected readonly seedServerIdCommand: SeedServerIdCommand, // 1.20 Commands - protected readonly backfillMissingStandardViewsCommand: BackfillMissingStandardViewsCommand, protected readonly backfillPageLayoutsCommand: BackfillPageLayoutsCommand, ) { super( @@ -125,14 +125,12 @@ export class UpgradeCommand extends UpgradeCommandRunner { this.backfillSystemFieldsIsSystemCommand, this.addMissingSystemFieldsToStandardObjectsCommand, this.backfillMessageChannelMessageAssociationMessageFolderCommand, + this.backfillMissingStandardViewsCommand, this.fixRoleAndAgentUniversalIdentifiersCommand, this.seedServerIdCommand, ]; - const commands_1200: VersionCommands = [ - this.backfillMissingStandardViewsCommand, - this.backfillPageLayoutsCommand, - ]; + const commands_1200: VersionCommands = [this.backfillPageLayoutsCommand]; this.allCommands = { '1.16.0': commands_1160,