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 fc55e62f #1401
fc55e62f is described below

commit fc55e62f1b7d5bf5d39e0e6fffacfae56eaedd6b
Author: Marat Gubaidullin <[email protected]>
AuthorDate: Mon Sep 16 14:54:18 2024 -0400

    #1401
---
 .../designer/property/property/ExpressionField.tsx | 33 ++++++++++++++++++++--
 .../designer/route/element/DslElementHeader.tsx    |  2 +-
 .../designer/property/property/ExpressionField.tsx | 33 ++++++++++++++++++++--
 .../designer/route/element/DslElementHeader.tsx    |  2 +-
 .../designer/property/property/ExpressionField.tsx | 33 ++++++++++++++++++++--
 .../designer/route/element/DslElementHeader.tsx    |  2 +-
 6 files changed, 93 insertions(+), 12 deletions(-)

diff --git 
a/karavan-app/src/main/webui/src/designer/property/property/ExpressionField.tsx 
b/karavan-app/src/main/webui/src/designer/property/property/ExpressionField.tsx
index cf2d9850..25793d4b 100644
--- 
a/karavan-app/src/main/webui/src/designer/property/property/ExpressionField.tsx
+++ 
b/karavan-app/src/main/webui/src/designer/property/property/ExpressionField.tsx
@@ -36,6 +36,9 @@ import {CamelElement} from 
"karavan-core/lib/model/IntegrationDefinition";
 import {CamelDefinitionApi} from "karavan-core/lib/api/CamelDefinitionApi";
 import {DslPropertyField} from "./DslPropertyField";
 import {CamelUi} from "../../utils/CamelUi";
