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 e13945352b462547e04a25d71a4e355b3f250d8f
Author: Marat Gubaidullin <marat.gubaidul...@gmail.com>
AuthorDate: Fri Nov 18 19:14:55 2022 -0500

    Filter custom Kamelets
---
 .../src/main/webui/src/kamelets/KameletsPage.tsx   | 43 +++++++++++++---------
 .../src/main/webui/src/projects/ProjectPage.tsx    | 37 +++++++++++++------
 karavan-designer/src/kamelets/KameletsPage.tsx     | 43 +++++++++++++---------
 3 files changed, 77 insertions(+), 46 deletions(-)

diff --git a/karavan-app/src/main/webui/src/kamelets/KameletsPage.tsx 
b/karavan-app/src/main/webui/src/kamelets/KameletsPage.tsx
index 0635917..1c500e4 100644
--- a/karavan-app/src/main/webui/src/kamelets/KameletsPage.tsx
+++ b/karavan-app/src/main/webui/src/kamelets/KameletsPage.tsx
@@ -21,7 +21,7 @@ import {
     Gallery,
     ToolbarItem,
     TextInput,
-    PageSection, TextContent, Text, PageSectionVariants, Flex, FlexItem, 
Badge, Button
+    PageSection, TextContent, Text, PageSectionVariants, Flex, FlexItem, 
Badge, Button, Switch
 } from '@patternfly/react-core';
 import '../designer/karavan.css';
 import {KameletCard} from "./KameletCard";
