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 2c146bf6 fix#947- Eip filter buttons included in knowledgebase (#1099)
2c146bf6 is described below

commit 2c146bf6e3859364c75462a433b82c288295de40
Author: Vidhya Sagar <36588343+vidhyasag...@users.noreply.github.com>
AuthorDate: Mon Feb 5 22:48:29 2024 +0800

    fix#947- Eip filter buttons included in knowledgebase (#1099)
    
    Co-authored-by: induja <induja.b...@gmail.com>
---
 karavan-designer/src/designer/karavan.css          |  3 ++
 karavan-designer/src/knowledgebase/eip/EipTab.tsx  | 43 ++++++++++++++++++----
 .../src/main/webui/src/designer/karavan.css        |  3 ++
 .../main/webui/src/knowledgebase/eip/EipTab.tsx    | 43 ++++++++++++++++++----
 4 files changed, 76 insertions(+), 16 deletions(-)

diff --git a/karavan-designer/src/designer/karavan.css 
b/karavan-designer/src/designer/karavan.css
index 5e558152..4d9a7162 100644
--- a/karavan-designer/src/designer/karavan.css
+++ b/karavan-designer/src/designer/karavan.css
@@ -811,3 +811,6 @@
     background-color: var(--pf-v5-global--BackgroundColor--light-300);
     margin-bottom: 100px;
 }
+.karavan .knowledbase-eip-section .pf-v5-c-toggle-group{
+    margin:16px;
+}
\ No newline at end of file
diff --git a/karavan-designer/src/knowledgebase/eip/EipTab.tsx 
b/karavan-designer/src/knowledgebase/eip/EipTab.tsx
index e2757f9d..35cc9741 100644
--- a/karavan-designer/src/knowledgebase/eip/EipTab.tsx
+++ b/karavan-designer/src/knowledgebase/eip/EipTab.tsx
@@ -17,7 +17,7 @@
 import React from 'react';
 import {
     Gallery,
-    PageSection, PageSectionVariants
+    PageSection, PageSectionVariants,ToggleGroup,ToggleGroupItem
 } from '@patternfly/react-core';
 import '../../designer/karavan.css';
 import {EipCard} from "./EipCard";
@@ -25,6 +25,7 @@ import {EipModal} from "./EipModal";
 import {CamelModelMetadata, ElementMeta} from 
"karavan-core/lib/model/CamelMetadata";
 import {useKnowledgebaseStore} from "../KnowledgebaseStore";
 import {shallow} from "zustand/shallow";
