From cf59a53fe21afe9ec1b63e7d20be8fbbf778ae1f Mon Sep 17 00:00:00 2001 From: Ivo Bek Date: Fri, 11 Oct 2024 09:59:06 +0200 Subject: [PATCH] feat #1217: Open side panel when new node is added --- .../Custom/ContextMenu/ItemAddStep.tsx | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/packages/ui/src/components/Visualization/Custom/ContextMenu/ItemAddStep.tsx b/packages/ui/src/components/Visualization/Custom/ContextMenu/ItemAddStep.tsx index 514493401..4fb5d4c44 100644 --- a/packages/ui/src/components/Visualization/Custom/ContextMenu/ItemAddStep.tsx +++ b/packages/ui/src/components/Visualization/Custom/ContextMenu/ItemAddStep.tsx @@ -1,4 +1,4 @@ -import { ContextMenuItem } from '@patternfly/react-topology'; +import { ContextMenuItem, SELECTION_EVENT, useVisualizationController } from '@patternfly/react-topology'; import { FunctionComponent, PropsWithChildren, useCallback, useContext } from 'react'; import { IDataTestID } from '../../../../models'; import { AddStepMode, IVisualizationNode } from '../../../../models/visualization/base-visual-entity'; @@ -10,9 +10,26 @@ interface ItemAddStepProps extends PropsWithChildren { vizNode: IVisualizationNode; } +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function findVisualizationNode(node: any, targetPath: string): IVisualizationNode | null { + if (node?.data?.vizNode?.data?.path === targetPath) { + return node.data.vizNode; + } + + if (node?.children) { + for (const child of node.children) { + const result = findVisualizationNode(child, targetPath); + if (result) return result; + } + } + + return null; +} + export const ItemAddStep: FunctionComponent = (props) => { const entitiesContext = useContext(EntitiesContext); const catalogModalContext = useContext(CatalogModalContext); + const controller = useVisualizationController(); const onAddNode = useCallback(async () => { if (!props.vizNode || !entitiesContext) return; @@ -29,7 +46,14 @@ export const ItemAddStep: FunctionComponent = (props) => { /** Update entity */ entitiesContext.updateEntitiesFromCamelResource(); - }, [catalogModalContext, entitiesContext, props.mode, props.vizNode]); + + setTimeout(() => { + const result = props.vizNode.data.path + ? findVisualizationNode(controller.getGraph(), props.vizNode.data.path) + : null; + controller.fireEvent(SELECTION_EVENT, [result?.getNextNode()?.id]); + }, 200); + }, [props.vizNode, props.mode, entitiesContext, catalogModalContext, controller]); return (