From 6e81ede3de5254b079bf08c3758c2187d6da24b1 Mon Sep 17 00:00:00 2001 From: anuj-kumary Date: Mon, 10 Aug 2026 11:58:25 +0530 Subject: [PATCH] fix(ui): apply the revamped workflow header only in AI mode The revamped HeaderShell + HeaderBreadcrumb workflow-details header was rendering in classic (non-AI) mode too. Gate it on isAiMode so classic mode keeps the original TitleBreadcrumb + WorkflowHeader card, and only the AI experience gets the new gradient header. - WorkflowHeader: new isAiMode prop; renders HeaderShell when true, the original Card layout otherwise (shared edit-name modal + subcomponents) - WorkflowBuilder: render TitleBreadcrumb in classic mode; pass isAiMode and the AI HeaderBreadcrumb only when in AI mode - add an AI-mode render test alongside the existing classic-mode tests Co-Authored-By: Claude Opus 4.8 (1M context) --- .../WorkflowBuilder/WorkflowHeader.test.tsx | 17 ++ .../WorkflowBuilder/WorkflowHeader.tsx | 220 +++++++++++------- .../workflow-builder-components.interface.ts | 1 + .../WorkflowBuilder/WorkflowBuilder.tsx | 22 +- 4 files changed, 173 insertions(+), 87 deletions(-) diff --git a/openmetadata-ui/src/main/resources/ui/src/components/WorkflowDefinitions/WorkflowBuilder/WorkflowHeader.test.tsx b/openmetadata-ui/src/main/resources/ui/src/components/WorkflowDefinitions/WorkflowBuilder/WorkflowHeader.test.tsx index 7064fe8a1272..0e39735d0fb6 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/WorkflowDefinitions/WorkflowBuilder/WorkflowHeader.test.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/WorkflowDefinitions/WorkflowBuilder/WorkflowHeader.test.tsx @@ -275,4 +275,21 @@ describe('WorkflowHeader — System badge', () => { screen.queryByTestId('edit-workflow-title-button') ).not.toBeInTheDocument(); }); + + it('renders the AI-mode header with the breadcrumb when isAiMode is true', () => { + mockUseWorkflowModeContext.mockReturnValue(buildContextMock()); + + render( + crumb} + /> + ); + + expect(screen.getByTestId('ai-breadcrumb')).toBeInTheDocument(); + expect(screen.getByTestId('workflow-title')).toHaveTextContent( + 'Glossary Approval Workflow' + ); + }); }); diff --git a/openmetadata-ui/src/main/resources/ui/src/components/WorkflowDefinitions/WorkflowBuilder/WorkflowHeader.tsx b/openmetadata-ui/src/main/resources/ui/src/components/WorkflowDefinitions/WorkflowBuilder/WorkflowHeader.tsx index 271990970d5e..e91544b5074a 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/WorkflowDefinitions/WorkflowBuilder/WorkflowHeader.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/WorkflowDefinitions/WorkflowBuilder/WorkflowHeader.tsx @@ -14,6 +14,7 @@ import { Badge, Button, + Card, Dialog, Input, Modal, @@ -35,6 +36,7 @@ import { WorkflowControls } from './WorkflowControls'; export const WorkflowHeader: React.FC = ({ breadcrumb, + isAiMode = false, title, workflowName, handleTestWorkflow, @@ -89,97 +91,143 @@ export const WorkflowHeader: React.FC = ({ setIsEditModalOpen(false); }; + const workflowControls = ( + + ); + + const editWorkflowButton = showEditButton && ( + + ); + + const systemBadge = isNoOp && ( + + + + {t('label.system')} + + + + ); + + const editTitleButton = !isViewMode && !isNoOp && ( + - )} - - } - badge={ - <> - {isNoOp && ( - - - - {t('label.system')} - - - - )} - {!isViewMode && !isNoOp && ( -