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/05 00:16:41 UTC

(camel-karavan) branch main updated (ad3a375e -> 3ce81244)

This is an automated email from the ASF dual-hosted git repository.

marat pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/camel-karavan.git


    from ad3a375e Navigation improvements
     new 3fce1c34 Fix #1162
     new f46c7e9d Limit for element tootlip
     new 3ce81244 Fix #1161

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../property/property/DslPropertyField.tsx         |   8 +-
 .../designer/route/element/DslElementHeader.tsx    |  20 +-
 .../src/main/webui/src/designer/utils/CamelUi.tsx  |   4 +-
 karavan-designer/public/example/demo.camel.yaml    | 202 +++++++--------------
 .../property/property/DslPropertyField.tsx         |   8 +-
 .../designer/route/element/DslElementHeader.tsx    |  20 +-
 karavan-designer/src/designer/utils/CamelUi.tsx    |   4 +-
 .../property/property/DslPropertyField.tsx         |   8 +-
 .../designer/route/element/DslElementHeader.tsx    |  20 +-
 karavan-space/src/designer/utils/CamelUi.tsx       |   4 +-
 karavan-vscode/src/designerView.ts                 |  40 ++--
 11 files changed, 154 insertions(+), 184 deletions(-)


(camel-karavan) 01/03: Fix #1162

Posted by ma...@apache.org.
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 3fce1c34bbec4adfbae0dd5562bb419604312b3a
Author: Marat Gubaidullin <ma...@talismancloud.io>
AuthorDate: Mon Mar 4 18:56:14 2024 -0500

    Fix #1162
---
 karavan-vscode/src/designerView.ts | 40 +++++++++++++++++++++-----------------
 1 file changed, 22 insertions(+), 18 deletions(-)