+import {usePropertiesStore} from "../PropertyStore";
+import {shallow} from "zustand/shallow";
+import {PropertyUtil} from "./PropertyUtil";
 
 interface Props {
     property: PropertyMeta,
@@ -45,6 +48,8 @@ interface Props {
 
 export function ExpressionField(props: Props) {
 
+
+    const [propertyFilter, changedOnly, requiredOnly] = usePropertiesStore((s) 
=> [s.propertyFilter, s.changedOnly, s.requiredOnly], shallow)
     const [selectIsOpen, setSelectIsOpen] = useState<boolean>(false);
     const [propsAreOpen, setPropsAreOpen] = useState<boolean>(false);
 
@@ -91,10 +96,32 @@ export function ExpressionField(props: Props) {
 
     function getProps (): PropertyMeta[] {
         const dslName = getValueClassName();
-        return CamelDefinitionApiExt.getElementProperties(dslName)
+        const filter = propertyFilter.toLocaleLowerCase();
+        let propertyMetas =  
CamelDefinitionApiExt.getElementProperties(dslName)
             .filter(p => p.name !== 'id')
             .filter(p => p.name !== 'expression')
-            .filter(p => !p.isObject || (p.isObject && 
!CamelUi.dslHasSteps(p.type)) || (dslName === 'CatchDefinition' && p.name === 
'onWhen'));
+            .filter(p => !p.isObject || (p.isObject && 
!CamelUi.dslHasSteps(p.type)) || (dslName === 'CatchDefinition' && p.name === 
'onWhen'))
+            .filter(p => p.name === 'parameters' || 
p.name.toLocaleLowerCase().includes(filter) || 
p.label.toLocaleLowerCase().includes(filter) || 
p.displayName.toLocaleLowerCase().includes(filter));
+        if (requiredOnly) {
+            propertyMetas = propertyMetas.filter(p => p.name === 'parameters' 
|| p.required);
+        }
+        if (changedOnly) {
+            propertyMetas = propertyMetas.filter(p => p.name === 'parameters' 
|| PropertyUtil.hasDslPropertyValueChanged(p, getPropertyValue(p)));
+        }
+        return propertyMetas
+    }
+
+    function getPropertyValue(property: PropertyMeta) {
+        const value = getExpressionValue();
+        return value ? (value as any)[property.name] : undefined;
+    }
+
+    function getPropertySelectorChanged(): boolean {
+        return requiredOnly || changedOnly || propertyFilter?.trim().length > 
0;
+    }
+
+    function getShowExpanded(): boolean {
+        return propsAreOpen || getPropertySelectorChanged();
     }
 
     function getExpressionProps (): PropertyMeta | undefined {
@@ -165,7 +192,7 @@ export function ExpressionField(props: Props) {
                 <ExpandableSection
                     toggleText={'Expression properties'}
                     onToggle={(_event, isExpanded) => 
setPropsAreOpen(isExpanded)}
-                    isExpanded={propsAreOpen}>
+                    isExpanded={getShowExpanded()}>
                     {value && getProps().map((property: PropertyMeta) =>
                         <DslPropertyField key={property.name + 
props.value?.uuid}
                                           property={property}
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 2e9002c0..58c3132f 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
@@ -252,7 +252,7 @@ export function DslElementHeader(props: Props) {
         return (
             <>
                 {getHeader()}
-                <Tooltip triggerRef={props.headerRef} position={"left"} 
content={<div style={{textAlign: 'left'}}>{tooltip}</div>}/>
+                <Tooltip triggerRef={props.headerRef} entryDelay={700} 
position={"left"} content={<div style={{textAlign: 'left'}}>{tooltip}</div>}/>
             </>
 
         )
diff --git 
a/karavan-designer/src/designer/property/property/ExpressionField.tsx 
b/karavan-designer/src/designer/property/property/ExpressionField.tsx
index cf2d9850..25793d4b 100644
--- a/karavan-designer/src/designer/property/property/ExpressionField.tsx
+++ b/karavan-designer/src/designer/property/property/ExpressionField.tsx
@@ -36,6 +36,9 @@ import {CamelElement} from 
"karavan-core/lib/model/IntegrationDefinition";
 import {CamelDefinitionApi} from "karavan-core/lib/api/CamelDefinitionApi";
 import {DslPropertyField} from "./DslPropertyField";
 import {CamelUi} from "../../utils/CamelUi";
+import {usePropertiesStore} from "../PropertyStore";
+import {shallow} from "zustand/shallow";
+import {PropertyUtil} from "./PropertyUtil";
 
 interface Props {
     property: PropertyMeta,
@@ -45,6 +48,8 @@ interface Props {
 
 export function ExpressionField(props: Props) {
 
+
+    const [propertyFilter, changedOnly, requiredOnly] = usePropertiesStore((s) 
=> [s.propertyFilter, s.changedOnly, s.requiredOnly], shallow)
     const [selectIsOpen, setSelectIsOpen] = useState<boolean>(false);
     const [propsAreOpen, setPropsAreOpen] = useState<boolean>(false);
 
@@ -91,10 +96,32 @@ export function ExpressionField(props: Props) {
 
     function getProps (): PropertyMeta[] {
         const dslName = getValueClassName();
-        return CamelDefinitionApiExt.getElementProperties(dslName)
+        const filter = propertyFilter.toLocaleLowerCase();
+        let propertyMetas =  
CamelDefinitionApiExt.getElementProperties(dslName)
             .filter(p => p.name !== 'id')
             .filter(p => p.name !== 'expression')
-            .filter(p => !p.isObject || (p.isObject && 
!CamelUi.dslHasSteps(p.type)) || (dslName === 'CatchDefinition' && p.name === 
'onWhen'));
+            .filter(p => !p.isObject || (p.isObject && 
!CamelUi.dslHasSteps(p.type)) || (dslName === 'CatchDefinition' && p.name === 
'onWhen'))
+            .filter(p => p.name === 'parameters' || 
p.name.toLocaleLowerCase().includes(filter) || 
p.label.toLocaleLowerCase().includes(filter) || 
p.displayName.toLocaleLowerCase().includes(filter));
+        if (requiredOnly) {
+            propertyMetas = propertyMetas.filter(p => p.name === 'parameters' 
|| p.required);
+        }
+        if (changedOnly) {
+            propertyMetas = propertyMetas.filter(p => p.name === 'parameters' 
|| PropertyUtil.hasDslPropertyValueChanged(p, getPropertyValue(p)));
+        }
+        return propertyMetas
+    }
+
+    function getPropertyValue(property: PropertyMeta) {
+        const value = getExpressionValue();
+        return value ? (value as any)[property.name] : undefined;
+    }
+
+    function getPropertySelectorChanged(): boolean {
+        return requiredOnly || changedOnly || propertyFilter?.trim().length > 
0;
+    }
+
+    function getShowExpanded(): boolean {
+        return propsAreOpen || getPropertySelectorChanged();
     }
 
     function getExpressionProps (): PropertyMeta | undefined {
@@ -165,7 +192,7 @@ export function ExpressionField(props: Props) {
                 <ExpandableSection
                     toggleText={'Expression properties'}
                     onToggle={(_event, isExpanded) => 
setPropsAreOpen(isExpanded)}
-                    isExpanded={propsAreOpen}>
+                    isExpanded={getShowExpanded()}>
                     {value && getProps().map((property: PropertyMeta) =>
                         <DslPropertyField key={property.name + 
props.value?.uuid}
                                           property={property}
diff --git a/karavan-designer/src/designer/route/element/DslElementHeader.tsx 
b/karavan-designer/src/designer/route/element/DslElementHeader.tsx
index 2e9002c0..58c3132f 100644
--- a/karavan-designer/src/designer/route/element/DslElementHeader.tsx
+++ b/karavan-designer/src/designer/route/element/DslElementHeader.tsx
@@ -252,7 +252,7 @@ export function DslElementHeader(props: Props) {
         return (
             <>
                 {getHeader()}
-                <Tooltip triggerRef={props.headerRef} position={"left"} 
content={<div style={{textAlign: 'left'}}>{tooltip}</div>}/>
+                <Tooltip triggerRef={props.headerRef} entryDelay={700} 
position={"left"} content={<div style={{textAlign: 'left'}}>{tooltip}</div>}/>
             </>
 
         )
diff --git a/karavan-space/src/designer/property/property/ExpressionField.tsx 
b/karavan-space/src/designer/property/property/ExpressionField.tsx
index cf2d9850..25793d4b 100644
--- a/karavan-space/src/designer/property/property/ExpressionField.tsx
+++ b/karavan-space/src/designer/property/property/ExpressionField.tsx
@@ -36,6 +36,9 @@ import {CamelElement} from 
"karavan-core/lib/model/IntegrationDefinition";
 import {CamelDefinitionApi} from "karavan-core/lib/api/CamelDefinitionApi";
 import {DslPropertyField} from "./DslPropertyField";
 import {CamelUi} from "../../utils/CamelUi";
+import {usePropertiesStore} from "../PropertyStore";
+import {shallow} from "zustand/shallow";
+import {PropertyUtil} from "./PropertyUtil";
 
 interface Props {
     property: PropertyMeta,
@@ -45,6 +48,8 @@ interface Props {
 
 export function ExpressionField(props: Props) {
 
+
+    const [propertyFilter, changedOnly, requiredOnly] = usePropertiesStore((s) 
=> [s.propertyFilter, s.changedOnly, s.requiredOnly], shallow)
     const [selectIsOpen, setSelectIsOpen] = useState<boolean>(false);
     const [propsAreOpen, setPropsAreOpen] = useState<boolean>(false);
 
@@ -91,10 +96,32 @@ export function ExpressionField(props: Props) {
 
     function getProps (): PropertyMeta[] {
         const dslName = getValueClassName();
-        return CamelDefinitionApiExt.getElementProperties(dslName)
+        const filter = propertyFilter.toLocaleLowerCase();
+        let propertyMetas =  
CamelDefinitionApiExt.getElementProperties(dslName)
             .filter(p => p.name !== 'id')
             .filter(p => p.name !== 'expression')
-            .filter(p => !p.isObject || (p.isObject && 
!CamelUi.dslHasSteps(p.type)) || (dslName === 'CatchDefinition' && p.name === 
'onWhen'));
+            .filter(p => !p.isObject || (p.isObject && 
!CamelUi.dslHasSteps(p.type)) || (dslName === 'CatchDefinition' && p.name === 
'onWhen'))
+            .filter(p => p.name === 'parameters' || 
p.name.toLocaleLowerCase().includes(filter) || 
p.label.toLocaleLowerCase().includes(filter) || 
p.displayName.toLocaleLowerCase().includes(filter));
+        if (requiredOnly) {
+            propertyMetas = propertyMetas.filter(p => p.name === 'parameters' 
|| p.required);
+        }
+        if (changedOnly) {
+            propertyMetas = propertyMetas.filter(p => p.name === 'parameters' 
|| PropertyUtil.hasDslPropertyValueChanged(p, getPropertyValue(p)));
+        }
+        return propertyMetas
+    }
+
+    function getPropertyValue(property: PropertyMeta) {
+        const value = getExpressionValue();
+        return value ? (value as any)[property.name] : undefined;
+    }
+
+    function getPropertySelectorChanged(): boolean {
+        return requiredOnly || changedOnly || propertyFilter?.trim().length > 
0;
+    }
+
+    function getShowExpanded(): boolean {
+        return propsAreOpen || getPropertySelectorChanged();
     }
 
     function getExpressionProps (): PropertyMeta | undefined {
@@ -165,7 +192,7 @@ export function ExpressionField(props: Props) {
                 <ExpandableSection
                     toggleText={'Expression properties'}
                     onToggle={(_event, isExpanded) => 
setPropsAreOpen(isExpanded)}
-                    isExpanded={propsAreOpen}>
+                    isExpanded={getShowExpanded()}>
                     {value && getProps().map((property: PropertyMeta) =>
                         <DslPropertyField key={property.name + 
props.value?.uuid}
                                           property={property}
diff --git a/karavan-space/src/designer/route/element/DslElementHeader.tsx 
b/karavan-space/src/designer/route/element/DslElementHeader.tsx
index 2e9002c0..58c3132f 100644
--- a/karavan-space/src/designer/route/element/DslElementHeader.tsx
+++ b/karavan-space/src/designer/route/element/DslElementHeader.tsx
@@ -252,7 +252,7 @@ export function DslElementHeader(props: Props) {
         return (
             <>
                 {getHeader()}
-                <Tooltip triggerRef={props.headerRef} position={"left"} 
content={<div style={{textAlign: 'left'}}>{tooltip}</div>}/>
+                <Tooltip triggerRef={props.headerRef} entryDelay={700} 
position={"left"} content={<div style={{textAlign: 'left'}}>{tooltip}</div>}/>
             </>
 
         )

Reply via email to