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 d2548d36 Refactoring
d2548d36 is described below

commit d2548d363ef0397d3a770b233880b68b69ce51ce
Author: Marat Gubaidullin <ma...@talismancloud.io>
AuthorDate: Wed Nov 8 18:36:09 2023 -0500

    Refactoring
---
 .../src/main/webui/src/dashboard/DashboardPage.tsx | 384 ---------------------
 1 file changed, 384 deletions(-)

diff --git 
a/karavan-web/karavan-app/src/main/webui/src/dashboard/DashboardPage.tsx 
b/karavan-web/karavan-app/src/main/webui/src/dashboard/DashboardPage.tsx
deleted file mode 100644
index 45d02970..00000000
--- a/karavan-web/karavan-app/src/main/webui/src/dashboard/DashboardPage.tsx
+++ /dev/null
@@ -1,384 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import React, {useState} from 'react';
-import {
-    Badge, Bullseye,
-    Button, EmptyState, EmptyStateIcon, EmptyStateVariant,
-    Flex,
-    FlexItem, HelperText, HelperTextItem, Label, LabelGroup,
-    PageSection, Spinner,
-    Text,
-    TextContent,
-    TextInput, ToggleGroup, ToggleGroupItem,
-    Toolbar,
-    ToolbarContent,
-    ToolbarItem, Tooltip, EmptyStateHeader
-} from '@patternfly/react-core';
-import '../designer/karavan.css';
-import {
-    CamelStatus,
-    CamelStatusValue,
-    ContainerStatus,
-    DeploymentStatus,
-    Project,
-    ServiceStatus
-} from "../api/ProjectModels";
-import {
-       TableVariant,
-       Tbody,
-       Td,
-       Th,
-       Thead,
-       Tr
-} from '@patternfly/react-table';
-import {
-       Table
-} from '@patternfly/react-table/deprecated';
-import {camelIcon, CamelUi} from "../designer/utils/CamelUi";
-import Icon from "../main/Logo";
-import UpIcon from "@patternfly/react-icons/dist/esm/icons/check-circle-icon";
-import DownIcon from 
"@patternfly/react-icons/dist/esm/icons/error-circle-o-icon";
-import SearchIcon from "@patternfly/react-icons/dist/esm/icons/search-icon";
-import {MainToolbar} from "../designer/MainToolbar";
-import {useAppConfigStore, useProjectsStore, useStatusesStore} from 
"../api/ProjectStore";
-import {shallow} from "zustand/shallow";
-
-export function DashboardPage () {
-
-    const [config] = useAppConfigStore((state) => [state.config], shallow)
-    const [projects, setProjects] = useProjectsStore((state) => 
[state.projects, state.setProjects], shallow)
-    const [deployments, services, containers, camels, setDeployments, 
setServices, setContainers, setCamels]
-        = useStatusesStore((state) => [state.deployments, state.services, 
state.containers, state.camels,
-        state.setDeployments, state.setServices, state.setContainers, 
state.setCamels], shallow);
-    const [filter, setFilter] = useState<string>('');
-    const [selectedEnv, setSelectedEnv] = 
useState<string[]>([config.environment]);
-
-    function selectEnvironment(name: string, selected: boolean) {
-        if (selected && !selectedEnv.includes(name)) {
-            setSelectedEnv((state: string[]) => {
-                state.push(name);
-                return state;
-            })
-        } else if (!selected && selectedEnv.includes(name)) {
-            setSelectedEnv((state: string[]) => {
-                return state.filter(e => e !== name)
-            })
-        }
-    }
-
-    function tools() {
-        return (<Toolbar id="toolbar-group-types">
-            <ToolbarContent>
-                {/*<ToolbarItem>*/}
-                {/*    <Button variant="link" icon={<RefreshIcon/>} onClick={e 
=> onGetProjects()}/>*/}
-                {/*</ToolbarItem>*/}
-                <ToolbarItem>
-                    <ToggleGroup aria-label="Default with single selectable">
-                        {config.environments.map(env => (
-                            <ToggleGroupItem key={env} text={env} 
buttonId={env} isSelected={selectedEnv.includes(env)}
-                                             onChange={(_, selected)  => 
selectEnvironment(env, selected)}/>
-                        ))}
-                    </ToggleGroup>
-                </ToolbarItem>
-                <ToolbarItem>
-                    <TextInput className="text-field" type="search" 
id="search" name="search"
-                               autoComplete="off" placeholder="Search by name"
-                               value={filter}
-                               onChange={(_, e) => setFilter(e)}/>
-                </ToolbarItem>
-            </ToolbarContent>
-        </Toolbar>);
-    }
-
-    function title() {
-        return (<TextContent>
-            <Text component="h2">Dashboard</Text>
-        </TextContent>);
-    }
-
-    function getSelectedEnvironments(): string [] {
-        return config.environments.filter(e => selectedEnv.includes(e));
-    }
-
-    function getDeploymentEnvironments(name: string): [string, boolean] [] {
-        return selectedEnv.map(e => {
-            const env: string = e as string;
-            const dep = deployments.find(d => d.projectId === name && d.env 
=== env);
-            const deployed: boolean = dep !== undefined && dep.replicas > 0 && 
dep.replicas === dep.readyReplicas;
-            return [env, deployed];
-        });
-    }
-
-    function getDeploymentByEnvironments(name: string): [string, 
DeploymentStatus | undefined] [] {
-        return selectedEnv.map(e => {
-            const env: string = e as string;
-            const dep = deployments.find(d => d.projectId === name && d.env 
=== env);
-            return [env, dep];
-        });
-    }
-
-    function getServiceByEnvironments(name: string): [string, ServiceStatus | 
undefined] [] {
-        return selectedEnv.map(e => {
-            const env: string = e as string;
-            const service = services.find(d => d.name === name && d.env === 
env);
-            return [env, service];
-        });
-    }
-
-    function getContainerByEnvironments(name: string): [string, 
ContainerStatus | undefined] [] {
-        return selectedEnv.map(e => {
-            const env: string = e as string;
-            const container = containers.find(d => d.containerName === name && 
d.env === env);
-            return [env, container];
-        });
-    }
-
-    function getCamelStatusByEnvironments(containerName: string): [string, 
CamelStatusValue | undefined] [] {
-        console.log(camels)
-        console.log(selectedEnv)
-        const result =  selectedEnv.map(e => {
-            const env: string = e as string;
-            const status = camels?.find(d => d.containerName === containerName 
&& d.env === env);
-            const statusValue = status ? status.statuses[0] : undefined;
-            return {env, statusValue};
-        });
-        console.log(result)
-        return [];
-    }
-
-    function getProject(name: string): Project | undefined {
-        return projects.filter(p => p.projectId === name)?.at(0);
-    }
-
-    function isKaravan(name: string): boolean {
-        return projects.findIndex(p => p.projectId === name) > -1;
-    }
-
-    function getReplicasPanel(deploymentStatus?: DeploymentStatus) {
-        if (deploymentStatus) {
-            const readyReplicas = deploymentStatus.readyReplicas ? 
deploymentStatus.readyReplicas : 0;
-            const ok = (deploymentStatus && readyReplicas > 0
-                && (deploymentStatus.unavailableReplicas === 0 || 
deploymentStatus.unavailableReplicas === undefined || 
deploymentStatus.unavailableReplicas === null)
-                && deploymentStatus?.replicas === readyReplicas);
-            return (
-                <Flex justifyContent={{default: "justifyContentSpaceBetween"}} 
alignItems={{default: "alignItemsCenter"}}>
-                    <FlexItem>
-                        <LabelGroup numLabels={3}>
-                            <Tooltip content={"Ready Replicas / Replicas"} 
position={"left"}>
-                                <Label className="table-label" icon={ok ? 
<UpIcon/> : <DownIcon/>}
-                                       color={ok ? "green" : 
"grey"}>{"Replicas: " + readyReplicas + " / " + 
deploymentStatus.replicas}</Label>
-                            </Tooltip>
-                            {deploymentStatus.unavailableReplicas > 0 &&
-                                <Tooltip content={"Unavailable replicas"} 
position={"right"}>
-                                    <Label icon={<DownIcon/>} 
color={"red"}>{deploymentStatus.unavailableReplicas}</Label>
-                                </Tooltip>
-                            }
-                        </LabelGroup>
-                    </FlexItem>
-                </Flex>
-            )
-        } else {
-            return (
-                <Tooltip content={"No information"} position={"right"}>
-                    <Label color={"grey"}>???</Label>
-                </Tooltip>
-            );
-        }
-    }
-
-    function getEmptyState() {
-        return (
-            <Tr>
-                <Td colSpan={8}>
-                    <Bullseye>
-                        <EmptyState variant={EmptyStateVariant.sm}>
-                            <EmptyStateHeader titleText="No results found" 
icon={<EmptyStateIcon icon={SearchIcon}/>} headingLevel="h2" />
-                        </EmptyState>
-                    </Bullseye>
-                </Td>
-            </Tr>
-        )
-    }
-
-    function getKubernetesTable() {
-        const deps = Array.from(new Set(deployments
-            .filter(d => d?.projectId?.toLowerCase().includes(filter))
-            .map(d => d.projectId)));
-        return (
-            <Table aria-label="Projects" variant={TableVariant.compact}>
-                <Thead>
-                    <Tr>
-                        <Th key='type'>Type</Th>
-                        <Th key='name'>Deployment</Th>
-                        <Th key='description'>Project/Description</Th>
-                        <Th key='environment'>Environment</Th>
-                        <Th key='namespace'>Namespace</Th>
-                        <Th key='replicas'>Replicas</Th>
-                        <Th key='services'>Services</Th>
-                        <Th key='camel'>Camel Health</Th>
-                        {/*<Th key='action'></Th>*/}
-                    </Tr>
-                </Thead>
-                <Tbody>
-                    {deps.map(deployment => (
-                        <Tr key={deployment}>
-                            <Td style={{verticalAlign: "middle"}}>
-                                {isKaravan(deployment) ? Icon("icon") : 
CamelUi.getIconFromSource(camelIcon)}
-                            </Td>
-                            <Td style={{verticalAlign: "middle"}}>
-                                <Button style={{padding: '6px'}} 
variant={"link"}>{deployment}</Button>
-                            </Td>
-                            <Td style={{verticalAlign: "middle"}}>
-                                <HelperText>
-                                    
<HelperTextItem>{getProject(deployment)?.name || ""}</HelperTextItem>
-                                    
<HelperTextItem>{getProject(deployment)?.description || "Camel 
project"}</HelperTextItem>
-                                </HelperText>
-                            </Td>
-                            <Td>
-                                <Flex direction={{default: "column"}}>
-                                    
{getDeploymentEnvironments(deployment).map(value => (
-                                        <FlexItem className="badge-flex-item" 
key={value[0]}><Badge className="badge"
-                                                                               
                     isRead={!value[1]}>{value[0]}</Badge></FlexItem>
-                                    ))}
-                                </Flex>
-                            </Td>
-                            <Td>
-                                <Flex direction={{default: "column"}}>
-                                    
{getServiceByEnvironments(deployment).map(value => (
-                                        <FlexItem className="badge-flex-item" 
key={value[0]}>
-                                            <Label variant={"outline"}>
-                                                {value[1] ? (value[1]?.port + 
" -> " + value[1]?.targetPort) : "???"}
-                                            </Label>
-                                        </FlexItem>
-                                    ))}
-                                </Flex>
-                            </Td>
-                            <Td modifier={"fitContent"}>
-                                <Flex direction={{default: "column"}}>
-                                    
{getCamelStatusByEnvironments(deployment).map(value => {
-                                        // const color = value[1] ? 
(value[1].consumerStatus === "UP" ? "green" : "red") : "grey";
-                                        // let icon = undefined;
-                                        // if (value[1]?.consumerStatus === 
"UP") icon = <UpIcon/>
-                                        // if (value[1]?.consumerStatus === 
"DOWN") icon = <DownIcon/>
-                                        // const text = value[1] && 
value[1]?.contextVersion ? value[1]?.contextVersion : "???";
-                                        return <FlexItem key={value[0]}>
-                                            {/*<LabelGroup numLabels={4} 
className="camel-label-group">*/}
-                                            {/*    <Label color={color} 
className="table-label" icon={icon}>{text}</Label>*/}
-                                            {/*</LabelGroup>*/}
-                                        </FlexItem>
-                                    })}
-                                </Flex>
-                            </Td>
-                        </Tr>
-                    ))}
-                    {deps.length === 0 && getEmptyState()}
-                </Tbody>
-            </Table>
-        )
-    }
-
-    function getDockerTable() {
-        const conts = containers
-            .filter(c => ['devmode', 'project'].includes(c.type))
-            .filter(d => d.containerName.toLowerCase().includes(filter));
-        return (
-            <Table aria-label="Projects" variant={TableVariant.compact}>
-                <Thead>
-                    <Tr>
-                        <Th key='container' width={20}>Container</Th>
-                        <Th key='description' width={30} isStickyColumn 
>Project Description</Th>
-                        {/*{config.environments.map((e, i) =>*/}
-                        {['dev', 'test', 'prod'].map((e, i) =>
-                            <Th key={e} textCenter hasLeftBorder width={10} 
>{e}</Th>
-                        )}
-                    </Tr>
-                </Thead>
-                <Tbody>
-                    {conts.map(container => (
-                        <Tr key={container.containerName}>
-                            <Td style={{verticalAlign: "middle"}}>
-                                <Label color={container.state === 'running' ? 
"green" : 'grey'}>
-                                    {container.containerName}
-                                    <Badge isRead>{container.type}</Badge>
-                                </Label>
-                            </Td>
-                            <Td isStickyColumn style={{verticalAlign: 
"middle"}}>
-                                <HelperText>
-                                    
<HelperTextItem>{getProject(container.containerName)?.description || "Camel 
project"}</HelperTextItem>
-                                </HelperText>
-                            </Td>
-                            {/*<Td>*/}
-                            {/*    <Flex direction={{default: "column"}}>*/}
-                            {/*        {container.ports.map(port => (*/}
-                            {/*            <FlexItem 
className="badge-flex-item" key={port}>*/}
-                            {/*                <Badge className="badge" 
isRead={true}>{port}</Badge>*/}
-                            {/*            </FlexItem>*/}
-                            {/*        ))}*/}
-                            {/*    </Flex>*/}
-                            {/*</Td>*/}
-                            <Td hasLeftBorder>
-                                <Flex direction={{default: "column"}} 
style={{verticalAlign: "middle"}}>
-                                    
{getContainerByEnvironments(container.containerName).map(value => (
-                                        <FlexItem className="badge-flex-item" 
key={value[0]}>
-                                            <Label color={"green"}>
-                                                {value[1] ? value[1]?.env : ""}
-                                                <Label color={"green"}>
-                                                    {value[1] ? value[1]?.env 
: ""}
-                                                </Label>
-                                            </Label>
-                                        </FlexItem>
-                                    ))}
-                                </Flex>
-                            </Td>
-                            {/*<Td modifier={"fitContent"}>*/}
-                            {/*    <Flex direction={{default: "column"}}>*/}
-                            {/*        
{getCamelStatusByEnvironments(container.containerName).map(value => {*/}
-                            {/*            // const color = value[1] ? 
(value[1].consumerStatus === "UP" ? "green" : "red") : "grey";*/}
-                            {/*            // let icon = undefined;*/}
-                            {/*            // if (value[1]?.consumerStatus === 
"UP") icon = <UpIcon/>*/}
-                            {/*            // if (value[1]?.consumerStatus === 
"DOWN") icon = <DownIcon/>*/}
-                            {/*            // const text = value[1] && 
value[1]?.contextVersion ? value[1]?.contextVersion : "???";*/}
-                            {/*            return <FlexItem key={value[0]}>*/}
-                            {/*                /!*<LabelGroup numLabels={4} 
className="camel-label-group">*!/*/}
-                            {/*                /!*    <Label color={color} 
className="table-label" icon={icon}>{text}</Label>*!/*/}
-                            {/*                /!*</LabelGroup>*!/*/}
-                            {/*            </FlexItem>*/}
-                            {/*        })}*/}
-                            {/*    </Flex>*/}
-                            {/*</Td>*/}
-                        </Tr>
-                    ))}
-                    {conts.length === 0 && getEmptyState()}
-                </Tbody>
-            </Table>
-        )
-    }
-
-    const isKubernetes = config.infrastructure === 'kubernetes';
-    return (
-        <PageSection className="kamelet-section dashboard-page" 
padding={{default: 'noPadding'}}>
-            <PageSection className="tools-section" padding={{default: 
'noPadding'}}>
-                <MainToolbar title={title()} tools={tools()}/>
-            </PageSection>
-            <PageSection isFilled className="kamelets-page">
-                {isKubernetes ? getKubernetesTable() : getDockerTable()}
-            </PageSection>
-        </PageSection>
-    )
-
-}
\ No newline at end of file

Reply via email to