This is an automated email from the ASF dual-hosted git repository. marat pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-karavan.git
commit aad34f372c92c6997cb3dd6b222901e411fde71b Author: Marat Gubaidullin <[email protected]> AuthorDate: Tue Feb 6 19:56:56 2024 -0500 Fix #1109 --- .../src/topology/TopologyPropertiesPanel.tsx | 2 -- .../src/topology/TopologyPropertiesPanel.tsx | 2 -- karavan-vscode/src/designerView.ts | 12 ++++++++++ karavan-vscode/src/utils.ts | 26 ++++++++++++++++++++++ karavan-vscode/webview/App.tsx | 3 +-- .../webview/topology/TopologyPropertiesPanel.tsx | 2 -- .../src/main/webui/src/project/FileEditor.tsx | 25 ++++++++++++++++----- .../webui/src/topology/TopologyPropertiesPanel.tsx | 2 -- 8 files changed, 59 insertions(+), 15 deletions(-) diff --git a/karavan-designer/src/topology/TopologyPropertiesPanel.tsx b/karavan-designer/src/topology/TopologyPropertiesPanel.tsx index 67edb46c..27ef71b5 100644 --- a/karavan-designer/src/topology/TopologyPropertiesPanel.tsx +++ b/karavan-designer/src/topology/TopologyPropertiesPanel.tsx @@ -40,8 +40,6 @@ export function TopologyPropertiesPanel(props: Props) { const [selectedIds, setSelectedIds, fileName, nodeData] = useTopologyStore((s) => [s.selectedIds, s.setSelectedIds, s.fileName, s.nodeData], shallow); - console.log(nodeData) - function isRoute() { if (nodeData && nodeData.type === 'route') { const uri: string = nodeData?.step?.from.uri || ''; diff --git a/karavan-space/src/topology/TopologyPropertiesPanel.tsx b/karavan-space/src/topology/TopologyPropertiesPanel.tsx index 67edb46c..27ef71b5 100644 --- a/karavan-space/src/topology/TopologyPropertiesPanel.tsx +++ b/karavan-space/src/topology/TopologyPropertiesPanel.tsx @@ -40,8 +40,6 @@ export function TopologyPropertiesPanel(props: Props) { const [selectedIds, setSelectedIds, fileName, nodeData] = useTopologyStore((s) => [s.selectedIds, s.setSelectedIds, s.fileName, s.nodeData], shallow); - console.log(nodeData) - function isRoute() { if (nodeData && nodeData.type === 'route') { const uri: string = nodeData?.step?.from.uri || ''; diff --git a/karavan-vscode/src/designerView.ts b/karavan-vscode/src/designerView.ts index 0e9ecc20..572a54e8 100644 --- a/karavan-vscode/src/designerView.ts +++ b/karavan-vscode/src/designerView.ts @@ -140,6 +140,9 @@ export class DesignerView { case 'getData': this.sendData(panel, filename, relativePath, fullPath, message.reread === true, yaml, tab); break; + case 'internalConsumerClick': + this.internalConsumerClick(panel, fullPath, message.uri, message.name); + break; } }, undefined, @@ -233,4 +236,13 @@ export class DesignerView { } } } + + internalConsumerClick(panel: WebviewPanel, fullPath: string, uri: string, name: string) { + utils.getFileWithIntegralConsumer(fullPath, uri, name).then((filename) => { + if (filename !== undefined) { + commands.executeCommand("karavan.open", { fsPath: filename }) + } + }).catch(err => window.showErrorMessage("Error: " + err?.reason)); + + } } \ No newline at end of file diff --git a/karavan-vscode/src/utils.ts b/karavan-vscode/src/utils.ts index 2d94d2a6..008fd092 100644 --- a/karavan-vscode/src/utils.ts +++ b/karavan-vscode/src/utils.ts @@ -19,6 +19,7 @@ import { workspace, Uri, window, ExtensionContext, FileType } from "vscode"; import { CamelDefinitionYaml } from "core/api/CamelDefinitionYaml"; import { Integration, KameletTypes } from "core/model/IntegrationDefinition"; import { RegistryBeanDefinition } from "core/model/CamelDefinition"; +import { TopologyUtils } from "core/api/TopologyUtils"; export function getRoot(): string | undefined { return (workspace.workspaceFolders && (workspace.workspaceFolders.length > 0)) @@ -455,4 +456,29 @@ function setMinikubeEnvVariables(env: string): Map<string, string> { map.set(key, value); }) return map; +} + +export async function getFileWithIntegralConsumer(fullPath: string, uri: string, name: string) { + try { + const codePath = path.dirname(fullPath); + const integrations: Integration[] = []; + const files = await getCamelYamlFiles(codePath); + for (let x in files) { + const filename = files[x]; + const readData = await readFile(filename); + const code = Buffer.from(readData).toString('utf8'); + const i = CamelDefinitionYaml.yamlToIntegration(filename, code); + integrations.push(i); + } + const routes = TopologyUtils.findTopologyRouteNodes(integrations); + for (const route of routes) { + if (route?.from?.uri === uri && route?.from?.parameters?.name === name) { + return route.fileName; + } + } + } + catch (e) { + console.log((e as Error).message); + } + return undefined; } \ No newline at end of file diff --git a/karavan-vscode/webview/App.tsx b/karavan-vscode/webview/App.tsx index b19b03c7..7bd0e75e 100644 --- a/karavan-vscode/webview/App.tsx +++ b/karavan-vscode/webview/App.tsx @@ -72,7 +72,6 @@ class App extends React.Component<Props, State> { }; saveScheduledChanges = () => { - console.log("saveScheduledChanges", this.state.active); if (this.state.active && this.state.hasChanges) { this.save(this.state.relativePath, this.state.scheduledYaml, false); } @@ -234,7 +233,7 @@ class App extends React.Component<Props, State> { onSavePropertyPlaceholder={(key, value) => this.savePropertyPlaceholder(key, value)} beans={this.state.beans} onInternalConsumerClick={(uri, name) => { - console.log("onInternalConsumerClick", uri, name) + vscode.postMessage({ command: 'internalConsumerClick', uri: uri, name: name }); }} /> } diff --git a/karavan-vscode/webview/topology/TopologyPropertiesPanel.tsx b/karavan-vscode/webview/topology/TopologyPropertiesPanel.tsx index 67edb46c..27ef71b5 100644 --- a/karavan-vscode/webview/topology/TopologyPropertiesPanel.tsx +++ b/karavan-vscode/webview/topology/TopologyPropertiesPanel.tsx @@ -40,8 +40,6 @@ export function TopologyPropertiesPanel(props: Props) { const [selectedIds, setSelectedIds, fileName, nodeData] = useTopologyStore((s) => [s.selectedIds, s.setSelectedIds, s.fileName, s.nodeData], shallow); - console.log(nodeData) - function isRoute() { if (nodeData && nodeData.type === 'route') { const uri: string = nodeData?.step?.from.uri || ''; diff --git a/karavan-web/karavan-app/src/main/webui/src/project/FileEditor.tsx b/karavan-web/karavan-app/src/main/webui/src/project/FileEditor.tsx index 20b6a53e..2be7acf6 100644 --- a/karavan-web/karavan-app/src/main/webui/src/project/FileEditor.tsx +++ b/karavan-web/karavan-app/src/main/webui/src/project/FileEditor.tsx @@ -25,6 +25,7 @@ import {ProjectService} from "../api/ProjectService"; import {shallow} from "zustand/shallow"; import {CodeUtils} from "../util/CodeUtils"; import {RegistryBeanDefinition} from "karavan-core/lib/model/CamelDefinition"; +import {TopologyUtils} from "karavan-core/lib/api/TopologyUtils"; interface Props { projectId: string @@ -38,10 +39,11 @@ const languages = new Map<string, string>([ export function FileEditor (props: Props) { - const [file, designerTab] = useFileStore((s) => [s.file, s.designerTab], shallow ) + const [file, designerTab, setFile] = useFileStore((s) => [s.file, s.designerTab, s.setFile], shallow ) const [files] = useFilesStore((s) => [s.files], shallow); const [propertyPlaceholders, setPropertyPlaceholders] = useState<string[]>([]); const [beans, setBeans] = useState<RegistryBeanDefinition[]>([]); + const [key, setKey] = useState<string>(Math.random().toString()); useEffect(() => { const pp = CodeUtils.getPropertyPlaceholders(files); @@ -78,10 +80,25 @@ export function FileEditor (props: Props) { } } + function internalConsumerClick(uri: string, name: string) { + const integrations = files.filter(f => f.name.endsWith(".camel.yaml")) + .map(f => CamelDefinitionYaml.yamlToIntegration(f.name, f.code)); + const routes = TopologyUtils.findTopologyRouteNodes(integrations); + for (const route of routes) { + if (route?.from?.uri === uri && route?.from?.parameters?.name === name) { + const switchToFile = files.filter(f => f.name === route.fileName).at(0); + if (switchToFile){ + setFile('select', switchToFile); + setKey(Math.random().toString()) + } + } + } + } + function getDesigner () { return ( file !== undefined && - <KaravanDesigner + <KaravanDesigner key={key} showCodeTab={true} dark={false} filename={file.name} @@ -94,9 +111,7 @@ export function FileEditor (props: Props) { propertyPlaceholders={propertyPlaceholders} onSavePropertyPlaceholder={onSavePropertyPlaceholder} beans={beans} - onInternalConsumerClick={(uri, name) => { - console.log("onInternalConsumerClick", uri, name) - }} + onInternalConsumerClick={internalConsumerClick} /> ) } diff --git a/karavan-web/karavan-app/src/main/webui/src/topology/TopologyPropertiesPanel.tsx b/karavan-web/karavan-app/src/main/webui/src/topology/TopologyPropertiesPanel.tsx index 67edb46c..27ef71b5 100644 --- a/karavan-web/karavan-app/src/main/webui/src/topology/TopologyPropertiesPanel.tsx +++ b/karavan-web/karavan-app/src/main/webui/src/topology/TopologyPropertiesPanel.tsx @@ -40,8 +40,6 @@ export function TopologyPropertiesPanel(props: Props) { const [selectedIds, setSelectedIds, fileName, nodeData] = useTopologyStore((s) => [s.selectedIds, s.setSelectedIds, s.fileName, s.nodeData], shallow); - console.log(nodeData) - function isRoute() { if (nodeData && nodeData.type === 'route') { const uri: string = nodeData?.step?.from.uri || '';
