From 8f3e42e9c25f4c415a60ea9bfb60becfc472f302 Mon Sep 17 00:00:00 2001 From: yyh <92089059+lyzno1@users.noreply.github.com> Date: Mon, 4 May 2026 21:24:29 +0800 Subject: [PATCH] refactor(web): migrate workflow node actions menu (#35785) --- .../__tests__/node-contextmenu.spec.tsx | 72 ++-- .../__tests__/workflow-edge-events.spec.tsx | 2 +- .../__tests__/use-panel-interactions.spec.ts | 4 +- .../use-selection-interactions.spec.ts | 2 +- .../workflow/hooks/use-nodes-interactions.ts | 6 +- web/app/components/workflow/index.tsx | 2 +- .../__tests__/details.spec.tsx | 311 ++++++++++++++++++ .../__tests__/index.spec.tsx | 69 ++-- .../change-block-menu-trigger.tsx} | 33 +- .../context-menu-content.tsx | 101 ++++++ .../node-actions-menu/dropdown-content.tsx | 101 ++++++ .../workflow/node-actions-menu/index.tsx | 75 +++++ .../workflow/node-actions-menu/shared.tsx | 44 +++ .../workflow/node-actions-menu/types.ts | 8 + .../use-node-actions-menu-model.ts | 104 ++++++ .../components/workflow/node-contextmenu.tsx | 63 ++-- .../__tests__/node-control.spec.tsx | 4 +- .../nodes/_base/components/node-control.tsx | 5 +- .../panel-operator/__tests__/details.spec.tsx | 295 ----------------- .../_base/components/panel-operator/index.tsx | 86 ----- .../panel-operator/panel-operator-popup.tsx | 209 ------------ .../workflow-panel/__tests__/index.spec.tsx | 4 +- .../_base/components/workflow-panel/index.tsx | 4 +- .../store/__tests__/workflow-store.spec.ts | 2 +- .../workflow/store/workflow/node-slice.ts | 4 +- 25 files changed, 876 insertions(+), 734 deletions(-) create mode 100644 web/app/components/workflow/node-actions-menu/__tests__/details.spec.tsx rename web/app/components/workflow/{nodes/_base/components/panel-operator => node-actions-menu}/__tests__/index.spec.tsx (62%) rename web/app/components/workflow/{nodes/_base/components/panel-operator/change-block.tsx => node-actions-menu/change-block-menu-trigger.tsx} (82%) create mode 100644 web/app/components/workflow/node-actions-menu/context-menu-content.tsx create mode 100644 web/app/components/workflow/node-actions-menu/dropdown-content.tsx create mode 100644 web/app/components/workflow/node-actions-menu/index.tsx create mode 100644 web/app/components/workflow/node-actions-menu/shared.tsx create mode 100644 web/app/components/workflow/node-actions-menu/types.ts create mode 100644 web/app/components/workflow/node-actions-menu/use-node-actions-menu-model.ts delete mode 100644 web/app/components/workflow/nodes/_base/components/panel-operator/__tests__/details.spec.tsx delete mode 100644 web/app/components/workflow/nodes/_base/components/panel-operator/index.tsx delete mode 100644 web/app/components/workflow/nodes/_base/components/panel-operator/panel-operator-popup.tsx diff --git a/web/app/components/workflow/__tests__/node-contextmenu.spec.tsx b/web/app/components/workflow/__tests__/node-contextmenu.spec.tsx index 7418b7f313..a34e655652 100644 --- a/web/app/components/workflow/__tests__/node-contextmenu.spec.tsx +++ b/web/app/components/workflow/__tests__/node-contextmenu.spec.tsx @@ -1,15 +1,24 @@ import type { Node } from '../types' import { fireEvent, render, screen } from '@testing-library/react' -import NodeContextmenu from '../node-contextmenu' +import { NodeContextmenu } from '../node-contextmenu' -const mockUseClickAway = vi.hoisted(() => vi.fn()) const mockUseNodes = vi.hoisted(() => vi.fn()) const mockUsePanelInteractions = vi.hoisted(() => vi.fn()) const mockUseStore = vi.hoisted(() => vi.fn()) -const mockPanelOperatorPopup = vi.hoisted(() => vi.fn()) +const mockNodeActionsContextMenuContent = vi.hoisted(() => vi.fn()) +const mockContextMenuContent = vi.hoisted(() => vi.fn()) -vi.mock('ahooks', () => ({ - useClickAway: (...args: unknown[]) => mockUseClickAway(...args), +vi.mock('@langgenius/dify-ui/context-menu', () => ({ + ContextMenu: ({ children, onOpenChange }: { children: React.ReactNode, onOpenChange: (open: boolean) => void }) => ( +