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 2022/10/28 21:53:54 UTC

[camel-karavan] branch main updated: Fix #505

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 c2cfc13  Fix #505
c2cfc13 is described below

commit c2cfc133e2aa7b5862af348b11af0aa79593dfbe
Author: Marat Gubaidullin <ma...@gmail.com>
AuthorDate: Fri Oct 28 17:53:42 2022 -0400

    Fix #505
---
 karavan-core/src/core/api/CamelUtil.ts             | 22 ++++++++++++++++++++--
 karavan-designer/src/designer/karavan.css          |  4 ++++
 karavan-designer/src/designer/route/DslElement.tsx |  4 ++--
 .../designer/route/property/DslPropertyField.tsx   |  9 +++++++--
 .../route/property/KameletPropertyField.tsx        |  2 ++
 5 files changed, 35 insertions(+), 6 deletions(-)

diff --git a/karavan-core/src/core/api/CamelUtil.ts b/karavan-core/src/core/api/CamelUtil.ts
index 6b40652..d7a436f 100644
--- a/karavan-core/src/core/api/CamelUtil.ts
+++ b/karavan-core/src/core/api/CamelUtil.ts
@@ -148,6 +148,13 @@ export class CamelUtil {
             : [];
     }
 
+    static getKameletRequiredParameters = (element: any): string[] => {
+        const kamelet = CamelUtil.getKamelet(element)
+        return kamelet
+            ? kamelet.spec.definition.required
+            : [];
+    }
+
     static getComponentProperties = (element: any): ComponentProperty[] => {
         const dslName: string = (element as any).dslName;
         if (dslName === 'ToDynamicDefinition'){
@@ -174,7 +181,7 @@ export class CamelUtil {
             const value = (element as any)[p.name];
             if (p.type === 'string' && (value === undefined || value.trim().length === 0)){
                 result[0] = false;
-                result[1].push("Property " + p.displayName + " is required");
+                result[1].push(p.displayName + " is required");
             } else if (p.type === 'ExpressionDefinition'){
                 const expressionMeta =  CamelMetadataApi.getCamelModelMetadataByClassName('ExpressionDefinition');
                 let expressionCheck = false;
@@ -196,9 +203,20 @@ export class CamelUtil {
                     const value = CamelDefinitionApiExt.getParametersValue(element, p.name, p.kind === 'path');
                    if (value === undefined || value.trim().length === 0){
                        result[0] = false;
-                       result[1].push("Property " + p.displayName + " is required");
+                       result[1].push(p.displayName + " is required");
                    }
                 })
+            } else {
+                const kamelet = this.getKamelet(element);
+                let allSet = true;
+                const filledParameters = Object.keys((element as any).parameters);
+                kamelet?.spec.definition.required.forEach(name => {
+                    if (!filledParameters.includes(name)) {
+                        allSet = false;
+                        result[1].push(name + " is required");
+                    }
+                })
+                result[0] = allSet;
             }
         }
         return result;
diff --git a/karavan-designer/src/designer/karavan.css b/karavan-designer/src/designer/karavan.css
index e57165a..6d8c687 100644
--- a/karavan-designer/src/designer/karavan.css
+++ b/karavan-designer/src/designer/karavan.css
@@ -1268,3 +1268,7 @@
     width: fit-content;
     margin-top: 6px;
 }
+
+.root .tooltip-required-field .pf-c-tooltip__content {
+    text-align: start;
+}
\ No newline at end of file
diff --git a/karavan-designer/src/designer/route/DslElement.tsx b/karavan-designer/src/designer/route/DslElement.tsx
index ac67521..61a02f1 100644
--- a/karavan-designer/src/designer/route/DslElement.tsx
+++ b/karavan-designer/src/designer/route/DslElement.tsx
@@ -256,8 +256,8 @@ export class DslElement extends React.Component<Props, State> {
         if (!checkRequired[0]) className = className + " header-text-required";
         if (checkRequired[0]) return <Text className={className}>{title}</Text>
         else return (
-            <Tooltip position={"right"}
-                     content={checkRequired[1]}>
+            <Tooltip position={"right"} className="tooltip-required-field"
+                     content={checkRequired[1].map((text, i) =>(<div key={i}>{text}</div>))}>
                 <Text className={className}>{title}</Text>
             </Tooltip>
         )
diff --git a/karavan-designer/src/designer/route/property/DslPropertyField.tsx b/karavan-designer/src/designer/route/property/DslPropertyField.tsx
index 76d97e5..1612dd0 100644
--- a/karavan-designer/src/designer/route/property/DslPropertyField.tsx
+++ b/karavan-designer/src/designer/route/property/DslPropertyField.tsx
@@ -66,6 +66,8 @@ import {KubernetesSelector} from "./KubernetesSelector";
 import {KubernetesAPI} from "../../utils/KubernetesAPI";
 import Editor from "@monaco-editor/react";
 import EditorIcon from "@patternfly/react-icons/dist/js/icons/code-icon";
+import {Property} from "../../../../../karavan-core/src/core/model/KameletModels";
+import {KameletApi} from "../../../../../karavan-core/src/core/api/KameletApi";
 
 interface Props {
     property: PropertyMeta,
@@ -540,13 +542,16 @@ export class DslPropertyField extends React.Component<Props, State> {
     }
 
     getKameletParameters = () => {
+        const element = this.props.element;
+        const requiredParameters = CamelUtil.getKameletRequiredParameters(element);
         return (
             <div className="parameters">
-                {CamelUtil.getKameletProperties(this.props.element).map(property =>
+                {CamelUtil.getKameletProperties(element).map(property =>
                     <KameletPropertyField
                         key={property.id}
                         property={property}
-                        value={CamelDefinitionApiExt.getParametersValue(this.props.element, property.id)}
+                        value={CamelDefinitionApiExt.getParametersValue(element, property.id)}
+                        required={requiredParameters.includes(property.id)}
                         onParameterChange={this.props.onParameterChange}
                     />)}
             </div>
diff --git a/karavan-designer/src/designer/route/property/KameletPropertyField.tsx b/karavan-designer/src/designer/route/property/KameletPropertyField.tsx
index e12d25e..cda5ac3 100644
--- a/karavan-designer/src/designer/route/property/KameletPropertyField.tsx
+++ b/karavan-designer/src/designer/route/property/KameletPropertyField.tsx
@@ -36,6 +36,7 @@ import HideIcon from "@patternfly/react-icons/dist/js/icons/eye-slash-icon";
 interface Props {
     property: Property,
     value: any,
+    required: boolean,
     onParameterChange?: (parameter: string, value: string | number | boolean | any, pathParameter?: boolean) => void
 }
 
@@ -159,6 +160,7 @@ export class KameletPropertyField extends React.Component<Props, State> {
                     key={id}
                     label={property.title}
                     fieldId={id}
+                    isRequired={this.props.required}
                     labelIcon={
                         <Popover
                             position={"left"}