From 7903a300dbaaa2253424d89fd9de50dc856ccf84 Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Sat, 28 Mar 2026 16:04:53 +0100 Subject: [PATCH] fix(ui): restore TRACE/TAP badges on diagram nodes via nodeConfigs --- ui/src/pages/Exchanges/ExchangesPage.tsx | 27 +++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/ui/src/pages/Exchanges/ExchangesPage.tsx b/ui/src/pages/Exchanges/ExchangesPage.tsx index 53547e54..23373da2 100644 --- a/ui/src/pages/Exchanges/ExchangesPage.tsx +++ b/ui/src/pages/Exchanges/ExchangesPage.tsx @@ -4,7 +4,9 @@ import { useGlobalFilters } from '@cameleer/design-system'; import { useExecutionDetail } from '../../api/queries/executions'; import { useDiagramByRoute } from '../../api/queries/diagrams'; import { useRouteCatalog } from '../../api/queries/catalog'; -import type { NodeAction } from '../../components/ProcessDiagram/types'; +import { useApplicationConfig } from '../../api/queries/commands'; +import { useTracingStore } from '../../stores/tracing-store'; +import type { NodeAction, NodeConfig } from '../../components/ProcessDiagram/types'; import { ExchangeHeader } from './ExchangeHeader'; import { ExecutionDiagram } from '../../components/ExecutionDiagram/ExecutionDiagram'; import { ProcessDiagram } from '../../components/ProcessDiagram'; @@ -134,6 +136,27 @@ function DiagramPanel({ appId, routeId, exchangeId, onCorrelatedSelect, onClearS return ids; }, [catalog]); + // Build nodeConfigs from tracing store + app config (for TRACE/TAP badges) + const { data: appConfig } = useApplicationConfig(appId); + const tracedMap = useTracingStore((s) => s.tracedProcessors[appId]); + const nodeConfigs = useMemo(() => { + const map = new Map(); + if (tracedMap) { + for (const pid of Object.keys(tracedMap)) { + map.set(pid, { traceEnabled: true }); + } + } + if (appConfig?.taps) { + for (const tap of appConfig.taps) { + if (tap.enabled) { + const existing = map.get(tap.processorId); + map.set(tap.processorId, { ...existing, tapExpression: tap.expression }); + } + } + } + return map; + }, [tracedMap, appConfig]); + const handleNodeAction = useCallback((nodeId: string, action: NodeAction) => { if (action === 'configure-tap') { navigate(`/admin/appconfig?app=${encodeURIComponent(appId)}&processor=${encodeURIComponent(nodeId)}`); @@ -150,6 +173,7 @@ function DiagramPanel({ appId, routeId, exchangeId, onCorrelatedSelect, onClearS executionDetail={detail} knownRouteIds={knownRouteIds} onNodeAction={handleNodeAction} + nodeConfigs={nodeConfigs} /> ); @@ -164,6 +188,7 @@ function DiagramPanel({ appId, routeId, exchangeId, onCorrelatedSelect, onClearS diagramLayout={diagramQuery.data} knownRouteIds={knownRouteIds} onNodeAction={handleNodeAction} + nodeConfigs={nodeConfigs} /> ); }