diff --git a/karavan-vscode/src/designerView.ts b/karavan-vscode/src/designerView.ts
index 612a093c..af8cf2fb 100644
--- a/karavan-vscode/src/designerView.ts
+++ b/karavan-vscode/src/designerView.ts
@@ -191,8 +191,8 @@ export class DesignerView {
             utils.readBeans(fullPath),
             //Read BlockList
             utils.readBlockTemplates(this.context),
-            // Read integration
-            utils.readCamelYamlFiles(path.dirname(fullPath))
+            // // Read integration
+            // utils.readCamelYamlFiles(path.dirname(fullPath))
         ]).then(results => {
             // Send Kamelets
             panel.webview.postMessage({ command: 'kamelets', kamelets: results[0] });
@@ -206,7 +206,7 @@ export class DesignerView {
             if (results[4]) panel.webview.postMessage({ command: 'supportedComponents', components: results[4] });
             if (results[5] === true) panel.webview.postMessage({ command: 'supportedOnly' });
             // Send integration
-            panel.webview.postMessage({ command: 'files', files: results[8] });
+            // panel.webview.postMessage({ command: 'files', files: results[8] });
             this.sendIntegrationData(panel, filename, relativePath, fullPath, reread, yaml, tab, results[6], results[7]);
             // Send block list
             panel.webview.postMessage({ command: 'blockList', blockList: Object.fromEntries(results[8]) });
@@ -216,26 +216,30 @@ export class DesignerView {
 
     sendIntegrationData(panel: WebviewPanel, filename: string, relativePath: string,
         fullPath: string, reread: boolean, yaml?: string, tab?: string, propertyPlaceholders?: string[], beans?: RegistryBeanDefinition[]) {
-        // Read file if required
-        if (reread) {
-            utils.readFile(path.resolve(fullPath)).then(readData => {
-                const yaml = Buffer.from(readData).toString('utf8');
+        // Read and send Integrations
+        utils.readCamelYamlFiles(path.dirname(fullPath)).then((files) => {
+            panel.webview.postMessage({ command: 'files', files: files });
+        }).finally(() => {
+            // Read file if required
+            if (reread) {
+                utils.readFile(path.resolve(fullPath)).then(readData => {
+                    const yaml = Buffer.from(readData).toString('utf8');
+                    // Send integration
+                    panel.webview.postMessage(
+                        {
+                            command: 'open', page: "designer", filename: filename, relativePath: relativePath,
+                            fullPath: fullPath, yaml: yaml, tab: tab, propertyPlaceholders: propertyPlaceholders, beans: beans
+                        });
+                });
+            } else {
                 // Send integration
                 panel.webview.postMessage(
                     {
                         command: 'open', page: "designer", filename: filename, relativePath: relativePath,
                         fullPath: fullPath, yaml: yaml, tab: tab, propertyPlaceholders: propertyPlaceholders, beans: beans
                     });
-            });
-        } else {
-            // Send integration
-            panel.webview.postMessage(
-                {
-                    command: 'open', page: "designer", filename: filename, relativePath: relativePath,
-                    fullPath: fullPath, yaml: yaml, tab: tab, propertyPlaceholders: propertyPlaceholders, beans: beans
-                });
-        }
-
+            }
+        })
     }
 
     downloadImage(fullPath: string) {
@@ -256,7 +260,7 @@ export class DesignerView {
                     commands.executeCommand("karavan.open", { fsPath: filename })
                 }
             }).catch(err => window.showErrorMessage("Error: " + err?.reason));
-        } else if(routeId) {
+        } else if (routeId) {
             utils.getFileWithInternalProducer(fullPath, routeId).then((filename) => {
                 if (filename !== undefined) {
                     commands.executeCommand("karavan.open", { fsPath: filename })


(camel-karavan) 02/03: Limit for element tootlip

Posted by ma...@apache.org.
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 f46c7e9dddc04b0645b1b7333619ddbdae8a22db
Author: Marat Gubaidullin <ma...@talismancloud.io>
AuthorDate: Mon Mar 4 19:04:44 2024 -0500

    Limit for element tootlip
---
 .../designer/route/element/DslElementHeader.tsx    |  20 +-
 .../src/main/webui/src/designer/utils/CamelUi.tsx  |   4 +-
 karavan-designer/public/example/demo.camel.yaml    | 202 +++++++--------------
 .../designer/route/element/DslElementHeader.tsx    |  20 +-
 karavan-designer/src/designer/utils/CamelUi.tsx    |   4 +-
 .../designer/route/element/DslElementHeader.tsx    |  20 +-
 karavan-space/src/designer/utils/CamelUi.tsx       |   4 +-
 7 files changed, 114 insertions(+), 160 deletions(-)

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 438369ea..1b5dbe5b 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
@@ -28,6 +28,7 @@ import {shallow} from "zustand/shallow";
 import {useRouteDesignerHook} from "../useRouteDesignerHook";
 import {AddElementIcon, DeleteElementIcon, InsertElementIcon} from "../../utils/ElementIcons";
 import { RouteConfigurationDefinition} from "karavan-core/lib/model/CamelDefinition";
+import {ReactComponent} from "*.svg";
 
 interface Props {
     headerRef: React.RefObject<HTMLDivElement>
@@ -214,19 +215,28 @@ export function DslElementHeader(props: Props) {
         )
     }
 
-    function getHeaderWithTooltip(tooltip: string | undefined) {
+    function getHeaderWithTooltip(tooltip: string | React.JSX.Element | undefined) {
         return (
             <>
                 {getHeader()}
-                <Tooltip triggerRef={props.headerRef} position={"left"} content={<div>{tooltip}</div>}/>
+                <Tooltip triggerRef={props.headerRef} position={"left"} content={<div style={{textAlign: 'left'}}>{tooltip}</div>}/>
             </>
 
         )
     }
 
-    function getHeaderTooltip(): string | undefined {
-        if (CamelUi.isShowExpressionTooltip(props.step)) return CamelUi.getExpressionTooltip(props.step);
-        if (CamelUi.isShowUriTooltip(props.step)) return CamelUi.getUriTooltip(props.step);
+    function getHeaderTooltip(): string | React.JSX.Element | undefined {
+        if (CamelUi.isShowExpressionTooltip(props.step)) {
+            const et =  CamelUi.getExpressionTooltip(props.step);
+            const exp = et[1];
+            return (
+                <div>
+                    <div>{et[0]}:</div>
+                    <div>{exp.length > 50 ? (exp.substring(0, 50) + ' ...') : exp}</div>
+                </div>
+            )
+        }
+        if (CamelUi.isShowUriTooltip(props.step)) return  CamelUi.getUriTooltip(props.step);
         return undefined;
     }
 
diff --git a/karavan-app/src/main/webui/src/designer/utils/CamelUi.tsx b/karavan-app/src/main/webui/src/designer/utils/CamelUi.tsx
index 8caf309f..09674c70 100644
--- a/karavan-app/src/main/webui/src/designer/utils/CamelUi.tsx
+++ b/karavan-app/src/main/webui/src/designer/utils/CamelUi.tsx
@@ -402,11 +402,11 @@ export class CamelUi {
         return false;
     }
 
-    static getExpressionTooltip = (element: CamelElement): string => {
+    static getExpressionTooltip = (element: CamelElement): [string, string] => {
         const e = (element as any).expression;
         const language = CamelDefinitionApiExt.getExpressionLanguageName(e) || '';
         const value = CamelDefinitionApiExt.getExpressionValue(e) || '';
-        return language.concat(": ", (value as any)?.expression);
+        return [language, (value as any)?.expression];
     }
 
     static getUriTooltip = (element: CamelElement): string => {
diff --git a/karavan-designer/public/example/demo.camel.yaml b/karavan-designer/public/example/demo.camel.yaml
index b4e1dec5..747447bc 100644
--- a/karavan-designer/public/example/demo.camel.yaml
+++ b/karavan-designer/public/example/demo.camel.yaml
@@ -1,139 +1,63 @@
-- rest:
-    id: rest-aca4
-    get:
-      - id: get-910c
-    post:
-      - id: post-3ab3
-
-#      steps:
-#        - marshal:
-#            id: marshal-b68c
-#        - filter:
-#            expression:
-#              simple:
-#                id: simple-1465
-#            id: filter-b351
-#        - choice:
-#            when:
-#              - expression:
-#                  simple:
-#                    id: simple-99bf
-#                id: when-ab5e
-#                steps:
-#                  - to:
-#                      uri: arangodb
-#                      id: to-f70a
-#                  - removeProperties:
-#                      id: removeProperties-344a
-#              - expression:
-#                  simple:
-#                    id: simple-d199
-#                id: when-37cd
-#                steps:
-#                  - to:
-#                      uri: amqp
-#                      id: to-fbfe
-#                  - choice:
-#                      when:
-#                        - expression:
-#                            simple:
-#                              id: simple-e78b
-#                          id: when-b7d0
-#                      otherwise:
-#                        id: otherwise-40d0
-#                      id: choice-8f6b
-#            otherwise:
-#              id: otherwise-382c
-#              steps:
-#                - log:
-#                    message: ${body}
-#                    id: log-6831
-#            id: choice-c1db
-#        - saga:
-#            id: saga-8f2c
-#            steps:
-#              - to:
-#                  uri: kamelet:azure-cosmosdb-sink
-#                  id: to-1394
-#- route:
-#    nodePrefixId: route-171
-#    id: route-99f9
-#    from:
-#      uri: kamelet:azure-storage-blob-source
-#      id: from-f8e9
-#      steps:
-#        - multicast:
-#            id: multicast-6a53
-#            steps:
-#              - log:
-#                  message: ${body}
-#                  id: log-799d
-#              - log:
-#                  message: ${body}
-#                  id: log-fc8e
-#              - log:
-#                  message: ${body}
-#                  id: log-1e42
-#        - filter:
-#            expression:
-#              simple:
-#                id: simple-7ff9
-#            id: filter-8c99
-#            steps:
-#              - process:
-#                  id: process-e1c1
-#                  description: Call cutom java bean
-#              - delay:
-#                  expression:
-#                    simple:
-#                      id: simple-64a6
-#                  id: delay-b1ec
-#        - doTry:
-#            id: doTry-46cd
-#            doCatch:
-#              - id: doCatch-c6e7
-#                steps:
-#                  - log:
-#                      message: ${body}
-#                      id: log-77df
-#                  - choice:
-#                      when:
-#                        - expression:
-#                            simple:
-#                              id: simple-c7db
-#                          id: when-f058
-#                      otherwise:
-#                        id: otherwise-1e11
-#                      id: choice-8374
-#                  - wireTap:
-#                      id: wireTap-a25e
-#            doFinally:
-#              id: doFinally-0a65
-#              steps:
-#                - log:
-#                    message: ${body}
-#                    id: log-f4fa
-#                - log:
-#                    message: ${body}
-#                    id: log-cd30
-#            steps:
-#              - pollEnrich:
-#                  expression:
-#                    simple:
-#                      id: simple-6181
-#                  id: pollEnrich-a41b
-#              - filter:
-#                  expression:
-#                    simple:
-#                      id: simple-a69b
-#                  id: filter-07cf
-#                  steps:
-#                    - setBody:
-#                        expression:
-#                          simple:
-#                            id: simple-f0dc
-#                        id: setBody-3c0c
-#              - process:
-#                  id: process-6d06
-#        - circuitBreaker:
-#            id: circuitBreaker-4af8
+- route:
+    id: route-fc08
+    from:
+      id: from-4fb2
+      uri: timer
+      parameters:
+        period: '5000'
+        timerName: beers
+      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:
+              jq:
+                id: jq-c893
+                expression: .alcohol | rtrimstr("%")
+                source: beer1
+                resultType: float
+        - 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}%)
\ No newline at end of file
diff --git a/karavan-designer/src/designer/route/element/DslElementHeader.tsx b/karavan-designer/src/designer/route/element/DslElementHeader.tsx
index 438369ea..1b5dbe5b 100644
--- a/karavan-designer/src/designer/route/element/DslElementHeader.tsx
+++ b/karavan-designer/src/designer/route/element/DslElementHeader.tsx
@@ -28,6 +28,7 @@ import {shallow} from "zustand/shallow";
 import {useRouteDesignerHook} from "../useRouteDesignerHook";
 import {AddElementIcon, DeleteElementIcon, InsertElementIcon} from "../../utils/ElementIcons";
 import { RouteConfigurationDefinition} from "karavan-core/lib/model/CamelDefinition";
+import {ReactComponent} from "*.svg";
 
 interface Props {
     headerRef: React.RefObject<HTMLDivElement>
@@ -214,19 +215,28 @@ export function DslElementHeader(props: Props) {
         )
     }
 
-    function getHeaderWithTooltip(tooltip: string | undefined) {
+    function getHeaderWithTooltip(tooltip: string | React.JSX.Element | undefined) {
         return (
             <>
                 {getHeader()}
-                <Tooltip triggerRef={props.headerRef} position={"left"} content={<div>{tooltip}</div>}/>
+                <Tooltip triggerRef={props.headerRef} position={"left"} content={<div style={{textAlign: 'left'}}>{tooltip}</div>}/>
             </>
 
         )
     }
 
-    function getHeaderTooltip(): string | undefined {
-        if (CamelUi.isShowExpressionTooltip(props.step)) return CamelUi.getExpressionTooltip(props.step);
-        if (CamelUi.isShowUriTooltip(props.step)) return CamelUi.getUriTooltip(props.step);
+    function getHeaderTooltip(): string | React.JSX.Element | undefined {
+        if (CamelUi.isShowExpressionTooltip(props.step)) {
+            const et =  CamelUi.getExpressionTooltip(props.step);
+            const exp = et[1];
+            return (
+                <div>
+                    <div>{et[0]}:</div>
+                    <div>{exp.length > 50 ? (exp.substring(0, 50) + ' ...') : exp}</div>
+                </div>
+            )
+        }
+        if (CamelUi.isShowUriTooltip(props.step)) return  CamelUi.getUriTooltip(props.step);
         return undefined;
     }
 
diff --git a/karavan-designer/src/designer/utils/CamelUi.tsx b/karavan-designer/src/designer/utils/CamelUi.tsx
index 8caf309f..09674c70 100644
--- a/karavan-designer/src/designer/utils/CamelUi.tsx
+++ b/karavan-designer/src/designer/utils/CamelUi.tsx
@@ -402,11 +402,11 @@ export class CamelUi {
         return false;
     }
 
-    static getExpressionTooltip = (element: CamelElement): string => {
+    static getExpressionTooltip = (element: CamelElement): [string, string] => {
         const e = (element as any).expression;
         const language = CamelDefinitionApiExt.getExpressionLanguageName(e) || '';
         const value = CamelDefinitionApiExt.getExpressionValue(e) || '';
-        return language.concat(": ", (value as any)?.expression);
+        return [language, (value as any)?.expression];
     }
 
     static getUriTooltip = (element: CamelElement): string => {
diff --git a/karavan-space/src/designer/route/element/DslElementHeader.tsx b/karavan-space/src/designer/route/element/DslElementHeader.tsx
index 438369ea..1b5dbe5b 100644
--- a/karavan-space/src/designer/route/element/DslElementHeader.tsx
+++ b/karavan-space/src/designer/route/element/DslElementHeader.tsx
@@ -28,6 +28,7 @@ import {shallow} from "zustand/shallow";
 import {useRouteDesignerHook} from "../useRouteDesignerHook";
 import {AddElementIcon, DeleteElementIcon, InsertElementIcon} from "../../utils/ElementIcons";
 import { RouteConfigurationDefinition} from "karavan-core/lib/model/CamelDefinition";
+import {ReactComponent} from "*.svg";
 
 interface Props {
     headerRef: React.RefObject<HTMLDivElement>
@@ -214,19 +215,28 @@ export function DslElementHeader(props: Props) {
         )
     }
 
-    function getHeaderWithTooltip(tooltip: string | undefined) {
+    function getHeaderWithTooltip(tooltip: string | React.JSX.Element | undefined) {
         return (
             <>
                 {getHeader()}
-                <Tooltip triggerRef={props.headerRef} position={"left"} content={<div>{tooltip}</div>}/>
+                <Tooltip triggerRef={props.headerRef} position={"left"} content={<div style={{textAlign: 'left'}}>{tooltip}</div>}/>
             </>
 
         )
     }
 
-    function getHeaderTooltip(): string | undefined {
-        if (CamelUi.isShowExpressionTooltip(props.step)) return CamelUi.getExpressionTooltip(props.step);
-        if (CamelUi.isShowUriTooltip(props.step)) return CamelUi.getUriTooltip(props.step);
+    function getHeaderTooltip(): string | React.JSX.Element | undefined {
+        if (CamelUi.isShowExpressionTooltip(props.step)) {
+            const et =  CamelUi.getExpressionTooltip(props.step);
+            const exp = et[1];
+            return (
+                <div>
+                    <div>{et[0]}:</div>
+                    <div>{exp.length > 50 ? (exp.substring(0, 50) + ' ...') : exp}</div>
+                </div>
+            )
+        }
+        if (CamelUi.isShowUriTooltip(props.step)) return  CamelUi.getUriTooltip(props.step);
         return undefined;
     }
 
diff --git a/karavan-space/src/designer/utils/CamelUi.tsx b/karavan-space/src/designer/utils/CamelUi.tsx
index 8caf309f..09674c70 100644
--- a/karavan-space/src/designer/utils/CamelUi.tsx
+++ b/karavan-space/src/designer/utils/CamelUi.tsx
@@ -402,11 +402,11 @@ export class CamelUi {
         return false;
     }
 
-    static getExpressionTooltip = (element: CamelElement): string => {
+    static getExpressionTooltip = (element: CamelElement): [string, string] => {
         const e = (element as any).expression;
         const language = CamelDefinitionApiExt.getExpressionLanguageName(e) || '';
         const value = CamelDefinitionApiExt.getExpressionValue(e) || '';
-        return language.concat(": ", (value as any)?.expression);
+        return [language, (value as any)?.expression];
     }
 
     static getUriTooltip = (element: CamelElement): string => {


(camel-karavan) 03/03: Fix #1161

Posted by ma...@apache.org.
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 3ce812447ad1403d9b7d5ce4756ba9a0ede9910d
Author: Marat Gubaidullin <ma...@talismancloud.io>
AuthorDate: Mon Mar 4 19:16:13 2024 -0500

    Fix #1161
---
 .../webui/src/designer/property/property/DslPropertyField.tsx     | 8 ++++++--
 .../src/designer/property/property/DslPropertyField.tsx           | 8 ++++++--
 karavan-space/src/designer/property/property/DslPropertyField.tsx | 8 ++++++--
 3 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/karavan-app/src/main/webui/src/designer/property/property/DslPropertyField.tsx b/karavan-app/src/main/webui/src/designer/property/property/DslPropertyField.tsx
index a17dc88d..7fc8733d 100644
--- a/karavan-app/src/main/webui/src/designer/property/property/DslPropertyField.tsx
+++ b/karavan-app/src/main/webui/src/designer/property/property/DslPropertyField.tsx
@@ -116,7 +116,7 @@ export function DslPropertyField(props: Props) {
         if (checkChanges) {
             const interval = setInterval(() => {
                 if (props.value !== textValue) {
-                    if (isVariable) {
+                    if (isVariable && textValue !== undefined) {
                         propertyChanged(property.name, variableType.concat(textValue));
                     } else {
                         propertyChanged(property.name, textValue);
@@ -312,7 +312,11 @@ export function DslPropertyField(props: Props) {
                            value={textValue?.toString()}
                            customIcon={property.type !== 'string' ?
                                <Text component={TextVariants.p}>{property.type}</Text> : undefined}
-                           onBlur={_ => propertyChanged(property.name, variableType.concat(textValue))}
+                           onBlur={_ => {
+                               if (textValue !== undefined) {
+                                   propertyChanged(property.name, variableType.concat(textValue))
+                               }
+                           }}
                            onFocus={_ => setCheckChanges(true)}
                            onChange={(_, v) => {
                                setTextValue(v);
diff --git a/karavan-designer/src/designer/property/property/DslPropertyField.tsx b/karavan-designer/src/designer/property/property/DslPropertyField.tsx
index a17dc88d..7fc8733d 100644
--- a/karavan-designer/src/designer/property/property/DslPropertyField.tsx
+++ b/karavan-designer/src/designer/property/property/DslPropertyField.tsx
@@ -116,7 +116,7 @@ export function DslPropertyField(props: Props) {
         if (checkChanges) {
             const interval = setInterval(() => {
                 if (props.value !== textValue) {
-                    if (isVariable) {
+                    if (isVariable && textValue !== undefined) {
                         propertyChanged(property.name, variableType.concat(textValue));
                     } else {
                         propertyChanged(property.name, textValue);
@@ -312,7 +312,11 @@ export function DslPropertyField(props: Props) {
                            value={textValue?.toString()}
                            customIcon={property.type !== 'string' ?
                                <Text component={TextVariants.p}>{property.type}</Text> : undefined}
-                           onBlur={_ => propertyChanged(property.name, variableType.concat(textValue))}
+                           onBlur={_ => {
+                               if (textValue !== undefined) {
+                                   propertyChanged(property.name, variableType.concat(textValue))
+                               }
+                           }}
                            onFocus={_ => setCheckChanges(true)}
                            onChange={(_, v) => {
                                setTextValue(v);
diff --git a/karavan-space/src/designer/property/property/DslPropertyField.tsx b/karavan-space/src/designer/property/property/DslPropertyField.tsx
index a17dc88d..7fc8733d 100644
--- a/karavan-space/src/designer/property/property/DslPropertyField.tsx
+++ b/karavan-space/src/designer/property/property/DslPropertyField.tsx
@@ -116,7 +116,7 @@ export function DslPropertyField(props: Props) {
         if (checkChanges) {
             const interval = setInterval(() => {
                 if (props.value !== textValue) {
-                    if (isVariable) {
+                    if (isVariable && textValue !== undefined) {
                         propertyChanged(property.name, variableType.concat(textValue));
                     } else {
                         propertyChanged(property.name, textValue);
@@ -312,7 +312,11 @@ export function DslPropertyField(props: Props) {
                            value={textValue?.toString()}
                            customIcon={property.type !== 'string' ?
                                <Text component={TextVariants.p}>{property.type}</Text> : undefined}
-                           onBlur={_ => propertyChanged(property.name, variableType.concat(textValue))}
+                           onBlur={_ => {
+                               if (textValue !== undefined) {
+                                   propertyChanged(property.name, variableType.concat(textValue))
+                               }
+                           }}
                            onFocus={_ => setCheckChanges(true)}
                            onChange={(_, v) => {
                                setTextValue(v);