You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ma...@apache.org on 2024/03/19 22:00:09 UTC

(camel-karavan) branch main updated: Fix incorect Choice/When/Otherwise in multicast and Route COnfigration #1185

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 37b7cef7 Fix incorect Choice/When/Otherwise in multicast and Route COnfigration #1185
37b7cef7 is described below

commit 37b7cef75aa033d5f030a31d9c7a63cb514afafb
Author: Marat Gubaidullin <ma...@talismancloud.io>
AuthorDate: Tue Mar 19 17:59:58 2024 -0400

    Fix incorect Choice/When/Otherwise in multicast and Route COnfigration #1185
---
 .../src/main/webui/src/designer/DesignerStore.ts   |   6 --
 .../main/webui/src/designer/KaravanDesigner.tsx    |   6 +-
 .../webui/src/designer/route/DslConnections.tsx    |  31 ++++--
 .../webui/src/designer/route/RouteDesigner.tsx     |   4 +-
 .../src/designer/route/element/DslElement.tsx      |   4 +-
 .../designer/route/element/DslElementHeader.tsx    |   4 +-
 .../src/designer/route/useRouteDesignerHook.tsx    |   4 +-
 karavan-designer/public/example/demo.camel.yaml    | 115 ++++++++++-----------
 karavan-designer/src/designer/DesignerStore.ts     |   6 --
 karavan-designer/src/designer/KaravanDesigner.tsx  |   6 +-
 .../src/designer/route/DslConnections.tsx          |  31 ++++--
 .../src/designer/route/RouteDesigner.tsx           |   4 +-
 .../src/designer/route/element/DslElement.tsx      |   4 +-
 .../designer/route/element/DslElementHeader.tsx    |   4 +-
 .../src/designer/route/useRouteDesignerHook.tsx    |   4 +-
 karavan-space/src/designer/DesignerStore.ts        |   6 --
 karavan-space/src/designer/KaravanDesigner.tsx     |   6 +-
 .../src/designer/route/DslConnections.tsx          |  31 ++++--
 karavan-space/src/designer/route/RouteDesigner.tsx |   4 +-
 .../src/designer/route/element/DslElement.tsx      |   4 +-
 .../designer/route/element/DslElementHeader.tsx    |   4 +-
 .../src/designer/route/useRouteDesignerHook.tsx    |   4 +-
 22 files changed, 153 insertions(+), 139 deletions(-)

