From 85df6ada52489954116e7828b40963b7b4f524c1 Mon Sep 17 00:00:00 2001 From: Baptiste Devessier Date: Wed, 29 Jan 2025 18:29:01 +0100 Subject: [PATCH] Prevent all workflow node and edge deletions made through the UI (#9918) ## Old In the demo, I press the `Delete` key multiple times, and it deletes the nodes. https://github.com/user-attachments/assets/75bf84d3-b182-488c-a781-bbe236985142 ## New https://github.com/user-attachments/assets/4ae4f387-e143-4ce8-8140-6cb2c549f5d2 --- .../tests/workflow-visualizer.spec.ts | 32 +++++++++++++++++++ .../components/WorkflowDiagramCanvasBase.tsx | 4 +++ 2 files changed, 36 insertions(+) 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}