diff --git a/packages/twenty-e2e-testing/tests/workflow-visualizer.spec.ts b/packages/twenty-e2e-testing/tests/workflow-visualizer.spec.ts index e411cad0c..f01f7ab7c 100644 --- a/packages/twenty-e2e-testing/tests/workflow-visualizer.spec.ts +++ b/packages/twenty-e2e-testing/tests/workflow-visualizer.spec.ts @@ -184,3 +184,35 @@ test('Replace the trigger of an active version', async ({ 'Create Record', ]); }); + +test("Nodes can't be deleted by pressing Backspace or Delete keys", async ({ + workflowVisualizer, + page, +}) => { + await workflowVisualizer.triggerNode.click(); + + await page.keyboard.press('Backspace'); + await page.keyboard.press('Delete'); + + await expect(workflowVisualizer.triggerNode).toBeVisible(); + + const { createdStepId: firstStepId } = + await workflowVisualizer.createStep('create-record'); + const firstStep = workflowVisualizer.getStepNode(firstStepId); + + await firstStep.click(); + + await expect(workflowVisualizer.getDeleteNodeButton(firstStep)).toBeVisible(); + + await page.keyboard.press('Backspace'); + await page.keyboard.press('Delete'); + + await expect(firstStep).toBeVisible(); + + await workflowVisualizer.addStepButton.click(); + + await page.keyboard.press('Backspace'); + await page.keyboard.press('Delete'); + + await expect(workflowVisualizer.addStepButton).toBeVisible(); +}); diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasBase.tsx b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasBase.tsx index 4c6e70700..0594b3e4e 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasBase.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasBase.tsx @@ -227,6 +227,10 @@ export const WorkflowDiagramCanvasBase = ({ edges={edges} onNodesChange={handleNodesChange} onEdgesChange={handleEdgesChange} + onBeforeDelete={async () => { + // Abort all non-programmatic deletions + return false; + }} proOptions={{ hideAttribution: true }} multiSelectionKeyCode={null} nodesFocusable={false}