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 || '';

Reply via email to