From 1763f94a5fd46b97758d9c34775b4ad597344c4d Mon Sep 17 00:00:00 2001 From: Muse Date: Thu, 22 Oct 2026 22:20:23 +0000 Subject: [PATCH] B4 frontend: probe task management modal on the nodes page - ProbeTasksModal: self-loading/self-saving surface (B3 probe-meta pattern), tasks grouped by region label (ungrouped last), editor with name/region/target/interval/auto-join + agent-node multi select snapshotting baseNodeIds for the base-diff save; delete with confirm. Toolbar entry on NodeList (RadarChart icon), wired in NodesPage; NodeList call sites in two component tests updated for the new required prop. - i18n pages.nodes.probeTasks.* (25 keys) in all 13 locales: zh-CN translated, en-US English, others English placeholder per repo convention; insertion verified pure-additive (351 insertions, 0 deletions) and the i18n dead-key failures are byte-identical to the B3 baseline. - tsc clean; oxlint 0/0 (baseline parity); oxfmt clean on touched files (3 pre-existing drift files untouched). --- frontend/src/pages/nodes/NodeList.tsx | 6 + frontend/src/pages/nodes/NodesPage.tsx | 9 + frontend/src/pages/nodes/ProbeTasksModal.tsx | 331 ++++++++++++++++++ .../test/node-list-category-chips.test.tsx | 1 + frontend/src/test/node-list-rowkey.test.tsx | 1 + internal/web/translation/ar-EG.json | 27 ++ internal/web/translation/en-US.json | 27 ++ internal/web/translation/es-ES.json | 27 ++ internal/web/translation/fa-IR.json | 27 ++ internal/web/translation/id-ID.json | 27 ++ internal/web/translation/ja-JP.json | 27 ++ internal/web/translation/pt-BR.json | 27 ++ internal/web/translation/ru-RU.json | 27 ++ internal/web/translation/tr-TR.json | 27 ++ internal/web/translation/uk-UA.json | 27 ++ internal/web/translation/vi-VN.json | 27 ++ internal/web/translation/zh-CN.json | 27 ++ internal/web/translation/zh-TW.json | 27 ++ 18 files changed, 699 insertions(+) create mode 100644 frontend/src/pages/nodes/ProbeTasksModal.tsx diff --git a/frontend/src/pages/nodes/NodeList.tsx b/frontend/src/pages/nodes/NodeList.tsx index c50e88c..ffe595b 100644 --- a/frontend/src/pages/nodes/NodeList.tsx +++ b/frontend/src/pages/nodes/NodeList.tsx @@ -27,6 +27,7 @@ import { InfoCircleOutlined, MoreOutlined, PlusOutlined, + RadarChartOutlined, RightOutlined, SafetyCertificateOutlined, TeamOutlined, @@ -48,6 +49,7 @@ interface NodeListProps { onSelectionChange: (ids: number[]) => void; onAdd: () => void; onMtls: () => void; + onProbeTasks: () => void; onEdit: (node: NodeRecord) => void; onDelete: (node: NodeRecord) => void; onProbe: (node: NodeRecord) => void; @@ -218,6 +220,7 @@ export default function NodeList({ onSelectionChange, onAdd, onMtls, + onProbeTasks, onEdit, onDelete, onProbe, @@ -618,6 +621,9 @@ export default function NodeList({ + {selectedIds.length > 0 && ( + void onDelete(task)} + okText={t('pages.nodes.probeTasks.delete')} + cancelText={t('pages.nodes.probeTasks.cancel')} + > +