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 <marat.gubaidul...@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"}