diff --git a/karavan-app/src/main/webui/src/designer/DesignerStore.ts b/karavan-app/src/main/webui/src/designer/DesignerStore.ts
index c19038ad..40418fb1 100644
--- a/karavan-app/src/main/webui/src/designer/DesignerStore.ts
+++ b/karavan-app/src/main/webui/src/designer/DesignerStore.ts
@@ -199,7 +199,6 @@ type DesignerState = {
     dark: boolean;
     notificationBadge: boolean;
     notificationMessage: [string, string];
-    hideLogDSL: boolean;
     shiftKeyPressed: boolean;
     showDeleteConfirmation: boolean;
     showMoveConfirmation: boolean;
@@ -220,7 +219,6 @@ const designerState: DesignerState = {
     notificationBadge: false,
     notificationMessage: ['', ''],
     dark: false,
-    hideLogDSL: false,
     shiftKeyPressed: false,
     showDeleteConfirmation: false,
     showMoveConfirmation: false,
@@ -238,7 +236,6 @@ const designerState: DesignerState = {
 
 type DesignerAction = {
     setDark: (dark: boolean) => void;
-    setHideLogDSL: (hideLogDSL: boolean) => void;
     setShiftKeyPressed: (shiftKeyPressed: boolean) => void;
     setShowDeleteConfirmation: (showDeleteConfirmation: boolean) => void;
     setShowMoveConfirmation: (showMoveConfirmation: boolean) => void;
@@ -259,9 +256,6 @@ export const useDesignerStore = createWithEqualityFn<DesignerState & DesignerAct
     setDark: (dark: boolean) => {
         set({dark: dark})
     },
-    setHideLogDSL: (hideLogDSL: boolean) => {
-        set({hideLogDSL: hideLogDSL})
-    },
     setShiftKeyPressed: (shiftKeyPressed: boolean) => {
         set({shiftKeyPressed: shiftKeyPressed})
     },
diff --git a/karavan-app/src/main/webui/src/designer/KaravanDesigner.tsx b/karavan-app/src/main/webui/src/designer/KaravanDesigner.tsx
index 36b65118..ff76fa19 100644
--- a/karavan-app/src/main/webui/src/designer/KaravanDesigner.tsx
+++ b/karavan-app/src/main/webui/src/designer/KaravanDesigner.tsx
@@ -53,7 +53,6 @@ interface Props {
     filename: string
     yaml: string
     dark: boolean
-    hideLogDSL?: boolean
     showCodeTab: boolean
     tab?: "routes" | "rest" | "beans"
     propertyPlaceholders: string[]
@@ -64,9 +63,9 @@ interface Props {
 export function KaravanDesigner(props: Props) {
 
     const [tab, setTab] = useState<string>('routes');
-    const [setDark, hideLogDSL, setHideLogDSL, setSelectedStep, reset, badge, message, setPropertyPlaceholders, setBeans] =
+    const [setDark, setSelectedStep, reset, badge, message, setPropertyPlaceholders, setBeans] =
         useDesignerStore((s) =>
-        [s.setDark, s.hideLogDSL, s.setHideLogDSL, s.setSelectedStep, s.reset, s.notificationBadge, s.notificationMessage, s.setPropertyPlaceholders, s.setBeans], shallow)
+        [s.setDark, s.setSelectedStep, s.reset, s.notificationBadge, s.notificationMessage, s.setPropertyPlaceholders, s.setBeans], shallow)
     const [integration, setIntegration, resetFiles, setVariables] = useIntegrationStore((s) =>
         [s.integration, s.setIntegration, s.resetFiles, s.setVariables], shallow)
 
@@ -97,7 +96,6 @@ export function KaravanDesigner(props: Props) {
             setVariables(VariableUtil.findVariables(props.files))
             setBeans(props.beans)
             resetFiles(props.files)
-            setHideLogDSL(props.hideLogDSL === true);
         } catch (e: any) {
             console.log(e)
             EventBus.sendAlert(' ' + e?.name, '' + e?.message, 'danger');
diff --git a/karavan-app/src/main/webui/src/designer/route/DslConnections.tsx b/karavan-app/src/main/webui/src/designer/route/DslConnections.tsx
index 99339f7c..a711780b 100644
--- a/karavan-app/src/main/webui/src/designer/route/DslConnections.tsx
+++ b/karavan-app/src/main/webui/src/designer/route/DslConnections.tsx
@@ -34,8 +34,8 @@ const overlapGap: number = 40;
 export function DslConnections() {
 
     const [integration, files] = useIntegrationStore((s) => [s.integration, s.files], shallow)
-    const [width, height, top, left, hideLogDSL] = useDesignerStore((s) =>
-        [s.width, s.height, s.top, s.left, s.hideLogDSL], shallow)
+    const [width, height, top, left] = useDesignerStore((s) =>
+        [s.width, s.height, s.top, s.left], shallow)
     const [steps, addStep, deleteStep, clearSteps] =
         useConnectionsStore((s) => [s.steps, s.addStep, s.deleteStep, s.clearSteps], shallow)
 
@@ -285,7 +285,7 @@ export function DslConnections() {
     }
 
     function isSpecial(pos: DslPosition): boolean {
-        return ['ChoiceDefinition', 'MulticastDefinition', 'TryDefinition'].includes(pos.step.dslName);
+        return ['ChoiceDefinition', 'MulticastDefinition', 'TryDefinition', 'RouteConfigurationDefinition'].includes(pos.step.dslName);
     }
 
     function addArrowToList(list: JSX.Element[], from?: DslPosition, to?: DslPosition, fromHeader?: boolean, toHeader?: boolean): JSX.Element[]  {
@@ -299,13 +299,17 @@ export function DslConnections() {
         return result;
     }
 
+    function getParentDsl(uuid?: string): string | undefined {
+        return  uuid ? steps.get(uuid)?.parent?.dslName : undefined;
+    }
+
     function getArrow(pos: DslPosition): JSX.Element[] {
         const list: JSX.Element[] = [];
 
          if (pos.parent && pos.parent.dslName === 'TryDefinition' && pos.position === 0) {
             const parent = steps.get(pos.parent.uuid);
             list.push(...addArrowToList(list, parent, pos, true, false))
-        } else if (pos.parent && pos.parent.dslName === 'MulticastDefinition') {
+        } else if (pos.parent && ['RouteConfigurationDefinition', 'MulticastDefinition'].includes(pos.parent.dslName)) {
             const parent = steps.get(pos.parent.uuid);
             list.push(...addArrowToList(list, parent, pos, true, false))
             if (parent?.nextstep) {
@@ -315,14 +319,17 @@ export function DslConnections() {
         } else if (pos.parent && pos.parent.dslName === 'ChoiceDefinition') {
             const parent = steps.get(pos.parent.uuid);
             list.push(...addArrowToList(list, parent, pos, true, false))
-        } else if (pos.parent && ['WhenDefinition', 'OtherwiseDefinition', 'CatchDefinition', 'FinallyDefinition'].includes(pos.parent.dslName)) {
-            if (pos.position === 0) {
+        } else if (pos.parent && ['WhenDefinition', 'OtherwiseDefinition', 'CatchDefinition', 'FinallyDefinition', 'TryDefinition'].includes(pos.parent.dslName)) {
+             if (pos.position === 0) {
                 const parent = steps.get(pos.parent.uuid);
                 list.push(...addArrowToList(list, parent, pos, true, false))
             }
             if (pos.position === (pos.inStepsLength - 1) && !isSpecial(pos)) {
                 const nextElement = getNext(pos);
-                if (nextElement) {
+                const parentDsl1 = getParentDsl(nextElement?.uuid);
+                if (parentDsl1 && ['RouteConfigurationDefinition', 'MulticastDefinition'].includes(parentDsl1)) {
+                    // do nothing
+                } else if (nextElement) {
                     const next = steps.get(nextElement.uuid);
                     list.push(...addArrowToList(list, pos, next, true, true))
                 }
@@ -341,12 +348,18 @@ export function DslConnections() {
         }
 
         if (['WhenDefinition', 'OtherwiseDefinition'].includes(pos.step.dslName) && pos.step.hasSteps() && (pos.step as any).steps.length === 0) {
-            if (pos.nextstep) {
+            const parentDsl = getParentDsl(pos?.nextstep?.uuid);
+            if (parentDsl && ['RouteConfigurationDefinition', 'MulticastDefinition'].includes(parentDsl)) {
+                // do nothing
+            } else if (pos.nextstep) {
                 const to = steps.get(pos.nextstep.uuid);
                 list.push(...addArrowToList(list, pos, to, true, true))
             } else {
                 const next = getNext(pos);
-                if (next) {
+                const parentDsl1 = getParentDsl(next?.uuid);
+                if (parentDsl1 && ['RouteConfigurationDefinition', 'MulticastDefinition'].includes(parentDsl1)) {
+                    // do nothing
+                } else if (next) {
                     const to = steps.get(next.uuid);
                     list.push(...addArrowToList(list, pos, to, true, true))
                 }
diff --git a/karavan-app/src/main/webui/src/designer/route/RouteDesigner.tsx b/karavan-app/src/main/webui/src/designer/route/RouteDesigner.tsx
index 9ef5e827..39c14fda 100644
--- a/karavan-app/src/main/webui/src/designer/route/RouteDesigner.tsx
+++ b/karavan-app/src/main/webui/src/designer/route/RouteDesigner.tsx
@@ -44,9 +44,9 @@ export function RouteDesigner() {
         isSourceKamelet, isActionKamelet, isKamelet, isSinkKamelet} = useRouteDesignerHook();
 
     const [integration] = useIntegrationStore((state) => [state.integration], shallow)
-    const [showDeleteConfirmation, setPosition, width, height, top, left, hideLogDSL, showMoveConfirmation, setShowMoveConfirmation] =
+    const [showDeleteConfirmation, setPosition, width, height, top, left, showMoveConfirmation, setShowMoveConfirmation] =
         useDesignerStore((s) =>
-        [s.showDeleteConfirmation, s.setPosition, s.width, s.height, s.top, s.left, s.hideLogDSL, s.showMoveConfirmation, s.setShowMoveConfirmation], shallow)
+        [s.showDeleteConfirmation, s.setPosition, s.width, s.height, s.top, s.left, s.showMoveConfirmation, s.setShowMoveConfirmation], shallow)
 
     const [showSelector] = useSelectorStore((s) => [s.showSelector], shallow)
 
diff --git a/karavan-app/src/main/webui/src/designer/route/element/DslElement.tsx b/karavan-app/src/main/webui/src/designer/route/element/DslElement.tsx
index 6f5ab5b5..70befc33 100644
--- a/karavan-app/src/main/webui/src/designer/route/element/DslElement.tsx
+++ b/karavan-app/src/main/webui/src/designer/route/element/DslElement.tsx
@@ -53,9 +53,9 @@ export function DslElement(props: Props) {
 
     const [integration] = useIntegrationStore((s) => [s.integration, s.setIntegration], shallow)
 
-    const [selectedUuids, selectedStep, showMoveConfirmation, setShowMoveConfirmation, hideLogDSL, setMoveElements] =
+    const [selectedUuids, selectedStep, showMoveConfirmation, setShowMoveConfirmation, setMoveElements] =
         useDesignerStore((s) =>
-            [s.selectedUuids, s.selectedStep, s.showMoveConfirmation, s.setShowMoveConfirmation, s.hideLogDSL, s.setMoveElements], shallow)
+            [s.selectedUuids, s.selectedStep, s.showMoveConfirmation, s.setShowMoveConfirmation, s.setMoveElements], shallow)
     const [isDragging, setIsDragging] = useState<boolean>(false);
 
     const [isDraggedOver, setIsDraggedOver] = useState<boolean>(false);
diff --git a/karavan-app/src/main/webui/src/designer/route/element/DslElementHeader.tsx b/karavan-app/src/main/webui/src/designer/route/element/DslElementHeader.tsx
index 1b5dbe5b..5ec041d2 100644
--- a/karavan-app/src/main/webui/src/designer/route/element/DslElementHeader.tsx
+++ b/karavan-app/src/main/webui/src/designer/route/element/DslElementHeader.tsx
@@ -53,9 +53,9 @@ export function DslElementHeader(props: Props) {
         isActionKamelet
     } = useRouteDesignerHook();
 
-    const [selectedUuids, selectedStep, showMoveConfirmation, setShowMoveConfirmation, hideLogDSL, setMoveElements] =
+    const [selectedUuids, selectedStep, showMoveConfirmation, setShowMoveConfirmation, setMoveElements] =
         useDesignerStore((s) =>
-            [s.selectedUuids, s.selectedStep, s.showMoveConfirmation, s.setShowMoveConfirmation, s.hideLogDSL, s.setMoveElements], shallow)
+            [s.selectedUuids, s.selectedStep, s.showMoveConfirmation, s.setShowMoveConfirmation, s.setMoveElements], shallow)
 
     function onOpenSelector(evt: React.MouseEvent, showSteps: boolean = true, isInsert: boolean = false) {
         evt.stopPropagation();
diff --git a/karavan-app/src/main/webui/src/designer/route/useRouteDesignerHook.tsx b/karavan-app/src/main/webui/src/designer/route/useRouteDesignerHook.tsx
index 0f9b7236..6589853a 100644
--- a/karavan-app/src/main/webui/src/designer/route/useRouteDesignerHook.tsx
+++ b/karavan-app/src/main/webui/src/designer/route/useRouteDesignerHook.tsx
@@ -41,10 +41,10 @@ export function useRouteDesignerHook () {
     const [integration, setIntegration] = useIntegrationStore((state) => [state.integration, state.setIntegration], shallow)
     const [selectedUuids,clipboardSteps,shiftKeyPressed,
         setShowDeleteConfirmation, setDeleteMessage, setSelectedStep, setSelectedUuids, setClipboardSteps, setShiftKeyPressed,
-        width, height, dark, hideLogDSL] = useDesignerStore((s) =>
+        width, height, dark] = useDesignerStore((s) =>
         [s.selectedUuids,s.clipboardSteps, s.shiftKeyPressed,
             s.setShowDeleteConfirmation, s.setDeleteMessage, s.setSelectedStep, s.setSelectedUuids, s.setClipboardSteps, s.setShiftKeyPressed,
-            s.width, s.height, s.dark, s.hideLogDSL], shallow)
+            s.width, s.height, s.dark], shallow)
     const [setParentId, setShowSelector, setSelectorTabIndex, setParentDsl, setShowSteps, setSelectedPosition] = useSelectorStore((s) =>
         [s.setParentId, s.setShowSelector, s.setSelectorTabIndex, s.setParentDsl, s.setShowSteps, s.setSelectedPosition], shallow)
 
diff --git a/karavan-designer/public/example/demo.camel.yaml b/karavan-designer/public/example/demo.camel.yaml
index b751e86b..cd4a1dd4 100644
--- a/karavan-designer/public/example/demo.camel.yaml
+++ b/karavan-designer/public/example/demo.camel.yaml
@@ -1,61 +1,60 @@
 - route:
-    id: route-fc08
+    id: route-5676
+    nodePrefixId: route-a26
     from:
-      id: from-4fb2
-      uri: timer
-      parameters:
-        period: '5000'
-        timerName: beers
+      id: from-e7d6
+      uri: aws2-s3
       steps:
-        - to:
-            id: to-2b12
-            variableReceive: beer1
-            uri: https
-            parameters:
-              httpUri: random-data-api.com/api/v2/beers
-        - to:
-            id: to-cd9b
-            variableReceive: beer2
-            uri: https
-            parameters:
-              httpUri: random-data-api.com/api/v2/beers
-        - setVariable:
-            id: setVariable-439c
-            name: alc1
-            expression:
-              java:
-                id: java-6ac5
-                expression: .alcohol | rtrimstr("%")
-        - setVariable:
-            id: setVariable-14bc
-            name: alc2
-            expression:
-              jq:
-                id: jq-73b5
-                expression: .alcohol | rtrimstr("%")
-                source: beer2
-                resultType: float
-        - choice:
-            id: choice-3fc5
-            when:
-              - id: choice
-                expression:
-                  simple:
-                    id: simple-699c
-                    expression: ${variable.alc1} > ${variable.alc2}
-                steps:
-                  - log:
-                      id: log-6ecf
-                      message: >-
-                        Beer battle: ${jq(variable:beer1,.name)}
-                        (${variable.alc1}%) is stronger than
-                        ${jq(variable:beer2,.name)} (${variable.alc2}%)
-            otherwise:
-              id: otherwise-03ac
-              steps:
-                - log:
-                    id: log-2477
-                    message: >-
-                      Beer battle: ${jq(variable:beer1,.name)}
-                      (${variable.alc1}%) is weaker than
-                      ${jq(variable:beer2,.name)} (${variable.alc2}%)
+        - multicast:
+            id: multicast-1032
+            steps:
+              - choice:
+                  id: choice-56ab
+                  when:
+                    - id: when-ff6fa
+                      expression:
+                        simple:
+                          id: simple-25f4
+                      steps:
+                        - log:
+                            id: log-34d4
+                            message: ${body}
+                        - loop:
+                            id: loop-f32d
+                            expression:
+                              simple:
+                                id: simple-2811
+                  otherwise:
+                    id: otherwise-987b
+                    steps:
+                      - log:
+                          id: log-802d
+                          message: ${body}
+              - circuitBreaker:
+                  id: circuitBreaker-64e5
+                  steps:
+                    - loop:
+                        id: loop-4062
+                        expression:
+                          simple:
+                            id: simple-041b
+                        steps:
+                          - multicast:
+                              id: multicast-70ae
+              - convertBodyTo:
+                  id: convertBodyTo-854c
+              - filter:
+                  id: filter-297b
+                  expression:
+                    simple:
+                      id: simple-90b6
+
+- routeConfiguration:
+    intercept:
+      - intercept:
+          id: intercept-5ede
+      - intercept:
+          id: intercept-93ca
+    interceptFrom:
+      - interceptFrom:
+          id: interceptFrom-14ca
diff --git a/karavan-designer/src/designer/DesignerStore.ts b/karavan-designer/src/designer/DesignerStore.ts
index c19038ad..40418fb1 100644
--- a/karavan-designer/src/designer/DesignerStore.ts
+++ b/karavan-designer/src/designer/DesignerStore.ts
@@ -199,7 +199,6 @@ type DesignerState = {
     dark: boolean;
     notificationBadge: boolean;
     notificationMessage: [string, string];
-    hideLogDSL: boolean;
     shiftKeyPressed: boolean;
     showDeleteConfirmation: boolean;
     showMoveConfirmation: boolean;
@@ -220,7 +219,6 @@ const designerState: DesignerState = {
     notificationBadge: false,
     notificationMessage: ['', ''],
     dark: false,
-    hideLogDSL: false,
     shiftKeyPressed: false,
     showDeleteConfirmation: false,
     showMoveConfirmation: false,
@@ -238,7 +236,6 @@ const designerState: DesignerState = {
 
 type DesignerAction = {
     setDark: (dark: boolean) => void;
-    setHideLogDSL: (hideLogDSL: boolean) => void;
     setShiftKeyPressed: (shiftKeyPressed: boolean) => void;
     setShowDeleteConfirmation: (showDeleteConfirmation: boolean) => void;
     setShowMoveConfirmation: (showMoveConfirmation: boolean) => void;
@@ -259,9 +256,6 @@ export const useDesignerStore = createWithEqualityFn<DesignerState & DesignerAct
     setDark: (dark: boolean) => {
         set({dark: dark})
     },
-    setHideLogDSL: (hideLogDSL: boolean) => {
-        set({hideLogDSL: hideLogDSL})
-    },
     setShiftKeyPressed: (shiftKeyPressed: boolean) => {
         set({shiftKeyPressed: shiftKeyPressed})
     },
diff --git a/karavan-designer/src/designer/KaravanDesigner.tsx b/karavan-designer/src/designer/KaravanDesigner.tsx
index 36b65118..ff76fa19 100644
--- a/karavan-designer/src/designer/KaravanDesigner.tsx
+++ b/karavan-designer/src/designer/KaravanDesigner.tsx
@@ -53,7 +53,6 @@ interface Props {
     filename: string
     yaml: string
     dark: boolean
-    hideLogDSL?: boolean
     showCodeTab: boolean
     tab?: "routes" | "rest" | "beans"
     propertyPlaceholders: string[]
@@ -64,9 +63,9 @@ interface Props {
 export function KaravanDesigner(props: Props) {
 
     const [tab, setTab] = useState<string>('routes');
-    const [setDark, hideLogDSL, setHideLogDSL, setSelectedStep, reset, badge, message, setPropertyPlaceholders, setBeans] =
+    const [setDark, setSelectedStep, reset, badge, message, setPropertyPlaceholders, setBeans] =
         useDesignerStore((s) =>
-        [s.setDark, s.hideLogDSL, s.setHideLogDSL, s.setSelectedStep, s.reset, s.notificationBadge, s.notificationMessage, s.setPropertyPlaceholders, s.setBeans], shallow)
+        [s.setDark, s.setSelectedStep, s.reset, s.notificationBadge, s.notificationMessage, s.setPropertyPlaceholders, s.setBeans], shallow)
     const [integration, setIntegration, resetFiles, setVariables] = useIntegrationStore((s) =>
         [s.integration, s.setIntegration, s.resetFiles, s.setVariables], shallow)
 
@@ -97,7 +96,6 @@ export function KaravanDesigner(props: Props) {
             setVariables(VariableUtil.findVariables(props.files))
             setBeans(props.beans)
             resetFiles(props.files)
-            setHideLogDSL(props.hideLogDSL === true);
         } catch (e: any) {
             console.log(e)
             EventBus.sendAlert(' ' + e?.name, '' + e?.message, 'danger');
diff --git a/karavan-designer/src/designer/route/DslConnections.tsx b/karavan-designer/src/designer/route/DslConnections.tsx
index 99339f7c..a711780b 100644
--- a/karavan-designer/src/designer/route/DslConnections.tsx
+++ b/karavan-designer/src/designer/route/DslConnections.tsx
@@ -34,8 +34,8 @@ const overlapGap: number = 40;
 export function DslConnections() {
 
     const [integration, files] = useIntegrationStore((s) => [s.integration, s.files], shallow)
-    const [width, height, top, left, hideLogDSL] = useDesignerStore((s) =>
-        [s.width, s.height, s.top, s.left, s.hideLogDSL], shallow)
+    const [width, height, top, left] = useDesignerStore((s) =>
+        [s.width, s.height, s.top, s.left], shallow)
     const [steps, addStep, deleteStep, clearSteps] =
         useConnectionsStore((s) => [s.steps, s.addStep, s.deleteStep, s.clearSteps], shallow)
 
@@ -285,7 +285,7 @@ export function DslConnections() {
     }
 
     function isSpecial(pos: DslPosition): boolean {
-        return ['ChoiceDefinition', 'MulticastDefinition', 'TryDefinition'].includes(pos.step.dslName);
+        return ['ChoiceDefinition', 'MulticastDefinition', 'TryDefinition', 'RouteConfigurationDefinition'].includes(pos.step.dslName);
     }
 
     function addArrowToList(list: JSX.Element[], from?: DslPosition, to?: DslPosition, fromHeader?: boolean, toHeader?: boolean): JSX.Element[]  {
@@ -299,13 +299,17 @@ export function DslConnections() {
         return result;
     }
 
+    function getParentDsl(uuid?: string): string | undefined {
+        return  uuid ? steps.get(uuid)?.parent?.dslName : undefined;
+    }
+
     function getArrow(pos: DslPosition): JSX.Element[] {
         const list: JSX.Element[] = [];
 
          if (pos.parent && pos.parent.dslName === 'TryDefinition' && pos.position === 0) {
             const parent = steps.get(pos.parent.uuid);
             list.push(...addArrowToList(list, parent, pos, true, false))
-        } else if (pos.parent && pos.parent.dslName === 'MulticastDefinition') {
+        } else if (pos.parent && ['RouteConfigurationDefinition', 'MulticastDefinition'].includes(pos.parent.dslName)) {
             const parent = steps.get(pos.parent.uuid);
             list.push(...addArrowToList(list, parent, pos, true, false))
             if (parent?.nextstep) {
@@ -315,14 +319,17 @@ export function DslConnections() {
         } else if (pos.parent && pos.parent.dslName === 'ChoiceDefinition') {
             const parent = steps.get(pos.parent.uuid);
             list.push(...addArrowToList(list, parent, pos, true, false))
-        } else if (pos.parent && ['WhenDefinition', 'OtherwiseDefinition', 'CatchDefinition', 'FinallyDefinition'].includes(pos.parent.dslName)) {
-            if (pos.position === 0) {
+        } else if (pos.parent && ['WhenDefinition', 'OtherwiseDefinition', 'CatchDefinition', 'FinallyDefinition', 'TryDefinition'].includes(pos.parent.dslName)) {
+             if (pos.position === 0) {
                 const parent = steps.get(pos.parent.uuid);
                 list.push(...addArrowToList(list, parent, pos, true, false))
             }
             if (pos.position === (pos.inStepsLength - 1) && !isSpecial(pos)) {
                 const nextElement = getNext(pos);
-                if (nextElement) {
+                const parentDsl1 = getParentDsl(nextElement?.uuid);
+                if (parentDsl1 && ['RouteConfigurationDefinition', 'MulticastDefinition'].includes(parentDsl1)) {
+                    // do nothing
+                } else if (nextElement) {
                     const next = steps.get(nextElement.uuid);
                     list.push(...addArrowToList(list, pos, next, true, true))
                 }
@@ -341,12 +348,18 @@ export function DslConnections() {
         }
 
         if (['WhenDefinition', 'OtherwiseDefinition'].includes(pos.step.dslName) && pos.step.hasSteps() && (pos.step as any).steps.length === 0) {
-            if (pos.nextstep) {
+            const parentDsl = getParentDsl(pos?.nextstep?.uuid);
+            if (parentDsl && ['RouteConfigurationDefinition', 'MulticastDefinition'].includes(parentDsl)) {
+                // do nothing
+            } else if (pos.nextstep) {
                 const to = steps.get(pos.nextstep.uuid);
                 list.push(...addArrowToList(list, pos, to, true, true))
             } else {
                 const next = getNext(pos);
-                if (next) {
+                const parentDsl1 = getParentDsl(next?.uuid);
+                if (parentDsl1 && ['RouteConfigurationDefinition', 'MulticastDefinition'].includes(parentDsl1)) {
+                    // do nothing
+                } else if (next) {
                     const to = steps.get(next.uuid);
                     list.push(...addArrowToList(list, pos, to, true, true))
                 }
diff --git a/karavan-designer/src/designer/route/RouteDesigner.tsx b/karavan-designer/src/designer/route/RouteDesigner.tsx
index 9ef5e827..39c14fda 100644
--- a/karavan-designer/src/designer/route/RouteDesigner.tsx
+++ b/karavan-designer/src/designer/route/RouteDesigner.tsx
@@ -44,9 +44,9 @@ export function RouteDesigner() {
         isSourceKamelet, isActionKamelet, isKamelet, isSinkKamelet} = useRouteDesignerHook();
 
     const [integration] = useIntegrationStore((state) => [state.integration], shallow)
-    const [showDeleteConfirmation, setPosition, width, height, top, left, hideLogDSL, showMoveConfirmation, setShowMoveConfirmation] =
+    const [showDeleteConfirmation, setPosition, width, height, top, left, showMoveConfirmation, setShowMoveConfirmation] =
         useDesignerStore((s) =>
-        [s.showDeleteConfirmation, s.setPosition, s.width, s.height, s.top, s.left, s.hideLogDSL, s.showMoveConfirmation, s.setShowMoveConfirmation], shallow)
+        [s.showDeleteConfirmation, s.setPosition, s.width, s.height, s.top, s.left, s.showMoveConfirmation, s.setShowMoveConfirmation], shallow)
 
     const [showSelector] = useSelectorStore((s) => [s.showSelector], shallow)
 
diff --git a/karavan-designer/src/designer/route/element/DslElement.tsx b/karavan-designer/src/designer/route/element/DslElement.tsx
index 6f5ab5b5..70befc33 100644
--- a/karavan-designer/src/designer/route/element/DslElement.tsx
+++ b/karavan-designer/src/designer/route/element/DslElement.tsx
@@ -53,9 +53,9 @@ export function DslElement(props: Props) {
 
     const [integration] = useIntegrationStore((s) => [s.integration, s.setIntegration], shallow)
 
-    const [selectedUuids, selectedStep, showMoveConfirmation, setShowMoveConfirmation, hideLogDSL, setMoveElements] =
+    const [selectedUuids, selectedStep, showMoveConfirmation, setShowMoveConfirmation, setMoveElements] =
         useDesignerStore((s) =>
-            [s.selectedUuids, s.selectedStep, s.showMoveConfirmation, s.setShowMoveConfirmation, s.hideLogDSL, s.setMoveElements], shallow)
+            [s.selectedUuids, s.selectedStep, s.showMoveConfirmation, s.setShowMoveConfirmation, s.setMoveElements], shallow)
     const [isDragging, setIsDragging] = useState<boolean>(false);
 
     const [isDraggedOver, setIsDraggedOver] = useState<boolean>(false);
diff --git a/karavan-designer/src/designer/route/element/DslElementHeader.tsx b/karavan-designer/src/designer/route/element/DslElementHeader.tsx
index 1b5dbe5b..5ec041d2 100644
--- a/karavan-designer/src/designer/route/element/DslElementHeader.tsx
+++ b/karavan-designer/src/designer/route/element/DslElementHeader.tsx
@@ -53,9 +53,9 @@ export function DslElementHeader(props: Props) {
         isActionKamelet
     } = useRouteDesignerHook();
 
-    const [selectedUuids, selectedStep, showMoveConfirmation, setShowMoveConfirmation, hideLogDSL, setMoveElements] =
+    const [selectedUuids, selectedStep, showMoveConfirmation, setShowMoveConfirmation, setMoveElements] =
         useDesignerStore((s) =>
-            [s.selectedUuids, s.selectedStep, s.showMoveConfirmation, s.setShowMoveConfirmation, s.hideLogDSL, s.setMoveElements], shallow)
+            [s.selectedUuids, s.selectedStep, s.showMoveConfirmation, s.setShowMoveConfirmation, s.setMoveElements], shallow)
 
     function onOpenSelector(evt: React.MouseEvent, showSteps: boolean = true, isInsert: boolean = false) {
         evt.stopPropagation();
diff --git a/karavan-designer/src/designer/route/useRouteDesignerHook.tsx b/karavan-designer/src/designer/route/useRouteDesignerHook.tsx
index 0f9b7236..6589853a 100644
--- a/karavan-designer/src/designer/route/useRouteDesignerHook.tsx
+++ b/karavan-designer/src/designer/route/useRouteDesignerHook.tsx
@@ -41,10 +41,10 @@ export function useRouteDesignerHook () {
     const [integration, setIntegration] = useIntegrationStore((state) => [state.integration, state.setIntegration], shallow)
     const [selectedUuids,clipboardSteps,shiftKeyPressed,
         setShowDeleteConfirmation, setDeleteMessage, setSelectedStep, setSelectedUuids, setClipboardSteps, setShiftKeyPressed,
-        width, height, dark, hideLogDSL] = useDesignerStore((s) =>
+        width, height, dark] = useDesignerStore((s) =>
         [s.selectedUuids,s.clipboardSteps, s.shiftKeyPressed,
             s.setShowDeleteConfirmation, s.setDeleteMessage, s.setSelectedStep, s.setSelectedUuids, s.setClipboardSteps, s.setShiftKeyPressed,
-            s.width, s.height, s.dark, s.hideLogDSL], shallow)
+            s.width, s.height, s.dark], shallow)
     const [setParentId, setShowSelector, setSelectorTabIndex, setParentDsl, setShowSteps, setSelectedPosition] = useSelectorStore((s) =>
         [s.setParentId, s.setShowSelector, s.setSelectorTabIndex, s.setParentDsl, s.setShowSteps, s.setSelectedPosition], shallow)
 
diff --git a/karavan-space/src/designer/DesignerStore.ts b/karavan-space/src/designer/DesignerStore.ts
index c19038ad..40418fb1 100644
--- a/karavan-space/src/designer/DesignerStore.ts
+++ b/karavan-space/src/designer/DesignerStore.ts
@@ -199,7 +199,6 @@ type DesignerState = {
     dark: boolean;
     notificationBadge: boolean;
     notificationMessage: [string, string];
-    hideLogDSL: boolean;
     shiftKeyPressed: boolean;
     showDeleteConfirmation: boolean;
     showMoveConfirmation: boolean;
@@ -220,7 +219,6 @@ const designerState: DesignerState = {
     notificationBadge: false,
     notificationMessage: ['', ''],
     dark: false,
-    hideLogDSL: false,
     shiftKeyPressed: false,
     showDeleteConfirmation: false,
     showMoveConfirmation: false,
@@ -238,7 +236,6 @@ const designerState: DesignerState = {
 
 type DesignerAction = {
     setDark: (dark: boolean) => void;
-    setHideLogDSL: (hideLogDSL: boolean) => void;
     setShiftKeyPressed: (shiftKeyPressed: boolean) => void;
     setShowDeleteConfirmation: (showDeleteConfirmation: boolean) => void;
     setShowMoveConfirmation: (showMoveConfirmation: boolean) => void;
@@ -259,9 +256,6 @@ export const useDesignerStore = createWithEqualityFn<DesignerState & DesignerAct
     setDark: (dark: boolean) => {
         set({dark: dark})
     },
-    setHideLogDSL: (hideLogDSL: boolean) => {
-        set({hideLogDSL: hideLogDSL})
-    },
     setShiftKeyPressed: (shiftKeyPressed: boolean) => {
         set({shiftKeyPressed: shiftKeyPressed})
     },
diff --git a/karavan-space/src/designer/KaravanDesigner.tsx b/karavan-space/src/designer/KaravanDesigner.tsx
index 36b65118..ff76fa19 100644
--- a/karavan-space/src/designer/KaravanDesigner.tsx
+++ b/karavan-space/src/designer/KaravanDesigner.tsx
@@ -53,7 +53,6 @@ interface Props {
     filename: string
     yaml: string
     dark: boolean
-    hideLogDSL?: boolean
     showCodeTab: boolean
     tab?: "routes" | "rest" | "beans"
     propertyPlaceholders: string[]
@@ -64,9 +63,9 @@ interface Props {
 export function KaravanDesigner(props: Props) {
 
     const [tab, setTab] = useState<string>('routes');
-    const [setDark, hideLogDSL, setHideLogDSL, setSelectedStep, reset, badge, message, setPropertyPlaceholders, setBeans] =
+    const [setDark, setSelectedStep, reset, badge, message, setPropertyPlaceholders, setBeans] =
         useDesignerStore((s) =>
-        [s.setDark, s.hideLogDSL, s.setHideLogDSL, s.setSelectedStep, s.reset, s.notificationBadge, s.notificationMessage, s.setPropertyPlaceholders, s.setBeans], shallow)
+        [s.setDark, s.setSelectedStep, s.reset, s.notificationBadge, s.notificationMessage, s.setPropertyPlaceholders, s.setBeans], shallow)
     const [integration, setIntegration, resetFiles, setVariables] = useIntegrationStore((s) =>
         [s.integration, s.setIntegration, s.resetFiles, s.setVariables], shallow)
 
@@ -97,7 +96,6 @@ export function KaravanDesigner(props: Props) {
             setVariables(VariableUtil.findVariables(props.files))
             setBeans(props.beans)
             resetFiles(props.files)
-            setHideLogDSL(props.hideLogDSL === true);
         } catch (e: any) {
             console.log(e)
             EventBus.sendAlert(' ' + e?.name, '' + e?.message, 'danger');
diff --git a/karavan-space/src/designer/route/DslConnections.tsx b/karavan-space/src/designer/route/DslConnections.tsx
index 99339f7c..a711780b 100644
--- a/karavan-space/src/designer/route/DslConnections.tsx
+++ b/karavan-space/src/designer/route/DslConnections.tsx
@@ -34,8 +34,8 @@ const overlapGap: number = 40;
 export function DslConnections() {
 
     const [integration, files] = useIntegrationStore((s) => [s.integration, s.files], shallow)
-    const [width, height, top, left, hideLogDSL] = useDesignerStore((s) =>
-        [s.width, s.height, s.top, s.left, s.hideLogDSL], shallow)
+    const [width, height, top, left] = useDesignerStore((s) =>
+        [s.width, s.height, s.top, s.left], shallow)
     const [steps, addStep, deleteStep, clearSteps] =
         useConnectionsStore((s) => [s.steps, s.addStep, s.deleteStep, s.clearSteps], shallow)
 
@@ -285,7 +285,7 @@ export function DslConnections() {
     }
 
     function isSpecial(pos: DslPosition): boolean {
-        return ['ChoiceDefinition', 'MulticastDefinition', 'TryDefinition'].includes(pos.step.dslName);
+        return ['ChoiceDefinition', 'MulticastDefinition', 'TryDefinition', 'RouteConfigurationDefinition'].includes(pos.step.dslName);
     }
 
     function addArrowToList(list: JSX.Element[], from?: DslPosition, to?: DslPosition, fromHeader?: boolean, toHeader?: boolean): JSX.Element[]  {
@@ -299,13 +299,17 @@ export function DslConnections() {
         return result;
     }
 
+    function getParentDsl(uuid?: string): string | undefined {
+        return  uuid ? steps.get(uuid)?.parent?.dslName : undefined;
+    }
+
     function getArrow(pos: DslPosition): JSX.Element[] {
         const list: JSX.Element[] = [];
 
          if (pos.parent && pos.parent.dslName === 'TryDefinition' && pos.position === 0) {
             const parent = steps.get(pos.parent.uuid);
             list.push(...addArrowToList(list, parent, pos, true, false))
-        } else if (pos.parent && pos.parent.dslName === 'MulticastDefinition') {
+        } else if (pos.parent && ['RouteConfigurationDefinition', 'MulticastDefinition'].includes(pos.parent.dslName)) {
             const parent = steps.get(pos.parent.uuid);
             list.push(...addArrowToList(list, parent, pos, true, false))
             if (parent?.nextstep) {
@@ -315,14 +319,17 @@ export function DslConnections() {
         } else if (pos.parent && pos.parent.dslName === 'ChoiceDefinition') {
             const parent = steps.get(pos.parent.uuid);
             list.push(...addArrowToList(list, parent, pos, true, false))
-        } else if (pos.parent && ['WhenDefinition', 'OtherwiseDefinition', 'CatchDefinition', 'FinallyDefinition'].includes(pos.parent.dslName)) {
-            if (pos.position === 0) {
+        } else if (pos.parent && ['WhenDefinition', 'OtherwiseDefinition', 'CatchDefinition', 'FinallyDefinition', 'TryDefinition'].includes(pos.parent.dslName)) {
+             if (pos.position === 0) {
                 const parent = steps.get(pos.parent.uuid);
                 list.push(...addArrowToList(list, parent, pos, true, false))
             }
             if (pos.position === (pos.inStepsLength - 1) && !isSpecial(pos)) {
                 const nextElement = getNext(pos);
-                if (nextElement) {
+                const parentDsl1 = getParentDsl(nextElement?.uuid);
+                if (parentDsl1 && ['RouteConfigurationDefinition', 'MulticastDefinition'].includes(parentDsl1)) {
+                    // do nothing
+                } else if (nextElement) {
                     const next = steps.get(nextElement.uuid);
                     list.push(...addArrowToList(list, pos, next, true, true))
                 }
@@ -341,12 +348,18 @@ export function DslConnections() {
         }
 
         if (['WhenDefinition', 'OtherwiseDefinition'].includes(pos.step.dslName) && pos.step.hasSteps() && (pos.step as any).steps.length === 0) {
-            if (pos.nextstep) {
+            const parentDsl = getParentDsl(pos?.nextstep?.uuid);
+            if (parentDsl && ['RouteConfigurationDefinition', 'MulticastDefinition'].includes(parentDsl)) {
+                // do nothing
+            } else if (pos.nextstep) {
                 const to = steps.get(pos.nextstep.uuid);
                 list.push(...addArrowToList(list, pos, to, true, true))
             } else {
                 const next = getNext(pos);
-                if (next) {
+                const parentDsl1 = getParentDsl(next?.uuid);
+                if (parentDsl1 && ['RouteConfigurationDefinition', 'MulticastDefinition'].includes(parentDsl1)) {
+                    // do nothing
+                } else if (next) {
                     const to = steps.get(next.uuid);
                     list.push(...addArrowToList(list, pos, to, true, true))
                 }
diff --git a/karavan-space/src/designer/route/RouteDesigner.tsx b/karavan-space/src/designer/route/RouteDesigner.tsx
index 9ef5e827..39c14fda 100644
--- a/karavan-space/src/designer/route/RouteDesigner.tsx
+++ b/karavan-space/src/designer/route/RouteDesigner.tsx
@@ -44,9 +44,9 @@ export function RouteDesigner() {
         isSourceKamelet, isActionKamelet, isKamelet, isSinkKamelet} = useRouteDesignerHook();
 
     const [integration] = useIntegrationStore((state) => [state.integration], shallow)
-    const [showDeleteConfirmation, setPosition, width, height, top, left, hideLogDSL, showMoveConfirmation, setShowMoveConfirmation] =
+    const [showDeleteConfirmation, setPosition, width, height, top, left, showMoveConfirmation, setShowMoveConfirmation] =
         useDesignerStore((s) =>
-        [s.showDeleteConfirmation, s.setPosition, s.width, s.height, s.top, s.left, s.hideLogDSL, s.showMoveConfirmation, s.setShowMoveConfirmation], shallow)
+        [s.showDeleteConfirmation, s.setPosition, s.width, s.height, s.top, s.left, s.showMoveConfirmation, s.setShowMoveConfirmation], shallow)
 
     const [showSelector] = useSelectorStore((s) => [s.showSelector], shallow)
 
diff --git a/karavan-space/src/designer/route/element/DslElement.tsx b/karavan-space/src/designer/route/element/DslElement.tsx
index 6f5ab5b5..70befc33 100644
--- a/karavan-space/src/designer/route/element/DslElement.tsx
+++ b/karavan-space/src/designer/route/element/DslElement.tsx
@@ -53,9 +53,9 @@ export function DslElement(props: Props) {
 
     const [integration] = useIntegrationStore((s) => [s.integration, s.setIntegration], shallow)
 
-    const [selectedUuids, selectedStep, showMoveConfirmation, setShowMoveConfirmation, hideLogDSL, setMoveElements] =
+    const [selectedUuids, selectedStep, showMoveConfirmation, setShowMoveConfirmation, setMoveElements] =
         useDesignerStore((s) =>
-            [s.selectedUuids, s.selectedStep, s.showMoveConfirmation, s.setShowMoveConfirmation, s.hideLogDSL, s.setMoveElements], shallow)
+            [s.selectedUuids, s.selectedStep, s.showMoveConfirmation, s.setShowMoveConfirmation, s.setMoveElements], shallow)
     const [isDragging, setIsDragging] = useState<boolean>(false);
 
     const [isDraggedOver, setIsDraggedOver] = useState<boolean>(false);
diff --git a/karavan-space/src/designer/route/element/DslElementHeader.tsx b/karavan-space/src/designer/route/element/DslElementHeader.tsx
index 1b5dbe5b..5ec041d2 100644
--- a/karavan-space/src/designer/route/element/DslElementHeader.tsx
+++ b/karavan-space/src/designer/route/element/DslElementHeader.tsx
@@ -53,9 +53,9 @@ export function DslElementHeader(props: Props) {
         isActionKamelet
     } = useRouteDesignerHook();
 
-    const [selectedUuids, selectedStep, showMoveConfirmation, setShowMoveConfirmation, hideLogDSL, setMoveElements] =
+    const [selectedUuids, selectedStep, showMoveConfirmation, setShowMoveConfirmation, setMoveElements] =
         useDesignerStore((s) =>
-            [s.selectedUuids, s.selectedStep, s.showMoveConfirmation, s.setShowMoveConfirmation, s.hideLogDSL, s.setMoveElements], shallow)
+            [s.selectedUuids, s.selectedStep, s.showMoveConfirmation, s.setShowMoveConfirmation, s.setMoveElements], shallow)
 
     function onOpenSelector(evt: React.MouseEvent, showSteps: boolean = true, isInsert: boolean = false) {
         evt.stopPropagation();
diff --git a/karavan-space/src/designer/route/useRouteDesignerHook.tsx b/karavan-space/src/designer/route/useRouteDesignerHook.tsx
index 0f9b7236..6589853a 100644
--- a/karavan-space/src/designer/route/useRouteDesignerHook.tsx
+++ b/karavan-space/src/designer/route/useRouteDesignerHook.tsx
@@ -41,10 +41,10 @@ export function useRouteDesignerHook () {
     const [integration, setIntegration] = useIntegrationStore((state) => [state.integration, state.setIntegration], shallow)
     const [selectedUuids,clipboardSteps,shiftKeyPressed,
         setShowDeleteConfirmation, setDeleteMessage, setSelectedStep, setSelectedUuids, setClipboardSteps, setShiftKeyPressed,
-        width, height, dark, hideLogDSL] = useDesignerStore((s) =>
+        width, height, dark] = useDesignerStore((s) =>
         [s.selectedUuids,s.clipboardSteps, s.shiftKeyPressed,
             s.setShowDeleteConfirmation, s.setDeleteMessage, s.setSelectedStep, s.setSelectedUuids, s.setClipboardSteps, s.setShiftKeyPressed,
-            s.width, s.height, s.dark, s.hideLogDSL], shallow)
+            s.width, s.height, s.dark], shallow)
     const [setParentId, setShowSelector, setSelectorTabIndex, setParentDsl, setShowSteps, setSelectedPosition] = useSelectorStore((s) =>
         [s.setParentId, s.setShowSelector, s.setSelectorTabIndex, s.setParentDsl, s.setShowSteps, s.setSelectedPosition], shallow)