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 8a1e746 Fix kamelets and component call for public mode 8a1e746 is described below commit 8a1e746fa6f071b0a154a1e048aead65be75bef1 Author: Marat Gubaidullin <marat.gubaidul...@gmail.com> AuthorDate: Fri Sep 30 13:34:20 2022 -0400 Fix kamelets and component call for public mode --- karavan-app/src/main/webapp/src/Main.tsx | 9 +++---- .../main/webapp/src/components/ComponentsPage.tsx | 18 ++++++++++++- .../src/main/webapp/src/kamelets/KameletsPage.tsx | 31 +++++++++++++++++----- .../src/main/webapp/src/projects/ProjectInfo.tsx | 2 +- .../src/main/webapp/src/projects/ProjectsPage.tsx | 9 +++---- 5 files changed, 51 insertions(+), 18 deletions(-) diff --git a/karavan-app/src/main/webapp/src/Main.tsx b/karavan-app/src/main/webapp/src/Main.tsx index 9c568cf..1b35acb 100644 --- a/karavan-app/src/main/webapp/src/Main.tsx +++ b/karavan-app/src/main/webapp/src/Main.tsx @@ -13,7 +13,7 @@ import { } from '@patternfly/react-core'; import {KaravanApi} from "./api/KaravanApi"; import {SsoApi} from "./api/SsoApi"; -import {KameletApi} from "karavan-core/lib/api/KameletApi"; +import {KameletApi, Kamelets} from "karavan-core/lib/api/KameletApi"; import './designer/karavan.css'; import {ConfigurationPage} from "./config/ConfigurationPage"; import {KameletsPage} from "./kamelets/KameletsPage"; @@ -106,11 +106,10 @@ export class Main extends React.Component<Props, State> { } else { this.setState({key: Math.random().toString()}) } + if (KaravanApi.isAuthorized || KaravanApi.authType === 'public') { + this.getData(); + } }); - console.log("KaravanApi.isAuthorized", KaravanApi.isAuthorized); - if (KaravanApi.isAuthorized || KaravanApi.authType === 'public') { - this.getData(); - } } onLogin = (username: string, password: string) => { diff --git a/karavan-app/src/main/webapp/src/components/ComponentsPage.tsx b/karavan-app/src/main/webapp/src/components/ComponentsPage.tsx index 182ce03..696f0ba 100644 --- a/karavan-app/src/main/webapp/src/components/ComponentsPage.tsx +++ b/karavan-app/src/main/webapp/src/components/ComponentsPage.tsx @@ -21,13 +21,16 @@ import { Gallery, ToolbarItem, TextInput, - PageSection, TextContent, Text, PageSectionVariants, Flex, FlexItem, Badge + PageSection, TextContent, Text, PageSectionVariants, Flex, FlexItem, Badge, Button } from '@patternfly/react-core'; import '../designer/karavan.css'; import {ComponentCard} from "./ComponentCard"; import {ComponentModal} from "./ComponentModal"; import {Component} from "karavan-core/lib/model/ComponentModels"; import {ComponentApi} from "karavan-core/lib/api/ComponentApi"; +import RefreshIcon from "@patternfly/react-icons/dist/esm/icons/sync-alt-icon"; +import {KaravanApi} from "../api/KaravanApi"; +import {Components} from "karavan-core/lib/api/ComponentApi"; interface Props { dark: boolean @@ -86,6 +89,19 @@ export class ComponentsPage extends React.Component<Props, State> { <FlexItem> <Toolbar id="toolbar-group-types"> <ToolbarContent> + <ToolbarItem> + <Button icon={<RefreshIcon/>} variant="link" + onClick={e => { + KaravanApi.getComponentNames(names => names.forEach(name => { + KaravanApi.getComponent(name, json => { + ComponentApi.saveComponent(json); + if (Components.length === names.length){ + this.setState({components: ComponentApi.getComponents()}); + } + }) + })); + }}/> + </ToolbarItem> <ToolbarItem> <TextInput className="text-field" type="search" id="search" name="search" value={this.state.filter} diff --git a/karavan-app/src/main/webapp/src/kamelets/KameletsPage.tsx b/karavan-app/src/main/webapp/src/kamelets/KameletsPage.tsx index 9176532..2fb8095 100644 --- a/karavan-app/src/main/webapp/src/kamelets/KameletsPage.tsx +++ b/karavan-app/src/main/webapp/src/kamelets/KameletsPage.tsx @@ -21,13 +21,16 @@ import { Gallery, ToolbarItem, TextInput, - PageSection, TextContent, Text, PageSectionVariants, Flex, FlexItem, Badge + PageSection, TextContent, Text, PageSectionVariants, Flex, FlexItem, Badge, Button } from '@patternfly/react-core'; import '../designer/karavan.css'; import {KameletCard} from "./KameletCard"; import {KameletModel} from "karavan-core/lib/model/KameletModels"; import {KameletApi} from "karavan-core/lib/api/KameletApi"; import {KameletModal} from "./KameletModal"; +import {KaravanApi} from "../api/KaravanApi"; +import RefreshIcon from "@patternfly/react-icons/dist/esm/icons/sync-alt-icon"; +import {Kamelets} from "karavan-core/lib/api/KameletApi"; interface Props { dark: boolean @@ -56,11 +59,11 @@ export class KameletsPage extends React.Component<Props, State> { this.setState({kamelets: KameletApi.getKamelets()}) } - select = (k: KameletModel)=> { + select = (k: KameletModel) => { this.setState({kamelet: k, isModalOpen: true}) } - search(filter: string){ + search(filter: string) { this.setState({ filter: filter, isModalOpen: false, @@ -70,10 +73,12 @@ export class KameletsPage extends React.Component<Props, State> { render() { return ( - <PageSection variant={this.props.dark ? PageSectionVariants.darker : PageSectionVariants.light} padding={{ default: 'noPadding' }} className="kamelet-section"> + <PageSection variant={this.props.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}/> - <PageSection className="tools-section" variant={this.props.dark ? PageSectionVariants.darker : PageSectionVariants.light}> + <PageSection className="tools-section" + variant={this.props.dark ? PageSectionVariants.darker : PageSectionVariants.light}> <Flex className="tools" justifyContent={{default: 'justifyContentSpaceBetween'}}> <FlexItem> <TextContent className="header"> @@ -84,6 +89,19 @@ export class KameletsPage extends React.Component<Props, State> { <FlexItem> <Toolbar id="toolbar-group-types"> <ToolbarContent> + <ToolbarItem> + <Button icon={<RefreshIcon/>} variant="link" + onClick={e => { + KaravanApi.getKameletNames(names => names.forEach(name => { + KaravanApi.getKamelet(name, yaml => { + KameletApi.saveKamelet(yaml); + if (Kamelets.length === names.length){ + this.setState({kamelets: KameletApi.getKamelets()}); + } + }) + })); + }}/> + </ToolbarItem> <ToolbarItem> <TextInput className="text-field" type="search" id="search" name="search" value={this.state.filter} @@ -96,7 +114,8 @@ export class KameletsPage extends React.Component<Props, State> { </FlexItem> </Flex> </PageSection> - <PageSection isFilled className="kamelets-page" variant={this.props.dark ? PageSectionVariants.darker : PageSectionVariants.light}> + <PageSection isFilled className="kamelets-page" + variant={this.props.dark ? PageSectionVariants.darker : PageSectionVariants.light}> <Gallery hasGutter> {this.state.kamelets.map(k => ( <KameletCard key={k.metadata.name} kamelet={k} onClickCard={this.select}/> diff --git a/karavan-app/src/main/webapp/src/projects/ProjectInfo.tsx b/karavan-app/src/main/webapp/src/projects/ProjectInfo.tsx index 56a6a24..24eed8e 100644 --- a/karavan-app/src/main/webapp/src/projects/ProjectInfo.tsx +++ b/karavan-app/src/main/webapp/src/projects/ProjectInfo.tsx @@ -272,7 +272,7 @@ export class ProjectInfo extends React.Component<Props, State> { {podStatuses.map(pod => { const running = pod.started && pod.ready; return ( - <Tooltip content={running ? "Running" : pod.reason}> + <Tooltip key={pod.name} content={running ? "Running" : pod.reason}> <Label icon={running ? <UpIcon/> : <DownIcon/>} color={running ? "green" : "red"}> <Button variant="link" onClick={e => this.props.showLog?.call(this, 'container', pod.name, env)}> diff --git a/karavan-app/src/main/webapp/src/projects/ProjectsPage.tsx b/karavan-app/src/main/webapp/src/projects/ProjectsPage.tsx index b58a4fc..0b290d8 100644 --- a/karavan-app/src/main/webapp/src/projects/ProjectsPage.tsx +++ b/karavan-app/src/main/webapp/src/projects/ProjectsPage.tsx @@ -118,16 +118,15 @@ export class ProjectsPage extends React.Component<Props, State> { tools = () => (<Toolbar id="toolbar-group-types"> <ToolbarContent> + <ToolbarItem> + <Button variant="link" icon={<RefreshIcon/>} onClick={e => this.onGetProjects()}/> + </ToolbarItem> <ToolbarItem> <TextInput className="text-field" type="search" id="search" name="search" autoComplete="off" placeholder="Search by name" value={this.state.filter} onChange={e => this.setState({filter: e})}/> </ToolbarItem> - <ToolbarItem> - <Button variant="secondary" icon={<RefreshIcon/>} - onClick={e => this.onGetProjects()}>Refresh</Button> - </ToolbarItem> <ToolbarItem> <Button icon={<PlusIcon/>} onClick={e => this.setState({isCreateModalOpen: true, isCopy: false})}>Create</Button> </ToolbarItem> @@ -212,7 +211,7 @@ export class ProjectsPage extends React.Component<Props, State> { render() { const runtime = this.props.config?.runtime ? this.props.config.runtime : "QUARKUS"; - const projects = this.state.projects.filter(p => p.name.includes(this.state.filter) || p.description.includes(this.state.filter)); + const projects = this.state.projects.filter(p => p.name.toLowerCase().includes(this.state.filter) || p.description.toLowerCase().includes(this.state.filter)); const environments: string[] = this.props.config.environments && Array.isArray(this.props.config.environments) ? Array.from(this.props.config.environments) : [];