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


The following commit(s) were added to refs/heads/main by this push:
     new 9679c6d  Fixed #94 (#98)
9679c6d is described below

commit 9679c6d891b45ee8a162f2a600a20de788931035
Author: Marat Gubaidullin <[email protected]>
AuthorDate: Mon Nov 15 19:53:42 2021 -0500

    Fixed #94 (#98)
---
 karavan-app/pom.xml                                |  2 +-
 karavan-app/src/main/webapp/package.json           |  2 +-
 karavan-designer/package.json                      |  2 +-
 karavan-designer/src/designer/api/CamelApi.tsx     | 34 ++++++++++++++++++++--
 karavan-designer/src/designer/api/CamelApiExt.tsx  |  2 +-
 karavan-designer/src/designer/model/CamelModel.tsx |  4 ++-
 karavan-generator/pom.xml                          |  2 +-
 .../karavan/generator/CamelModelGenerator.java     |  1 +
 .../main/resources/CamelApi.findStep.choiceStep.tx |  1 +
 .../src/main/resources/CamelApi.findStep.footer.tx |  7 +++--
 .../src/main/resources/CamelApi.findStep.header.tx |  1 +
 .../main/resources/CamelApi.findStep.otherwise.tx  |  1 +
 .../src/main/resources/CamelApi.findStep.when.tx   |  1 +
 .../src/main/resources/camel-model.template        |  4 ++-
 karavan-vscode/CHANGELOG.md                        |  3 ++
 karavan-vscode/package.json                        |  2 +-
 16 files changed, 57 insertions(+), 12 deletions(-)

diff --git a/karavan-app/pom.xml b/karavan-app/pom.xml
index b893728..5182b97 100644
--- a/karavan-app/pom.xml
+++ b/karavan-app/pom.xml
@@ -18,7 +18,7 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
     <modelVersion>4.0.0</modelVersion>
         <groupId>org.apache.camel.karavan</groupId>
-        <version>0.0.6</version>
+        <version>0.0.7</version>
     <artifactId>karavan</artifactId>
     <properties>
         <compiler-plugin.version>3.8.1</compiler-plugin.version>