@@ -41,7 +41,8 @@ interface State {
     repository: string,
     path: string,
     kamelets: KameletModel[],
-    filter: string
+    filter: string,
+    customOnly: boolean
 }
 
 export class KameletsPage extends React.Component<Props, State> {
@@ -51,7 +52,8 @@ export class KameletsPage extends React.Component<Props, 
State> {
         repository: '',
         path: '',
         kamelets: [],
-        filter: ''
+        filter: '',
+        customOnly: false
     };
 
     componentDidMount() {
@@ -63,26 +65,26 @@ export class KameletsPage extends React.Component<Props, 
State> {
     }
 
     search(filter: string) {
-        this.setState({
-            filter: filter,
-            isModalOpen: false,
-            kamelets: KameletApi.getKamelets().filter(kamelet => 
kamelet.spec.definition.title.toLowerCase().includes(filter.toLowerCase()))
-        })
+        this.setState({ filter: filter, isModalOpen: false})
     }
 
     render() {
+        const {dark, onRefresh} = this.props;
+        const {kamelets, kamelet, isModalOpen, customOnly, filter} = 
this.state;
+        let kameletList = kamelets.filter(kamelet => 
kamelet.spec.definition.title.toLowerCase().includes(filter.toLowerCase()));
+        if (customOnly) kameletList = kameletList.filter(k => 
KameletApi.getCustomKameletNames().includes(k.metadata.name));
         return (
-            <PageSection variant={this.props.dark ? PageSectionVariants.darker 
: PageSectionVariants.light}
+            <PageSection variant={dark ? PageSectionVariants.darker : 
PageSectionVariants.light}
                          padding={{default: 'noPadding'}} 
className="kamelet-section">
-                <KameletModal key={this.state.kamelet?.metadata.name + 
this.state.isModalOpen.toString()}
-                              isOpen={this.state.isModalOpen} 
kamelet={this.state.kamelet}/>
+                <KameletModal key={kamelet?.metadata.name + 
isModalOpen.toString()}
+                              isOpen={isModalOpen} kamelet={kamelet}/>
                 <PageSection className="tools-section"
-                             variant={this.props.dark ? 
PageSectionVariants.darker : PageSectionVariants.light}>
+                             variant={dark ? PageSectionVariants.darker : 
PageSectionVariants.light}>
                     <Flex className="tools" justifyContent={{default: 
'justifyContentSpaceBetween'}}>
                         <FlexItem>
                             <TextContent className="header">
                                 <Text component="h2">Kamelet Catalog</Text>
-                                <Badge isRead 
className="labels">{this.state.kamelets.length}</Badge>
+                                <Badge isRead 
className="labels">{kamelets.length}</Badge>
                             </TextContent>
                         </FlexItem>
                         <FlexItem>
@@ -91,14 +93,21 @@ export class KameletsPage extends React.Component<Props, 
State> {
                                     <ToolbarItem>
                                         <Button icon={<RefreshIcon/>} 
variant="link"
                                                 onClick={e => {
-                                                    
this.props.onRefresh?.call(this).then(value => {
+                                                    
onRefresh?.call(this).then(value => {
                                                         
this.setState({kamelets: KameletApi.getKamelets()});
                                                     })
                                                 }}/>
                                     </ToolbarItem>
+                                    <ToolbarItem>
+                                        <Switch
+                                            label="Custom only"
+                                            isChecked={customOnly}
+                                            onChange={checked => 
this.setState({customOnly: checked})}
+                                        />
+                                    </ToolbarItem>
                                     <ToolbarItem>
                                         <TextInput className="text-field" 
type="search" id="search" name="search"
-                                                   value={this.state.filter}
+                                                   value={filter}
                                                    onChange={value => 
this.search(value)}
                                                    autoComplete="off"
                                                    placeholder="Search by 
name"/>
@@ -109,9 +118,9 @@ export class KameletsPage extends React.Component<Props, 
State> {
                     </Flex>
                 </PageSection>
                 <PageSection isFilled className="kamelets-page"
-                             variant={this.props.dark ? 
PageSectionVariants.darker : PageSectionVariants.light}>
+                             variant={dark ? PageSectionVariants.darker : 
PageSectionVariants.light}>
                     <Gallery hasGutter>
-                        {this.state.kamelets.map(k => (
+                        {kameletList.map(k => (
                             <KameletCard key={k.metadata.name} kamelet={k} 
onClickCard={this.select}/>
                         ))}
                     </Gallery>
diff --git a/karavan-app/src/main/webui/src/projects/ProjectPage.tsx 
b/karavan-app/src/main/webui/src/projects/ProjectPage.tsx
index 387d875..b748442 100644
--- a/karavan-app/src/main/webui/src/projects/ProjectPage.tsx
+++ b/karavan-app/src/main/webui/src/projects/ProjectPage.tsx
@@ -100,15 +100,17 @@ export class ProjectPage extends React.Component<Props, 
State> {
                 this.setState({files: files})
             });
             KubernetesAPI.inKubernetes = true;
-            KaravanApi.getConfigMaps(this.state.environment, (any: []) => {
-                KubernetesAPI.setConfigMaps(any);
-            });
-            KaravanApi.getSecrets(this.state.environment, (any: []) => {
-                KubernetesAPI.setSecrets(any);
-            });
-            KaravanApi.getServices(this.state.environment, (any: []) => {
-                KubernetesAPI.setServices(any);
-            });
+            if (!this.props.isTemplates){
+                KaravanApi.getConfigMaps(this.state.environment, (any: []) => {
+                    KubernetesAPI.setConfigMaps(any);
+                });
+                KaravanApi.getSecrets(this.state.environment, (any: []) => {
+                    KubernetesAPI.setSecrets(any);
+                });
+                KaravanApi.getServices(this.state.environment, (any: []) => {
+                    KubernetesAPI.setServices(any);
+                });
+            }
         }
     }
 
@@ -401,10 +403,21 @@ export class ProjectPage extends React.Component<Props, 
State> {
     }
 
     getTemplatePanel() {
+        const {tab} = this.state;
         return (
-            <PageSection isFilled className="kamelets-page 
project-page-section" padding={{default: 'padding'}}>
-                {this.getProjectFiles()}
-            </PageSection>
+            <Flex direction={{default: "column"}} spaceItems={{default: 
"spaceItemsNone"}}>
+                {/*<FlexItem className="project-tabs">*/}
+                {/*    <Tabs activeKey={tab} onSelect={(event, tabIndex) => 
this.setState({tab: tabIndex})}>*/}
+                {/*        <Tab eventKey="templates" title="Templates"/>*/}
+                {/*        <Tab eventKey="kamelets" title="Kamelets"/>*/}
+                {/*    </Tabs>*/}
+                {/*</FlexItem>*/}
+                <FlexItem>
+                    <PageSection padding={{default: "padding"}}>
+                        {this.getProjectFiles()}
+                    </PageSection>
+                </FlexItem>
+            </Flex>
         )
     }
 
diff --git a/karavan-designer/src/kamelets/KameletsPage.tsx 
b/karavan-designer/src/kamelets/KameletsPage.tsx
index 0635917..1c500e4 100644
--- a/karavan-designer/src/kamelets/KameletsPage.tsx
+++ b/karavan-designer/src/kamelets/KameletsPage.tsx
@@ -21,7 +21,7 @@ import {
     Gallery,
     ToolbarItem,
     TextInput,
-    PageSection, TextContent, Text, PageSectionVariants, Flex, FlexItem, 
Badge, Button
+    PageSection, TextContent, Text, PageSectionVariants, Flex, FlexItem, 
Badge, Button, Switch
 } from '@patternfly/react-core';
 import '../designer/karavan.css';
 import {KameletCard} from "./KameletCard";
@@ -41,7 +41,8 @@ interface State {
     repository: string,
     path: string,
     kamelets: KameletModel[],
-    filter: string
+    filter: string,
+    customOnly: boolean
 }
 
 export class KameletsPage extends React.Component<Props, State> {
@@ -51,7 +52,8 @@ export class KameletsPage extends React.Component<Props, 
State> {
         repository: '',
         path: '',
         kamelets: [],
-        filter: ''
+        filter: '',
+        customOnly: false
     };
 
     componentDidMount() {
@@ -63,26 +65,26 @@ export class KameletsPage extends React.Component<Props, 
State> {
     }
 
     search(filter: string) {
-        this.setState({
-            filter: filter,
-            isModalOpen: false,
-            kamelets: KameletApi.getKamelets().filter(kamelet => 
kamelet.spec.definition.title.toLowerCase().includes(filter.toLowerCase()))
-        })
+        this.setState({ filter: filter, isModalOpen: false})
     }
 
     render() {
+        const {dark, onRefresh} = this.props;
+        const {kamelets, kamelet, isModalOpen, customOnly, filter} = 
this.state;
+        let kameletList = kamelets.filter(kamelet => 
kamelet.spec.definition.title.toLowerCase().includes(filter.toLowerCase()));
+        if (customOnly) kameletList = kameletList.filter(k => 
KameletApi.getCustomKameletNames().includes(k.metadata.name));
         return (
-            <PageSection variant={this.props.dark ? PageSectionVariants.darker 
: PageSectionVariants.light}
+            <PageSection variant={dark ? PageSectionVariants.darker : 
PageSectionVariants.light}
                          padding={{default: 'noPadding'}} 
className="kamelet-section">
-                <KameletModal key={this.state.kamelet?.metadata.name + 
this.state.isModalOpen.toString()}
-                              isOpen={this.state.isModalOpen} 
kamelet={this.state.kamelet}/>
+                <KameletModal key={kamelet?.metadata.name + 
isModalOpen.toString()}
+                              isOpen={isModalOpen} kamelet={kamelet}/>
                 <PageSection className="tools-section"
-                             variant={this.props.dark ? 
PageSectionVariants.darker : PageSectionVariants.light}>
+                             variant={dark ? PageSectionVariants.darker : 
PageSectionVariants.light}>
                     <Flex className="tools" justifyContent={{default: 
'justifyContentSpaceBetween'}}>
                         <FlexItem>
                             <TextContent className="header">
                                 <Text component="h2">Kamelet Catalog</Text>
-                                <Badge isRead 
className="labels">{this.state.kamelets.length}</Badge>
+                                <Badge isRead 
className="labels">{kamelets.length}</Badge>
                             </TextContent>
                         </FlexItem>
                         <FlexItem>
@@ -91,14 +93,21 @@ export class KameletsPage extends React.Component<Props, 
State> {
                                     <ToolbarItem>
                                         <Button icon={<RefreshIcon/>} 
variant="link"
                                                 onClick={e => {
-                                                    
this.props.onRefresh?.call(this).then(value => {
+                                                    
onRefresh?.call(this).then(value => {
                                                         
this.setState({kamelets: KameletApi.getKamelets()});
                                                     })
                                                 }}/>
                                     </ToolbarItem>
+                                    <ToolbarItem>
+                                        <Switch
+                                            label="Custom only"
+                                            isChecked={customOnly}
+                                            onChange={checked => 
this.setState({customOnly: checked})}
+                                        />
+                                    </ToolbarItem>
                                     <ToolbarItem>
                                         <TextInput className="text-field" 
type="search" id="search" name="search"
-                                                   value={this.state.filter}
+                                                   value={filter}
                                                    onChange={value => 
this.search(value)}
                                                    autoComplete="off"
                                                    placeholder="Search by 
name"/>
@@ -109,9 +118,9 @@ export class KameletsPage extends React.Component<Props, 
State> {
                     </Flex>
                 </PageSection>
                 <PageSection isFilled className="kamelets-page"
-                             variant={this.props.dark ? 
PageSectionVariants.darker : PageSectionVariants.light}>
+                             variant={dark ? PageSectionVariants.darker : 
PageSectionVariants.light}>
                     <Gallery hasGutter>
-                        {this.state.kamelets.map(k => (
+                        {kameletList.map(k => (
                             <KameletCard key={k.metadata.name} kamelet={k} 
onClickCard={this.select}/>
                         ))}
                     </Gallery>

Reply via email to