From 6f45c47435716b859032a48032ea42ce2e0e88e7 Mon Sep 17 00:00:00 2001 From: Thomas Trompette Date: Thu, 23 Oct 2025 18:44:47 +0200 Subject: [PATCH] Hide stop run behind flag (#15306) As title --- packages/twenty-front/src/generated-metadata/graphql.ts | 1 + packages/twenty-front/src/generated/graphql.ts | 1 + .../constants/WorkflowRunsActionsConfig.tsx | 9 +++++++-- .../actions/types/ShouldBeRegisteredFunctionParams.ts | 1 + .../hooks/useShouldActionBeRegisteredParams.ts | 6 ++++++ .../feature-flag/enums/feature-flag-key.enum.ts | 1 + .../entity-manager/workspace-entity-manager.spec.ts | 1 + 7 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/twenty-front/src/generated-metadata/graphql.ts b/packages/twenty-front/src/generated-metadata/graphql.ts index 6f72afcc29..2461198cb3 100644 --- a/packages/twenty-front/src/generated-metadata/graphql.ts +++ b/packages/twenty-front/src/generated-metadata/graphql.ts @@ -1248,6 +1248,7 @@ export enum FeatureFlagKey { IS_RELATION_CONNECT_ENABLED = 'IS_RELATION_CONNECT_ENABLED', IS_STRIPE_INTEGRATION_ENABLED = 'IS_STRIPE_INTEGRATION_ENABLED', IS_UNIQUE_INDEXES_ENABLED = 'IS_UNIQUE_INDEXES_ENABLED', + IS_WORKFLOW_RUN_STOPPAGE_ENABLED = 'IS_WORKFLOW_RUN_STOPPAGE_ENABLED', IS_WORKSPACE_MIGRATION_V2_ENABLED = 'IS_WORKSPACE_MIGRATION_V2_ENABLED' } diff --git a/packages/twenty-front/src/generated/graphql.ts b/packages/twenty-front/src/generated/graphql.ts index 1ebac1b270..180c094ce6 100644 --- a/packages/twenty-front/src/generated/graphql.ts +++ b/packages/twenty-front/src/generated/graphql.ts @@ -1212,6 +1212,7 @@ export enum FeatureFlagKey { IS_RELATION_CONNECT_ENABLED = 'IS_RELATION_CONNECT_ENABLED', IS_STRIPE_INTEGRATION_ENABLED = 'IS_STRIPE_INTEGRATION_ENABLED', IS_UNIQUE_INDEXES_ENABLED = 'IS_UNIQUE_INDEXES_ENABLED', + IS_WORKFLOW_RUN_STOPPAGE_ENABLED = 'IS_WORKFLOW_RUN_STOPPAGE_ENABLED', IS_WORKSPACE_MIGRATION_V2_ENABLED = 'IS_WORKSPACE_MIGRATION_V2_ENABLED' } diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowRunsActionsConfig.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowRunsActionsConfig.tsx index 5dd0574f45..7d4c721e6a 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowRunsActionsConfig.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/constants/WorkflowRunsActionsConfig.tsx @@ -27,8 +27,13 @@ export const WORKFLOW_RUNS_ACTIONS_CONFIG = inheritActionsFromDefaultConfig({ type: ActionType.Standard, scope: ActionScope.RecordSelection, Icon: IconPlayerStop, - shouldBeRegistered: ({ selectedRecord }) => { - return selectedRecord?.status === 'RUNNING'; + shouldBeRegistered: ({ + selectedRecord, + isWorkflowRunStoppageEnabled, + }) => { + return ( + selectedRecord?.status === 'RUNNING' && isWorkflowRunStoppageEnabled + ); }, availableOn: [ ActionViewType.SHOW_PAGE, diff --git a/packages/twenty-front/src/modules/action-menu/actions/types/ShouldBeRegisteredFunctionParams.ts b/packages/twenty-front/src/modules/action-menu/actions/types/ShouldBeRegisteredFunctionParams.ts index 0ff0a125dc..a7ec8c7183 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/types/ShouldBeRegisteredFunctionParams.ts +++ b/packages/twenty-front/src/modules/action-menu/actions/types/ShouldBeRegisteredFunctionParams.ts @@ -26,4 +26,5 @@ export type ShouldBeRegisteredFunctionParams = { objectMetadataItemNameSingular: string, ) => boolean; forceRegisteredActionsByKey: Record; + isWorkflowRunStoppageEnabled: boolean; }; diff --git a/packages/twenty-front/src/modules/action-menu/hooks/useShouldActionBeRegisteredParams.ts b/packages/twenty-front/src/modules/action-menu/hooks/useShouldActionBeRegisteredParams.ts index 62d3b1a9ad..c432575efb 100644 --- a/packages/twenty-front/src/modules/action-menu/hooks/useShouldActionBeRegisteredParams.ts +++ b/packages/twenty-front/src/modules/action-menu/hooks/useShouldActionBeRegisteredParams.ts @@ -14,8 +14,10 @@ import { useObjectPermissionsForObject } from '@/object-record/hooks/useObjectPe import { hasAnySoftDeleteFilterOnViewComponentSelector } from '@/object-record/record-filter/states/hasAnySoftDeleteFilterOnView'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue'; +import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; import { useContext } from 'react'; import { useRecoilCallback, useRecoilValue } from 'recoil'; +import { FeatureFlagKey } from '~/generated/graphql'; export const useShouldActionBeRegisteredParams = ({ objectMetadataItem, @@ -23,6 +25,9 @@ export const useShouldActionBeRegisteredParams = ({ objectMetadataItem?: ObjectMetadataItem; }): ShouldBeRegisteredFunctionParams => { const { sortedFavorites: favorites } = useFavorites(); + const isWorkflowRunStoppageEnabled = + useIsFeatureEnabled(FeatureFlagKey.IS_WORKFLOW_RUN_STOPPAGE_ENABLED) ?? + false; const contextStoreTargetedRecordsRule = useRecoilComponentValue( contextStoreTargetedRecordsRuleComponentState, @@ -119,5 +124,6 @@ export const useShouldActionBeRegisteredParams = ({ getTargetObjectReadPermission: getObjectReadPermission, getTargetObjectWritePermission: getObjectWritePermission, forceRegisteredActionsByKey, + isWorkflowRunStoppageEnabled, }; }; diff --git a/packages/twenty-server/src/engine/core-modules/feature-flag/enums/feature-flag-key.enum.ts b/packages/twenty-server/src/engine/core-modules/feature-flag/enums/feature-flag-key.enum.ts index ec0dd41360..e3bbfd7a02 100644 --- a/packages/twenty-server/src/engine/core-modules/feature-flag/enums/feature-flag-key.enum.ts +++ b/packages/twenty-server/src/engine/core-modules/feature-flag/enums/feature-flag-key.enum.ts @@ -20,4 +20,5 @@ export enum FeatureFlagKey { IS_EMAILING_DOMAIN_ENABLED = 'IS_EMAILING_DOMAIN_ENABLED', IS_DYNAMIC_SEARCH_FIELDS_ENABLED = 'IS_DYNAMIC_SEARCH_FIELDS_ENABLED', IS_COMMON_API_ENABLED = 'IS_COMMON_API_ENABLED', + IS_WORKFLOW_RUN_STOPPAGE_ENABLED = 'IS_WORKFLOW_RUN_STOPPAGE_ENABLED', } diff --git a/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts b/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts index 979af8e811..7b8ee9e0af 100644 --- a/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts +++ b/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts @@ -143,6 +143,7 @@ describe('WorkspaceEntityManager', () => { IS_EMAILING_DOMAIN_ENABLED: false, IS_DYNAMIC_SEARCH_FIELDS_ENABLED: false, IS_COMMON_API_ENABLED: false, + IS_WORKFLOW_RUN_STOPPAGE_ENABLED: false, }, eventEmitterService: { emitMutationEvent: jest.fn(),