diff --git a/karavan-app/src/main/webapp/package.json 
b/karavan-app/src/main/webapp/package.json
index 22facc4..becd5f3 100644
--- a/karavan-app/src/main/webapp/package.json
+++ b/karavan-app/src/main/webapp/package.json
@@ -1,6 +1,6 @@
 {
   "name": "karavan",
-  "version": "0.0.6",
+  "version": "0.0.7",
   "private": true,
   "dependencies": {
     "@patternfly/patternfly": "^4.132.2",
diff --git a/karavan-designer/package.json b/karavan-designer/package.json
index 4470227..a039038 100644
--- a/karavan-designer/package.json
+++ b/karavan-designer/package.json
@@ -1,6 +1,6 @@
 {
   "name": "karavan-designer",
-  "version": "0.0.6",
+  "version": "0.0.7",
   "private": true,
   "dependencies": {
     "@patternfly/patternfly": "^4.132.2",
diff --git a/karavan-designer/src/designer/api/CamelApi.tsx 
b/karavan-designer/src/designer/api/CamelApi.tsx
index d939ad5..d8f1939 100644
--- a/karavan-designer/src/designer/api/CamelApi.tsx
+++ b/karavan-designer/src/designer/api/CamelApi.tsx
@@ -1045,12 +1045,14 @@ export class CamelApi {
 
     static findStep = (steps: ProcessorStep[] | undefined, uuid: string, 
parentUuid?: string, result?: ProcessorStepMeta): ProcessorStepMeta => {
         if (result?.step !== undefined) return result;
+        if (result === undefined) result = new ProcessorStepMeta(undefined, 
parentUuid, undefined, []);
         if (steps !== undefined){
             for (let index = 0, step; step = steps[index]; index++) {
                 if (step.uuid !== uuid) {
                     switch (step.dslName) {
                         case 'policyStep':
                             result = CamelApi.findStep((step as 
PolicyStep).policy.steps, uuid, step.uuid, result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
                         case 'choiceStep':
                             const o = (step as ChoiceStep).choice.otherwise;
@@ -1059,87 +1061,115 @@ export class CamelApi {
                             if (o) s.push(o);
                             if (w) s.push(...w);
                             result = CamelApi.findStep(s, uuid, step.uuid, 
result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
                         case 'otherwise':
                             result = CamelApi.findStep((step as 
Otherwise).steps, uuid, step.uuid, result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
                         case 'fromStep':
                             result = CamelApi.findStep((step as 
FromStep).from.steps, uuid, step.uuid, result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
                         case 'onCompletionStep':
                             result = CamelApi.findStep((step as 
OnCompletionStep).onCompletion.steps, uuid, step.uuid, result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
                         case 'splitStep':
                             result = CamelApi.findStep((step as 
SplitStep).split.steps, uuid, step.uuid, result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
                         case 'transactedStep':
                             result = CamelApi.findStep((step as 
TransactedStep).transacted.steps, uuid, step.uuid, result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
                         case 'interceptFromStep':
                             result = CamelApi.findStep((step as 
InterceptFromStep).interceptFrom.steps, uuid, step.uuid, result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
                         case 'doCatchStep':
                             result = CamelApi.findStep((step as 
DoCatchStep).doCatch.steps, uuid, step.uuid, result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
                         case 'circuitBreakerStep':
                             result = CamelApi.findStep((step as 
CircuitBreakerStep).circuitBreaker.steps, uuid, step.uuid, result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
                         case 'interceptStep':
                             result = CamelApi.findStep((step as 
InterceptStep).intercept.steps, uuid, step.uuid, result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
                         case 'onFallbackStep':
                             result = CamelApi.findStep((step as 
OnFallbackStep).onFallback.steps, uuid, step.uuid, result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
                         case 'multicastStep':
                             result = CamelApi.findStep((step as 
MulticastStep).multicast.steps, uuid, step.uuid, result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
                         case 'loadBalanceStep':
                             result = CamelApi.findStep((step as 
LoadBalanceStep).loadBalance.steps, uuid, step.uuid, result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
                         case 'whenSkipSendToEndpointStep':
                             result = CamelApi.findStep((step as 
WhenSkipSendToEndpointStep).whenSkipSendToEndpoint.steps, uuid, step.uuid, 
result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
                         case 'loopStep':
                             result = CamelApi.findStep((step as 
LoopStep).loop.steps, uuid, step.uuid, result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
                         case 'interceptSendToEndpointStep':
                             result = CamelApi.findStep((step as 
InterceptSendToEndpointStep).interceptSendToEndpoint.steps, uuid, step.uuid, 
result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
                         case 'doTryStep':
                             result = CamelApi.findStep((step as 
DoTryStep).doTry.steps, uuid, step.uuid, result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
                         case 'resequenceStep':
                             result = CamelApi.findStep((step as 
ResequenceStep).resequence.steps, uuid, step.uuid, result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
                         case 'pipelineStep':
                             result = CamelApi.findStep((step as 
PipelineStep).pipeline.steps, uuid, step.uuid, result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
                         case 'sagaStep':
                             result = CamelApi.findStep((step as 
SagaStep).saga.steps, uuid, step.uuid, result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
                         case 'when':
                             result = CamelApi.findStep((step as When).steps, 
uuid, step.uuid, result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
                         case 'doFinallyStep':
                             result = CamelApi.findStep((step as 
DoFinallyStep).doFinally.steps, uuid, step.uuid, result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
                         case 'filterStep':
                             result = CamelApi.findStep((step as 
FilterStep).filter.steps, uuid, step.uuid, result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
                         case 'aggregateStep':
                             result = CamelApi.findStep((step as 
AggregateStep).aggregate.steps, uuid, step.uuid, result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
                         case 'idempotentConsumerStep':
                             result = CamelApi.findStep((step as 
IdempotentConsumerStep).idempotentConsumer.steps, uuid, step.uuid, result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
                     }
                 } else {
-                    result = new  ProcessorStepMeta(step, parentUuid, index);
+                    const paths: string[] = result?.pathUuids ? 
result?.pathUuids : [];
+                    paths.push(step.uuid);
+                    result = new  ProcessorStepMeta(step, parentUuid, index, 
paths);
                     break;
                 }
             }
         }
-        return new ProcessorStepMeta(result?.step, result?.parentUuid, 
result?.position);
+        const paths: string[] = result?.pathUuids ? result?.pathUuids : [];
+        return new ProcessorStepMeta(result?.step, result?.parentUuid, 
result?.position, result?.pathUuids);
     }
 
     static getExpressionLanguage = (init?: Partial<Expression>): string | 
undefined => {
diff --git a/karavan-designer/src/designer/api/CamelApiExt.tsx 
b/karavan-designer/src/designer/api/CamelApiExt.tsx
index 872a02b..49e1906 100644
--- a/karavan-designer/src/designer/api/CamelApiExt.tsx
+++ b/karavan-designer/src/designer/api/CamelApiExt.tsx
@@ -42,7 +42,7 @@ export class CamelApiExt {
         const sourceUuid = sourceStep?.uuid;
         const targetFindStep = CamelApi.findStep(integration.spec.flows, 
target, undefined);
         const parentUuid = targetFindStep.parentUuid;
-        if (sourceUuid && parentUuid && sourceStep) {
+        if (sourceUuid && parentUuid && sourceStep && 
!targetFindStep.pathUuids.includes(source)) {
             CamelApiExt.deleteStepFromIntegration(integration, sourceUuid);
             switch (targetFindStep.step?.dslName) {
                 case 'when':
diff --git a/karavan-designer/src/designer/model/CamelModel.tsx 
b/karavan-designer/src/designer/model/CamelModel.tsx
index f4d8dd7..2c05644 100644
--- a/karavan-designer/src/designer/model/CamelModel.tsx
+++ b/karavan-designer/src/designer/model/CamelModel.tsx
@@ -57,12 +57,14 @@ export class ProcessorStepMeta {
     step?: ProcessorStep
     parentUuid?: string
     position: number = 0;
+    pathUuids: string [] = [];
 
 
-    constructor(step?: ProcessorStep, parentUuid?: string, position?: number) {
+    constructor(step?: ProcessorStep, parentUuid?: string, position?: number, 
pathUuids?: string []) {
         this.step = step;
         this.parentUuid = parentUuid;
         this.position = position || 0;
+        this.pathUuids = pathUuids || this.pathUuids;
     }
 }
 
diff --git a/karavan-generator/pom.xml b/karavan-generator/pom.xml
index 213e47e..461e962 100644
--- a/karavan-generator/pom.xml
+++ b/karavan-generator/pom.xml
@@ -19,7 +19,7 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>org.apache.camel.karavan</groupId>
     <artifactId>karavan-generator</artifactId>
-    <version>0.0.6</version>
+    <version>0.0.7</version>
     <properties>
         <compiler-plugin.version>3.8.1</compiler-plugin.version>
         <maven.compiler.parameters>true</maven.compiler.parameters>
diff --git 
a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelModelGenerator.java
 
b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelModelGenerator.java
index 825047e..b68547d 100644
--- 
a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelModelGenerator.java
+++ 
b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelModelGenerator.java
@@ -281,6 +281,7 @@ public final class CamelModelGenerator {
                 camelApi.append(String.format(
                         "                        case '%1$s':\n" +
                                 "                            result = 
CamelApi.findStep((step as %2$s).%3$s.steps, uuid, step.uuid, result);\n" +
+                                "                            if 
(result?.pathUuids !== undefined && result?.pathUuids.length > 0) 
result.pathUuids.push(step.uuid);\n" +
                                 "                            break;\n",
                         stepField, stepClass, name));
             }
diff --git 
a/karavan-generator/src/main/resources/CamelApi.findStep.choiceStep.tx 
b/karavan-generator/src/main/resources/CamelApi.findStep.choiceStep.tx
index 1d3733b..b6c1ecf 100644
--- a/karavan-generator/src/main/resources/CamelApi.findStep.choiceStep.tx
+++ b/karavan-generator/src/main/resources/CamelApi.findStep.choiceStep.tx
@@ -5,4 +5,5 @@
                             if (o) s.push(o);
                             if (w) s.push(...w);
                             result = CamelApi.findStep(s, uuid, step.uuid, 
result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
\ No newline at end of file
diff --git a/karavan-generator/src/main/resources/CamelApi.findStep.footer.tx 
b/karavan-generator/src/main/resources/CamelApi.findStep.footer.tx
index ab5a672..1b2d44c 100644
--- a/karavan-generator/src/main/resources/CamelApi.findStep.footer.tx
+++ b/karavan-generator/src/main/resources/CamelApi.findStep.footer.tx
@@ -1,9 +1,12 @@
                     }
                 } else {
-                    result = new  ProcessorStepMeta(step, parentUuid, index);
+                    const paths: string[] = result?.pathUuids ? 
result?.pathUuids : [];
+                    paths.push(step.uuid);
+                    result = new  ProcessorStepMeta(step, parentUuid, index, 
paths);
                     break;
                 }
             }
         }
-        return new ProcessorStepMeta(result?.step, result?.parentUuid, 
result?.position);
+        const paths: string[] = result?.pathUuids ? result?.pathUuids : [];
+        return new ProcessorStepMeta(result?.step, result?.parentUuid, 
result?.position, result?.pathUuids);
     }
\ No newline at end of file
diff --git a/karavan-generator/src/main/resources/CamelApi.findStep.header.tx 
b/karavan-generator/src/main/resources/CamelApi.findStep.header.tx
index 10694a8..72d09db 100644
--- a/karavan-generator/src/main/resources/CamelApi.findStep.header.tx
+++ b/karavan-generator/src/main/resources/CamelApi.findStep.header.tx
@@ -1,5 +1,6 @@
     static findStep = (steps: ProcessorStep[] | undefined, uuid: string, 
parentUuid?: string, result?: ProcessorStepMeta): ProcessorStepMeta => {
         if (result?.step !== undefined) return result;
+        if (result === undefined) result = new ProcessorStepMeta(undefined, 
parentUuid, undefined, []);
         if (steps !== undefined){
             for (let index = 0, step; step = steps[index]; index++) {
                 if (step.uuid !== uuid) {
diff --git 
a/karavan-generator/src/main/resources/CamelApi.findStep.otherwise.tx 
b/karavan-generator/src/main/resources/CamelApi.findStep.otherwise.tx
index f93bf05..ad4482d 100644
--- a/karavan-generator/src/main/resources/CamelApi.findStep.otherwise.tx
+++ b/karavan-generator/src/main/resources/CamelApi.findStep.otherwise.tx
@@ -1,3 +1,4 @@
                         case 'otherwise':
                             result = CamelApi.findStep((step as 
Otherwise).steps, uuid, step.uuid, result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
\ No newline at end of file
diff --git a/karavan-generator/src/main/resources/CamelApi.findStep.when.tx 
b/karavan-generator/src/main/resources/CamelApi.findStep.when.tx
index 34d6508..5c0fa7a 100644
--- a/karavan-generator/src/main/resources/CamelApi.findStep.when.tx
+++ b/karavan-generator/src/main/resources/CamelApi.findStep.when.tx
@@ -1,3 +1,4 @@
                         case 'when':
                             result = CamelApi.findStep((step as When).steps, 
uuid, step.uuid, result);
+                            if (result?.pathUuids !== undefined && 
result?.pathUuids.length > 0) result.pathUuids.push(step.uuid);
                             break;
\ No newline at end of file
diff --git a/karavan-generator/src/main/resources/camel-model.template 
b/karavan-generator/src/main/resources/camel-model.template
index dde3167..a84f8c9 100644
--- a/karavan-generator/src/main/resources/camel-model.template
+++ b/karavan-generator/src/main/resources/camel-model.template
@@ -57,12 +57,14 @@ export class ProcessorStepMeta {
     step?: ProcessorStep
     parentUuid?: string
     position: number = 0;
+    pathUuids: string [] = [];
 
 
-    constructor(step?: ProcessorStep, parentUuid?: string, position?: number) {
+    constructor(step?: ProcessorStep, parentUuid?: string, position?: number, 
pathUuids?: string []) {
         this.step = step;
         this.parentUuid = parentUuid;
         this.position = position || 0;
+        this.pathUuids = pathUuids || this.pathUuids;
     }
 }
 
diff --git a/karavan-vscode/CHANGELOG.md b/karavan-vscode/CHANGELOG.md
index 9a0fa65..7f1fbae 100644
--- a/karavan-vscode/CHANGELOG.md
+++ b/karavan-vscode/CHANGELOG.md
@@ -1,5 +1,8 @@
 # Changelog
 
+## 0.0.7
+1. Hot-fix for `Dragged element disappears when dropped into its child` 
[#94](https://github.com/apache/camel-karavan/issues/94)
+
 ## 0.0.6
 1. Extension configuration for `Run locally with CamelJBang` 
[#70](https://github.com/apache/camel-karavan/issues/70)
 2. Reorder steps with drag-and-drop 
[#39](https://github.com/apache/camel-karavan/issues/39)
diff --git a/karavan-vscode/package.json b/karavan-vscode/package.json
index a585c12..53d4e6e 100644
--- a/karavan-vscode/package.json
+++ b/karavan-vscode/package.json
@@ -4,7 +4,7 @@
   "displayName": "Camel Karavan Designer",
   "icon": "icons/icon.png",
   "description": "Integration Designer for Apache Camel",
-  "version": "0.0.6",
+  "version": "0.0.7",
   "license": "Apache-2.0",
   "preview": true,
   "bugs": {

Reply via email to