diff --git a/packages/frontend/editor-ui/src/features/logs/components/LogDetailsPanel.vue b/packages/frontend/editor-ui/src/features/logs/components/LogDetailsPanel.vue index 672254043a..e6e16e95c4 100644 --- a/packages/frontend/editor-ui/src/features/logs/components/LogDetailsPanel.vue +++ b/packages/frontend/editor-ui/src/features/logs/components/LogDetailsPanel.vue @@ -78,8 +78,7 @@ function handleResizeEnd() {
diff --git a/packages/frontend/editor-ui/src/features/logs/components/LogsPanel.test.ts b/packages/frontend/editor-ui/src/features/logs/components/LogsPanel.test.ts index e6b0a5111b..3a03550dbf 100644 --- a/packages/frontend/editor-ui/src/features/logs/components/LogsPanel.test.ts +++ b/packages/frontend/editor-ui/src/features/logs/components/LogsPanel.test.ts @@ -433,6 +433,34 @@ describe('LogsPanel', () => { expect(rendered.queryByTestId('log-details-output')).not.toBeInTheDocument(); }); + it('should show new name when a node is renamed', async () => { + const canvasOperations = useCanvasOperations(); + + logsStore.toggleOpen(true); + + // Create deep copy so that renaming doesn't affect other test cases + workflowsStore.setWorkflow(deepCopy(aiChatWorkflow)); + workflowsStore.setWorkflowExecutionData(deepCopy(aiChatExecutionResponse)); + + const rendered = render(); + + await nextTick(); + + expect( + within(rendered.getByTestId('log-details-header')).getByText('AI Model'), + ).toBeInTheDocument(); + expect(within(rendered.getByRole('tree')).getByText('AI Model')).toBeInTheDocument(); + + await canvasOperations.renameNode('AI Model', 'Renamed!!'); + + await waitFor(() => { + expect( + within(rendered.getByTestId('log-details-header')).getByText('Renamed!!'), + ).toBeInTheDocument(); + expect(within(rendered.getByRole('tree')).getByText('Renamed!!')).toBeInTheDocument(); + }); + }); + describe('selection', () => { beforeEach(() => { logsStore.toggleOpen(true); @@ -487,6 +515,25 @@ describe('LogsPanel', () => { await rerender({}); expect(await findByRole('treeitem', { selected: true })).toHaveTextContent(/AI Model/); }); + + it("should automatically select a log for the selected node on canvas even after it's renamed", async () => { + const canvasOperations = useCanvasOperations(); + + workflowsStore.setWorkflow(deepCopy(aiChatWorkflow)); + workflowsStore.setWorkflowExecutionData(deepCopy(aiChatExecutionResponse)); + + logsStore.toggleLogSelectionSync(true); + + const { rerender, findByRole } = render(); + + expect(await findByRole('treeitem', { selected: true })).toHaveTextContent(/AI Model/); + + await canvasOperations.renameNode('AI Agent', 'Renamed Agent'); + uiStore.lastSelectedNode = 'Renamed Agent'; + + await rerender({}); + expect(await findByRole('treeitem', { selected: true })).toHaveTextContent(/Renamed Agent/); + }); }); describe('chat', () => { diff --git a/packages/frontend/editor-ui/src/features/logs/components/LogsPanel.vue b/packages/frontend/editor-ui/src/features/logs/components/LogsPanel.vue index 441feaa21b..33a3c31aea 100644 --- a/packages/frontend/editor-ui/src/features/logs/components/LogsPanel.vue +++ b/packages/frontend/editor-ui/src/features/logs/components/LogsPanel.vue @@ -200,7 +200,7 @@ function handleOpenNdv(treeNode: LogEntry) { :is-open="isOpen" :log-entry="selected" :window="pipWindow" - :latest-info="latestNodeNameById[selected.id]" + :latest-info="latestNodeNameById[selected.node.id]" :panels="logsStore.detailsState" @click-header="onToggleOpen(true)" @toggle-input-open="logsStore.toggleInputOpen" diff --git a/packages/frontend/editor-ui/src/features/logs/components/LogsViewNodeName.vue b/packages/frontend/editor-ui/src/features/logs/components/LogsViewNodeName.vue index 9a8b7b5bd1..f3e25dc673 100644 --- a/packages/frontend/editor-ui/src/features/logs/components/LogsViewNodeName.vue +++ b/packages/frontend/editor-ui/src/features/logs/components/LogsViewNodeName.vue @@ -1,9 +1,8 @@