+import { useSelectorStore } from '../../designer/DesignerStore';
 
 interface Props {
     dark: boolean,
@@ -36,20 +37,46 @@ export function EipTab(props: Props) {
     const [isModalOpen] = useKnowledgebaseStore((s) =>
         [s.isModalOpen], shallow)
 
-
-    const {filter} = props;
-    const elements = CamelModelMetadata
-        .filter(c => c.name.toLowerCase().includes(filter.toLowerCase()))
+        const [ selectedLabels, addSelectedLabel, deleteSelectedLabel] =
+        useSelectorStore((s) =>
+            [s.selectedLabels, s.addSelectedLabel, s.deleteSelectedLabel], 
shallow)
+        const { filter } = props;
+        const elements = CamelModelMetadata;
+        const filteredElements=CamelModelMetadata
+        .filter(c => 
c.name.toLowerCase().includes(filter.toLowerCase())).filter((dsl: ElementMeta) 
=> {
+            if (selectedLabels.length === 0) {
+                return true;
+            } else {
+                return dsl.labels.split(",").some(r => 
selectedLabels.includes(r));
+            }
+        })
         .sort((a: ElementMeta, b: ElementMeta) => a.name > b.name ? 1 : -1);
-
+     const eipLabels = [...new Set(elements.map(e => 
e.labels).join(",").split(",").filter(e => e !== 'eip'))];
+    function selectLabel(eipLabel: string) {
+            if (!selectedLabels.includes(eipLabel)) {
+                addSelectedLabel(eipLabel);
+            } else {
+                deleteSelectedLabel(eipLabel);
+            }
+        }
     return (
         <PageSection variant={props.dark ? PageSectionVariants.darker : 
PageSectionVariants.light}
-                     padding={{default: 'noPadding'}} 
className="kamelet-section">
+            padding={{ default: 'noPadding' }} className="kamelet-section 
knowledbase-eip-section">
+             <ToggleGroup aria-label="Labels" isCompact >
+                    {eipLabels.map(eipLabel => <ToggleGroupItem
+                        key={eipLabel}
+                        text={eipLabel}
+                        buttonId={eipLabel}
+                        isSelected={selectedLabels.includes(eipLabel)}
+                        onChange={selected => selectLabel(eipLabel)}
+                    />)}
+                </ToggleGroup>
+
             {isModalOpen && <EipModal/>}
             <PageSection isFilled className="kamelets-page"
                          variant={props.dark ? PageSectionVariants.darker : 
PageSectionVariants.light}>
                 <Gallery hasGutter>
-                    {elements.map(c => (
+                    {filteredElements.map(c => (
                         <EipCard key={c.name} element={c}/>
                     ))}
                 </Gallery>
diff --git a/karavan-web/karavan-app/src/main/webui/src/designer/karavan.css 
b/karavan-web/karavan-app/src/main/webui/src/designer/karavan.css
index 5e558152..4d9a7162 100644
--- a/karavan-web/karavan-app/src/main/webui/src/designer/karavan.css
+++ b/karavan-web/karavan-app/src/main/webui/src/designer/karavan.css
@@ -811,3 +811,6 @@
     background-color: var(--pf-v5-global--BackgroundColor--light-300);
     margin-bottom: 100px;
 }
+.karavan .knowledbase-eip-section .pf-v5-c-toggle-group{
+    margin:16px;
+}
\ No newline at end of file
diff --git 
a/karavan-web/karavan-app/src/main/webui/src/knowledgebase/eip/EipTab.tsx 
b/karavan-web/karavan-app/src/main/webui/src/knowledgebase/eip/EipTab.tsx
index e2757f9d..35cc9741 100644
--- a/karavan-web/karavan-app/src/main/webui/src/knowledgebase/eip/EipTab.tsx
+++ b/karavan-web/karavan-app/src/main/webui/src/knowledgebase/eip/EipTab.tsx
@@ -17,7 +17,7 @@
 import React from 'react';
 import {
     Gallery,
-    PageSection, PageSectionVariants
+    PageSection, PageSectionVariants,ToggleGroup,ToggleGroupItem
 } from '@patternfly/react-core';
 import '../../designer/karavan.css';
 import {EipCard} from "./EipCard";
@@ -25,6 +25,7 @@ import {EipModal} from "./EipModal";
 import {CamelModelMetadata, ElementMeta} from 
"karavan-core/lib/model/CamelMetadata";
 import {useKnowledgebaseStore} from "../KnowledgebaseStore";
 import {shallow} from "zustand/shallow";
+import { useSelectorStore } from '../../designer/DesignerStore';
 
 interface Props {
     dark: boolean,
@@ -36,20 +37,46 @@ export function EipTab(props: Props) {
     const [isModalOpen] = useKnowledgebaseStore((s) =>
         [s.isModalOpen], shallow)
 
-
-    const {filter} = props;
-    const elements = CamelModelMetadata
-        .filter(c => c.name.toLowerCase().includes(filter.toLowerCase()))
+        const [ selectedLabels, addSelectedLabel, deleteSelectedLabel] =
+        useSelectorStore((s) =>
+            [s.selectedLabels, s.addSelectedLabel, s.deleteSelectedLabel], 
shallow)
+        const { filter } = props;
+        const elements = CamelModelMetadata;
+        const filteredElements=CamelModelMetadata
+        .filter(c => 
c.name.toLowerCase().includes(filter.toLowerCase())).filter((dsl: ElementMeta) 
=> {
+            if (selectedLabels.length === 0) {
+                return true;
+            } else {
+                return dsl.labels.split(",").some(r => 
selectedLabels.includes(r));
+            }
+        })
         .sort((a: ElementMeta, b: ElementMeta) => a.name > b.name ? 1 : -1);
-
+     const eipLabels = [...new Set(elements.map(e => 
e.labels).join(",").split(",").filter(e => e !== 'eip'))];
+    function selectLabel(eipLabel: string) {
+            if (!selectedLabels.includes(eipLabel)) {
+                addSelectedLabel(eipLabel);
+            } else {
+                deleteSelectedLabel(eipLabel);
+            }
+        }
     return (
         <PageSection variant={props.dark ? PageSectionVariants.darker : 
PageSectionVariants.light}
-                     padding={{default: 'noPadding'}} 
className="kamelet-section">
+            padding={{ default: 'noPadding' }} className="kamelet-section 
knowledbase-eip-section">
+             <ToggleGroup aria-label="Labels" isCompact >
+                    {eipLabels.map(eipLabel => <ToggleGroupItem
+                        key={eipLabel}
+                        text={eipLabel}
+                        buttonId={eipLabel}
+                        isSelected={selectedLabels.includes(eipLabel)}
+                        onChange={selected => selectLabel(eipLabel)}
+                    />)}
+                </ToggleGroup>
+
             {isModalOpen && <EipModal/>}
             <PageSection isFilled className="kamelets-page"
                          variant={props.dark ? PageSectionVariants.darker : 
PageSectionVariants.light}>
                 <Gallery hasGutter>
-                    {elements.map(c => (
+                    {filteredElements.map(c => (
                         <EipCard key={c.name} element={c}/>
                     ))}
                 </Gallery>

Reply via email to