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 72b6438861e42b70426f06c0f51d48e8567dcaec
Author: Marat Gubaidullin <marat.gubaidul...@gmail.com>
AuthorDate: Sun Jun 25 11:21:11 2023 -0400

    Redesign of folder stucture of code #809
---
 karavan-app/src/main/webui/src/Main.tsx            |  6 +--
 karavan-app/src/main/webui/src/MainToolbar.tsx     | 51 -------------------
 karavan-app/src/main/webui/src/api/KaravanApi.tsx  |  2 +-
 .../webui/src/{projects => api}/ProjectEventBus.ts |  0
 .../webui/src/{projects => api}/ProjectModels.ts   |  0
 .../ProjectLogic.ts => api/ProjectService.ts}      | 12 ++---
 .../webui/src/{projects => api}/ProjectStore.ts    |  0
 .../src/main/webui/src/common/MainToolbar.tsx      | 27 ++++++++++
 .../main/webui/src/config/ConfigurationPage.tsx    | 14 +----
 .../src/main/webui/src/dashboard/DashboardPage.tsx |  4 +-
 .../modal => project}/CreateFileModal.tsx          | 12 ++---
 .../modal => project}/DeleteFileModal.tsx          |  8 +--
 .../webui/src/{projects => project}/ProjectLog.tsx |  4 +-
 .../src/{projects => project}/ProjectPage.tsx      | 33 ++++++------
 .../src/{projects => project}/ProjectStatus.tsx    |  4 +-
 .../toolbar => project}/ProjectToolbar.tsx         | 59 +++++++++++++++++++---
 .../src/{projects => project}/PropertiesEditor.tsx |  2 +-
 .../src/{projects => project}/PropertiesTable.tsx  |  0
 .../src/{projects => project}/RunnerToolbar.tsx    | 24 ++-------
 .../tabs => project/dashboard}/DashboardTab.tsx    |  6 +--
 .../dashboard}/RunnerInfoContext.tsx               |  0
 .../dashboard}/RunnerInfoMemory.tsx                |  3 +-
 .../tabs => project/dashboard}/RunnerInfoPod.tsx   |  4 +-
 .../files/FilesTab.tsx}                            | 20 ++++++--
 .../{projects => project/files}/UploadModal.tsx    |  4 +-
 .../pipeline}/ProjectPipelineTab.tsx               |  2 +-
 .../tabs => project/trace}/RunnerInfoTrace.tsx     |  4 +-
 .../trace}/RunnerInfoTraceModal.tsx                |  0
 .../tabs => project/trace}/RunnerInfoTraceNode.tsx |  0
 .../{projects/tabs => project/trace}/TraceTab.tsx  | 10 ++--
 .../projects/{modal => }/CreateProjectModal.tsx    | 17 +++----
 .../projects/{modal => }/DeleteProjectModal.tsx    |  8 +--
 .../src/main/webui/src/projects/ProjectsPage.tsx   | 17 +++----
 .../main/webui/src/projects/ProjectsTableRow.tsx   | 38 ++------------
 34 files changed, 182 insertions(+), 213 deletions(-)

diff --git a/karavan-app/src/main/webui/src/Main.tsx 
b/karavan-app/src/main/webui/src/Main.tsx
index 759e77d1..6b64d6e1 100644
--- a/karavan-app/src/main/webui/src/Main.tsx
+++ b/karavan-app/src/main/webui/src/Main.tsx
@@ -20,8 +20,6 @@ import Icon from "./Logo";
 import {ComponentsPage} from "./components/ComponentsPage";
 import {EipPage} from "./eip/EipPage";
 import {ProjectsPage} from "./projects/ProjectsPage";
-import {Project} from "./projects/ProjectModels";
-import {ProjectPage} from "./projects/ProjectPage";
 import UserIcon from "@patternfly/react-icons/dist/js/icons/user-icon";
 import ProjectsIcon from 
"@patternfly/react-icons/dist/js/icons/repository-icon";
 import KameletsIcon from "@patternfly/react-icons/dist/js/icons/registry-icon";
@@ -31,7 +29,9 @@ import ComponentsIcon from 
"@patternfly/react-icons/dist/js/icons/module-icon";
 import {MainLogin} from "./MainLogin";
 import {DashboardPage} from "./dashboard/DashboardPage";
 import {Subscription} from "rxjs";
-import {ProjectEventBus} from "./projects/ProjectEventBus";
+import {ProjectEventBus} from "./api/ProjectEventBus";
+import {Project} from "./api/ProjectModels";
+import {ProjectPage} from "./project/ProjectPage";
 
 class ToastMessage {
     id: string = ''
diff --git a/karavan-app/src/main/webui/src/MainToolbar.tsx 
b/karavan-app/src/main/webui/src/MainToolbar.tsx
deleted file mode 100644
index c312ae8c..00000000
--- a/karavan-app/src/main/webui/src/MainToolbar.tsx
+++ /dev/null
@@ -1,51 +0,0 @@
-import React, {useEffect, useState} from 'react';
-import {
-    PageSectionVariants, Flex, PageSection, FlexItem
-} from '@patternfly/react-core';
-import './designer/karavan.css';
-import {ProjectEventBus} from "./projects/ProjectEventBus";
-import {Project, ProjectFile} from "./projects/ProjectModels";
-
-interface Props {
-    title: React.ReactNode;
-    tools: React.ReactNode;
-    file?: ProjectFile;
-}
-
-export const MainToolbar = (props: Props) => {
-    const {title, tools, file} = props;
-
-    const [project, setProject] = useState<Project | undefined>(undefined);
-    const [mode, setMode] = useState<"design" | "code">("design");
-
-    useEffect(() => {
-        const sub1 = ProjectEventBus.onSelectProject()?.subscribe((result) => 
setProject(result));
-        const sub2 = ProjectEventBus.onSetMode()?.subscribe((result) => 
setMode(result));
-        return () => {
-            sub1.unsubscribe();
-            sub2.unsubscribe();
-        };
-    });
-
-    function isKameletsProject(): boolean {
-        return project?.projectId === 'kamelets';
-    }
-
-    function isTemplatesProject(): boolean {
-        return project?.projectId === 'templates';
-    }
-
-    return (
-        <PageSection className="tools-section" 
variant={PageSectionVariants.light}>
-            <Flex className="tools" justifyContent={{default: 
'justifyContentSpaceBetween'}}
-                  alignItems={{default: 'alignItemsCenter'}}>
-                <FlexItem>
-                    {title}
-                </FlexItem>
-                <FlexItem>
-                    {tools}
-                </FlexItem>
-            </Flex>
-        </PageSection>
-    );
-}
diff --git a/karavan-app/src/main/webui/src/api/KaravanApi.tsx 
b/karavan-app/src/main/webui/src/api/KaravanApi.tsx
index 7142c571..06811cb6 100644
--- a/karavan-app/src/main/webui/src/api/KaravanApi.tsx
+++ b/karavan-app/src/main/webui/src/api/KaravanApi.tsx
@@ -6,7 +6,7 @@ import {
     PodStatus,
     Project,
     ProjectFile, ServiceStatus
-} from "../projects/ProjectModels";
+} from "./ProjectModels";
 import {Buffer} from 'buffer';
 import {SsoApi} from "./SsoApi";
 
diff --git a/karavan-app/src/main/webui/src/projects/ProjectEventBus.ts 
b/karavan-app/src/main/webui/src/api/ProjectEventBus.ts
similarity index 100%
rename from karavan-app/src/main/webui/src/projects/ProjectEventBus.ts
rename to karavan-app/src/main/webui/src/api/ProjectEventBus.ts
diff --git a/karavan-app/src/main/webui/src/projects/ProjectModels.ts 
b/karavan-app/src/main/webui/src/api/ProjectModels.ts
similarity index 100%
rename from karavan-app/src/main/webui/src/projects/ProjectModels.ts
rename to karavan-app/src/main/webui/src/api/ProjectModels.ts
diff --git a/karavan-app/src/main/webui/src/projects/ProjectLogic.ts 
b/karavan-app/src/main/webui/src/api/ProjectService.ts
similarity index 92%
rename from karavan-app/src/main/webui/src/projects/ProjectLogic.ts
rename to karavan-app/src/main/webui/src/api/ProjectService.ts
index 0b924478..e346c5bd 100644
--- a/karavan-app/src/main/webui/src/projects/ProjectLogic.ts
+++ b/karavan-app/src/main/webui/src/api/ProjectService.ts
@@ -1,10 +1,10 @@
-import {KaravanApi} from "../api/KaravanApi";
+import {KaravanApi} from "./KaravanApi";
 import {DeploymentStatus, Project, ProjectFile} from "./ProjectModels";
 import {TemplateApi} from "karavan-core/lib/api/TemplateApi";
 import {KubernetesAPI} from "../designer/utils/KubernetesAPI";
 import {useDeploymentStatusesStore, useFilesStore, useProjectsStore, 
useProjectStore} from "./ProjectStore";
 
-export class ProjectLogic {
+export class ProjectService {
 
     public static refreshProjects() {
         KaravanApi.getProjects((projects: Project[]) => {
@@ -22,7 +22,7 @@ export class ProjectLogic {
         KaravanApi.deleteProject(project, res => {
             if (res.status === 204) {
                 // this.props.toast?.call(this, "Success", "Project deleted", 
"success");
-                ProjectLogic.refreshProjectData();
+                ProjectService.refreshProjectData();
             } else {
                 // this.props.toast?.call(this, "Error", res.statusText, 
"danger");
             }
@@ -33,7 +33,7 @@ export class ProjectLogic {
         KaravanApi.postProject(project, res => {
             console.log(res.status)
             if (res.status === 200 || res.status === 201) {
-                ProjectLogic.refreshProjectData();
+                ProjectService.refreshProjectData();
                 // this.props.toast?.call(this, "Success", "Project created", 
"success");
             } else {
                 // this.props.toast?.call(this, "Error", res.status + ", " + 
res.statusText, "danger");
@@ -45,7 +45,7 @@ export class ProjectLogic {
         KaravanApi.postProjectFile(file, res => {
             if (res.status === 200) {
                 // console.log(res) //TODO show notification
-                ProjectLogic.refreshProjectData();
+                ProjectService.refreshProjectData();
             } else {
                 // console.log(res) //TODO show notification
             }
@@ -55,7 +55,7 @@ export class ProjectLogic {
     public static deleteFile(file: ProjectFile) {
         KaravanApi.deleteProjectFile(file, res => {
             if (res.status === 204) {
-                ProjectLogic.refreshProjectData();
+                ProjectService.refreshProjectData();
             } else {
             }
         });
diff --git a/karavan-app/src/main/webui/src/projects/ProjectStore.ts 
b/karavan-app/src/main/webui/src/api/ProjectStore.ts
similarity index 100%
rename from karavan-app/src/main/webui/src/projects/ProjectStore.ts
rename to karavan-app/src/main/webui/src/api/ProjectStore.ts
diff --git a/karavan-app/src/main/webui/src/common/MainToolbar.tsx 
b/karavan-app/src/main/webui/src/common/MainToolbar.tsx
new file mode 100644
index 00000000..ed344840
--- /dev/null
+++ b/karavan-app/src/main/webui/src/common/MainToolbar.tsx
@@ -0,0 +1,27 @@
+import React from 'react';
+import {
+    PageSectionVariants, Flex, PageSection, FlexItem
+} from '@patternfly/react-core';
+import '../designer/karavan.css';
+
+interface Props {
+    title: React.ReactNode;
+    tools: React.ReactNode;
+}
+
+export const MainToolbar = (props: Props) => {
+
+    return (
+        <PageSection className="tools-section" 
variant={PageSectionVariants.light}>
+            <Flex className="tools" justifyContent={{default: 
'justifyContentSpaceBetween'}}
+                  alignItems={{default: 'alignItemsCenter'}}>
+                <FlexItem>
+                    {props.title}
+                </FlexItem>
+                <FlexItem>
+                    {props.tools}
+                </FlexItem>
+            </Flex>
+        </PageSection>
+    );
+}
diff --git a/karavan-app/src/main/webui/src/config/ConfigurationPage.tsx 
b/karavan-app/src/main/webui/src/config/ConfigurationPage.tsx
index c9efa9ff..0e796725 100644
--- a/karavan-app/src/main/webui/src/config/ConfigurationPage.tsx
+++ b/karavan-app/src/main/webui/src/config/ConfigurationPage.tsx
@@ -1,19 +1,9 @@
 import React from 'react';
-import {
-    Badge, Bullseye, Button, EmptyState, EmptyStateIcon, EmptyStateVariant, 
Flex, FlexItem,
-    Gallery, OverflowMenu, OverflowMenuContent, OverflowMenuGroup, 
OverflowMenuItem,
-    PageSection, Tab, Tabs, TabTitleText, Text, TextContent, TextInput, Title, 
Toolbar, ToolbarContent, ToolbarItem, Tooltip
+import {Button, PageSection, Tab, Tabs, TabTitleText, Text, TextContent, 
Toolbar, ToolbarContent, ToolbarItem
 } from '@patternfly/react-core';
 import '../designer/karavan.css';
-import {MainToolbar} from "../MainToolbar";
-import {TableComposable, Tbody, Td, Th, Thead, Tr} from 
"@patternfly/react-table";
-import CopyIcon from "@patternfly/react-icons/dist/esm/icons/copy-icon";
-import DeleteIcon from "@patternfly/react-icons/dist/js/icons/times-icon";
-import SearchIcon from "@patternfly/react-icons/dist/esm/icons/search-icon";
+import {MainToolbar} from "../common/MainToolbar";
 import RefreshIcon from "@patternfly/react-icons/dist/esm/icons/sync-alt-icon";
-import PlusIcon from "@patternfly/react-icons/dist/esm/icons/plus-icon";
-import {KaravanApi} from "../api/KaravanApi";
-import {DeploymentStatus, Project} from "../projects/ProjectModels";
 
 interface Props {
 }
diff --git a/karavan-app/src/main/webui/src/dashboard/DashboardPage.tsx 
b/karavan-app/src/main/webui/src/dashboard/DashboardPage.tsx
index 2538efe6..8bc9be07 100644
--- a/karavan-app/src/main/webui/src/dashboard/DashboardPage.tsx
+++ b/karavan-app/src/main/webui/src/dashboard/DashboardPage.tsx
@@ -13,8 +13,7 @@ import {
     ToolbarItem, Tooltip
 } from '@patternfly/react-core';
 import '../designer/karavan.css';
-import {MainToolbar} from "../MainToolbar";
-import {CamelStatus, DeploymentStatus, Project, ServiceStatus} from 
"../projects/ProjectModels";
+import {CamelStatus, DeploymentStatus, Project, ServiceStatus} from 
"../api/ProjectModels";
 import {TableComposable, TableVariant, Tbody, Td, Th, Thead, Tr} from 
"@patternfly/react-table";
 import {camelIcon, CamelUi} from "../designer/utils/CamelUi";
 import {KaravanApi} from "../api/KaravanApi";
@@ -23,6 +22,7 @@ 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 RefreshIcon from "@patternfly/react-icons/dist/esm/icons/sync-alt-icon";
 import SearchIcon from "@patternfly/react-icons/dist/esm/icons/search-icon";
+import {MainToolbar} from "../common/MainToolbar";
 
 interface Props {
     config: any,
diff --git a/karavan-app/src/main/webui/src/projects/modal/CreateFileModal.tsx 
b/karavan-app/src/main/webui/src/project/CreateFileModal.tsx
similarity index 92%
rename from karavan-app/src/main/webui/src/projects/modal/CreateFileModal.tsx
rename to karavan-app/src/main/webui/src/project/CreateFileModal.tsx
index fa29401c..79887096 100644
--- a/karavan-app/src/main/webui/src/projects/modal/CreateFileModal.tsx
+++ b/karavan-app/src/main/webui/src/project/CreateFileModal.tsx
@@ -7,13 +7,13 @@ import {
     Form,
     ToggleGroupItem, ToggleGroup, FormHelperText, HelperText, HelperTextItem, 
TextInput
 } from '@patternfly/react-core';
-import '../../designer/karavan.css';
-import {ProjectFile, ProjectFileTypes} from "../ProjectModels";
-import {CamelUi} from "../../designer/utils/CamelUi";
+import '../designer/karavan.css';
 import {Integration} from "karavan-core/lib/model/IntegrationDefinition";
 import {CamelDefinitionYaml} from "karavan-core/lib/api/CamelDefinitionYaml";
-import {useFileStore, useProjectStore} from "../ProjectStore";
-import {ProjectLogic} from "../ProjectLogic";
+import {useFileStore, useProjectStore} from "../api/ProjectStore";
+import {ProjectFile, ProjectFileTypes} from "../api/ProjectModels";
+import {CamelUi} from "../designer/utils/CamelUi";
+import {ProjectService} from "../api/ProjectService";
 
 interface Props {
     types: string[]
@@ -44,7 +44,7 @@ export const CreateFileModal = (props: Props) => {
             : '';
         if (filename && extension) {
             const file = new ProjectFile(filename + '.' + extension, 
project.projectId, code, Date.now());
-            ProjectLogic.createFile(file);
+            ProjectService.createFile(file);
             useFileStore.setState({operation: "none"});
             cleanValues();
         }
diff --git a/karavan-app/src/main/webui/src/projects/modal/DeleteFileModal.tsx 
b/karavan-app/src/main/webui/src/project/DeleteFileModal.tsx
similarity index 84%
rename from karavan-app/src/main/webui/src/projects/modal/DeleteFileModal.tsx
rename to karavan-app/src/main/webui/src/project/DeleteFileModal.tsx
index 85dc7acf..4ed433ea 100644
--- a/karavan-app/src/main/webui/src/projects/modal/DeleteFileModal.tsx
+++ b/karavan-app/src/main/webui/src/project/DeleteFileModal.tsx
@@ -4,9 +4,9 @@ import {
     Modal,
     ModalVariant,
 } from '@patternfly/react-core';
-import '../../designer/karavan.css';
-import {useFileStore, useProjectStore} from "../ProjectStore";
-import {ProjectLogic} from "../ProjectLogic";
+import '../designer/karavan.css';
+import {useFileStore} from "../api/ProjectStore";
+import {ProjectService} from "../api/ProjectService";
 
 export const DeleteFileModal = () => {
 
@@ -17,7 +17,7 @@ export const DeleteFileModal = () => {
     }
 
     function confirmAndCloseModal () {
-        if (file) ProjectLogic.deleteFile(file);
+        if (file) ProjectService.deleteFile(file);
         useFileStore.setState({operation: "none"});
     }
 
diff --git a/karavan-app/src/main/webui/src/projects/ProjectLog.tsx 
b/karavan-app/src/main/webui/src/project/ProjectLog.tsx
similarity index 96%
rename from karavan-app/src/main/webui/src/projects/ProjectLog.tsx
rename to karavan-app/src/main/webui/src/project/ProjectLog.tsx
index dea7aaad..ba674aaa 100644
--- a/karavan-app/src/main/webui/src/projects/ProjectLog.tsx
+++ b/karavan-app/src/main/webui/src/project/ProjectLog.tsx
@@ -1,5 +1,5 @@
 import React from 'react';
-import {Button, Checkbox, Label, PageSection, Text, Tooltip, TooltipPosition} 
from '@patternfly/react-core';
+import {Button, Checkbox, Label, PageSection, Tooltip, TooltipPosition} from 
'@patternfly/react-core';
 import '../designer/karavan.css';
 import CloseIcon from '@patternfly/react-icons/dist/esm/icons/times-icon';
 import ExpandIcon from '@patternfly/react-icons/dist/esm/icons/expand-icon';
@@ -8,7 +8,7 @@ import CollapseIcon from 
'@patternfly/react-icons/dist/esm/icons/compress-icon';
 import CleanIcon from '@patternfly/react-icons/dist/esm/icons/trash-alt-icon';
 import {LogViewer} from '@patternfly/react-log-viewer';
 import {Subscription} from "rxjs";
-import {ProjectEventBus, ShowLogCommand} from "./ProjectEventBus";
+import {ProjectEventBus, ShowLogCommand} from "../api/ProjectEventBus";
 
 const INITIAL_LOG_HEIGHT = "50%";
 
diff --git a/karavan-app/src/main/webui/src/projects/ProjectPage.tsx 
b/karavan-app/src/main/webui/src/project/ProjectPage.tsx
similarity index 93%
rename from karavan-app/src/main/webui/src/projects/ProjectPage.tsx
rename to karavan-app/src/main/webui/src/project/ProjectPage.tsx
index 77a0ce85..34c6c429 100644
--- a/karavan-app/src/main/webui/src/projects/ProjectPage.tsx
+++ b/karavan-app/src/main/webui/src/project/ProjectPage.tsx
@@ -3,39 +3,36 @@ import {
     Badge,
     Breadcrumb,
     BreadcrumbItem,
-    Button,
     PageSection,
     Text,
     TextContent,
-    ModalVariant,
-    Modal,
     Flex,
     FlexItem,
     CodeBlockCode,
     CodeBlock, Skeleton, Tabs, Tab
 } from '@patternfly/react-core';
 import '../designer/karavan.css';
-import {MainToolbar} from "../MainToolbar";
 import {KaravanApi} from "../api/KaravanApi";
-import {getProjectFileType, Project, ProjectFile, ProjectFileTypes} from 
"./ProjectModels";
 import {KaravanDesigner} from "../designer/KaravanDesigner";
 import FileSaver from "file-saver";
 import Editor from "@monaco-editor/react";
-import {CreateFileModal} from "./modal/CreateFileModal";
 import {PropertiesEditor} from "./PropertiesEditor";
 import {ProjectModel, ProjectProperty} from 
"karavan-core/lib/model/ProjectModel";
 import {ProjectModelApi} from "karavan-core/lib/api/ProjectModelApi";
-import {ProjectPipelineTab} from "./tabs/ProjectPipelineTab";
 import {CamelDefinitionYaml} from "karavan-core/lib/api/CamelDefinitionYaml";
-import {ProjectToolbar} from "./toolbar/ProjectToolbar";
-import {ProjectFilesTab} from "./tabs/ProjectFilesTab";
+import {ProjectToolbar} from "./ProjectToolbar";
+import {FilesTab} from "./files/FilesTab";
 import {EventBus} from "../designer/utils/EventBus";
 import {ProjectLog} from "./ProjectLog";
-import {ProjectLogic} from "./ProjectLogic";
-import {useProjectStore} from "./ProjectStore";
-import {DeleteFileModal} from "./modal/DeleteFileModal";
-import {DashboardTab} from "./tabs/DashboardTab";
-import {TraceTab} from "./tabs/TraceTab";
+import {getProjectFileType, ProjectFile, ProjectFileTypes} from 
"../api/ProjectModels";
+import {useProjectStore} from "../api/ProjectStore";
+import {ProjectService} from "../api/ProjectService";
+import {DashboardTab} from "./dashboard/DashboardTab";
+import {TraceTab} from "./trace/TraceTab";
+import {ProjectPipelineTab} from "./pipeline/ProjectPipelineTab";
+import {MainToolbar} from "../common/MainToolbar";
+import {CreateFileModal} from "./CreateFileModal";
+import {DeleteFileModal} from "./DeleteFileModal";
 
 interface Props {
     config: any,
@@ -75,7 +72,7 @@ export const ProjectPage = (props: Props) => {
     }
 
     function onRefresh () {
-        ProjectLogic.refreshProjectData(environment);
+        ProjectService.refreshProjectData(environment);
     }
 
     function post (file: ProjectFile)  {
@@ -339,10 +336,10 @@ export const ProjectPage = (props: Props) => {
         const buildIn = isBuildIn();
         return (
             <FlexItem>
-                {buildIn && tab === 'files' && <ProjectFilesTab/>}
+                {buildIn && tab === 'files' && <FilesTab/>}
                 {!buildIn &&
                     <>
-                        {tab === 'files' && <ProjectFilesTab/>}
+                        {tab === 'files' && <FilesTab/>}
                         {tab === 'dashboard' && project && <DashboardTab 
config={props.config}/>}
                         {tab === 'trace' && project && <TraceTab 
config={props.config}/>}
                         {tab === 'pipeline' && <ProjectPipelineTab 
project={project}
@@ -377,7 +374,7 @@ export const ProjectPage = (props: Props) => {
     return (
         <PageSection key={key} className="kamelet-section project-page" 
padding={{default: 'noPadding'}}>
             <PageSection className="tools-section" padding={{default: 
'noPadding'}}>
-                <MainToolbar title={title()} tools={tools()} file={file}/>
+                <MainToolbar title={title()} tools={tools()}/>
             </PageSection>
             {file === undefined && getProjectPanel()}
             {/*{file !== undefined && getFilePanel()}*/}
diff --git a/karavan-app/src/main/webui/src/projects/ProjectStatus.tsx 
b/karavan-app/src/main/webui/src/project/ProjectStatus.tsx
similarity index 99%
rename from karavan-app/src/main/webui/src/projects/ProjectStatus.tsx
rename to karavan-app/src/main/webui/src/project/ProjectStatus.tsx
index 9974e4db..3e57ebe9 100644
--- a/karavan-app/src/main/webui/src/projects/ProjectStatus.tsx
+++ b/karavan-app/src/main/webui/src/project/ProjectStatus.tsx
@@ -8,14 +8,14 @@ import {
 } from '@patternfly/react-core';
 import '../designer/karavan.css';
 import {KaravanApi} from "../api/KaravanApi";
-import {DeploymentStatus, Project, PipelineStatus, CamelStatus, PodStatus} 
from "./ProjectModels";
 import BuildIcon from "@patternfly/react-icons/dist/esm/icons/build-icon";
 import RolloutIcon from 
"@patternfly/react-icons/dist/esm/icons/process-automation-icon";
 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 ClockIcon from "@patternfly/react-icons/dist/esm/icons/clock-icon";
 import DeleteIcon from 
"@patternfly/react-icons/dist/esm/icons/times-circle-icon";
-import {ProjectEventBus} from "./ProjectEventBus";
+import {CamelStatus, DeploymentStatus, PipelineStatus, PodStatus, Project} 
from "../api/ProjectModels";
+import {ProjectEventBus} from "../api/ProjectEventBus";
 
 interface Props {
     project: Project,
diff --git a/karavan-app/src/main/webui/src/projects/toolbar/ProjectToolbar.tsx 
b/karavan-app/src/main/webui/src/project/ProjectToolbar.tsx
similarity index 85%
rename from karavan-app/src/main/webui/src/projects/toolbar/ProjectToolbar.tsx
rename to karavan-app/src/main/webui/src/project/ProjectToolbar.tsx
index 39cf4c84..1957f9d6 100644
--- a/karavan-app/src/main/webui/src/projects/toolbar/ProjectToolbar.tsx
+++ b/karavan-app/src/main/webui/src/project/ProjectToolbar.tsx
@@ -19,19 +19,19 @@ import {
     Tooltip,
     TooltipPosition
 } from '@patternfly/react-core';
-import '../../designer/karavan.css';
-import {Project, ProjectFile} from "../ProjectModels";
+import '../designer/karavan.css';
 import UploadIcon from "@patternfly/react-icons/dist/esm/icons/upload-icon";
 import DownloadIcon from 
"@patternfly/react-icons/dist/esm/icons/download-icon";
 import DownloadImageIcon from 
"@patternfly/react-icons/dist/esm/icons/image-icon";
 import PlusIcon from "@patternfly/react-icons/dist/esm/icons/plus-icon";
 import {CamelDefinitionYaml} from "karavan-core/lib/api/CamelDefinitionYaml";
 import PushIcon from "@patternfly/react-icons/dist/esm/icons/code-branch-icon";
-import {KaravanApi} from "../../api/KaravanApi";
+import {KaravanApi} from "../api/KaravanApi";
 import ReloadIcon from "@patternfly/react-icons/dist/esm/icons/bolt-icon";
-import {RunnerToolbar} from "../RunnerToolbar";
-import {ProjectEventBus} from "../ProjectEventBus";
-import {useFileStore, useProjectStore} from "../ProjectStore";
+import {RunnerToolbar} from "./RunnerToolbar";
+import {Project, ProjectFile} from "../api/ProjectModels";
+import {ProjectEventBus} from "../api/ProjectEventBus";
+import {useFileStore} from "../api/ProjectStore";
 
 interface Props {
     project: Project,
@@ -57,16 +57,63 @@ export const ProjectToolbar = (props: Props) => {
     const [commitMessageIsOpen, setCommitMessageIsOpen] = useState(false);
     const [commitMessage, setCommitMessage] = useState('');
     const [currentRunner, setCurrentRunner] = useState('');
+    const [podName, setPodName] = useState(props.project.projectId + 
'-runner');
+    const [isJbangRunning, setJbangIsRunning] = useState(false);
+    const [isRunning, setIsRunning] = useState(false);
+    const [isDeletingPod, setIsDeletingPod] = useState(false);
+    const [isReloadingPod, setIsReloadingPod] = useState(false);
 
     useEffect(() => {
         const sub1 = ProjectEventBus.onCurrentRunner()?.subscribe((result) => {
             setCurrentRunner(result || '');
+            setJbangIsRunning(result === props.project.name);
         });
         return () => {
             sub1.unsubscribe();
         };
     });
 
+    function jbangRun() {
+        setJbangIsRunning(true);
+        KaravanApi.runProject(props.project, res => {
+            if (res.status === 200 || res.status === 201) {
+                ProjectEventBus.setCurrentRunner(props.project.name);
+                setJbangIsRunning(false);
+                setPodName(res.data);
+                ProjectEventBus.showLog('container', res.data, 
props.config.environment)
+            } else {
+                // Todo notification
+                setJbangIsRunning(false);
+                ProjectEventBus.setCurrentRunner(undefined);
+            }
+        });
+    }
+
+    function reloadRunner() {
+        setIsReloadingPod(true);
+        KaravanApi.getRunnerReload(props.project.projectId, res => {
+            if (res.status === 200 || res.status === 201) {
+                setIsReloadingPod(false);
+            } else {
+                // Todo notification
+                setIsReloadingPod(false);
+            }
+        });
+    }
+
+    function deleteRunner() {
+        ProjectEventBus.setCurrentRunner(undefined);
+        setIsDeletingPod(true);
+        KaravanApi.deleteRunner(podName, false, res => {
+            if (res.status === 202) {
+                setIsDeletingPod(false);
+            } else {
+                // Todo notification
+                setIsDeletingPod(false);
+            }
+        });
+    }
+
     function push () {
         setIsPushing(true);
         setCommitMessageIsOpen(false);
diff --git a/karavan-app/src/main/webui/src/projects/PropertiesEditor.tsx 
b/karavan-app/src/main/webui/src/project/PropertiesEditor.tsx
similarity index 96%
rename from karavan-app/src/main/webui/src/projects/PropertiesEditor.tsx
rename to karavan-app/src/main/webui/src/project/PropertiesEditor.tsx
index 28cbcf40..bf2f4609 100644
--- a/karavan-app/src/main/webui/src/projects/PropertiesEditor.tsx
+++ b/karavan-app/src/main/webui/src/project/PropertiesEditor.tsx
@@ -3,10 +3,10 @@ import {
     PageSection,
 } from '@patternfly/react-core';
 import '../designer/karavan.css';
-import {ProjectFile} from "./ProjectModels";
 import {PropertiesTable} from "./PropertiesTable";
 import {ProjectModel} from "karavan-core/lib/model/ProjectModel";
 import {ProjectModelApi} from "karavan-core/lib/api/ProjectModelApi";
+import {ProjectFile} from "../api/ProjectModels";
 
 interface Props {
     file: ProjectFile,
diff --git a/karavan-app/src/main/webui/src/projects/PropertiesTable.tsx 
b/karavan-app/src/main/webui/src/project/PropertiesTable.tsx
similarity index 100%
rename from karavan-app/src/main/webui/src/projects/PropertiesTable.tsx
rename to karavan-app/src/main/webui/src/project/PropertiesTable.tsx
diff --git a/karavan-app/src/main/webui/src/projects/RunnerToolbar.tsx 
b/karavan-app/src/main/webui/src/project/RunnerToolbar.tsx
similarity index 83%
rename from karavan-app/src/main/webui/src/projects/RunnerToolbar.tsx
rename to karavan-app/src/main/webui/src/project/RunnerToolbar.tsx
index 9b124372..4b63bf2b 100644
--- a/karavan-app/src/main/webui/src/projects/RunnerToolbar.tsx
+++ b/karavan-app/src/main/webui/src/project/RunnerToolbar.tsx
@@ -1,17 +1,16 @@
 import React, {useEffect, useState} from 'react';
 import {
-    Button, Label, Switch, Tab, Tabs,
+    Button,
     Tooltip,
     TooltipPosition
 } from '@patternfly/react-core';
 import '../designer/karavan.css';
-import {Project} from "./ProjectModels";
 import RocketIcon from "@patternfly/react-icons/dist/esm/icons/rocket-icon";
 import ReloadIcon from "@patternfly/react-icons/dist/esm/icons/bolt-icon";
-import TraceIcon from "@patternfly/react-icons/dist/esm/icons/list-icon";
 import DeleteIcon from 
"@patternfly/react-icons/dist/esm/icons/times-circle-icon";
 import {KaravanApi} from "../api/KaravanApi";
-import {ProjectEventBus} from "./ProjectEventBus";
+import {Project} from "../api/ProjectModels";
+import {ProjectEventBus} from "../api/ProjectEventBus";
 
 
 interface Props {
@@ -28,7 +27,6 @@ export const RunnerToolbar = (props: Props) => {
     const [isRunning, setIsRunning] = useState(false);
     const [isDeletingPod, setIsDeletingPod] = useState(false);
     const [isReloadingPod, setIsReloadingPod] = useState(false);
-    const [isShowingTrace, setIsShowingTrace] = useState(false);
 
     useEffect(() => {
         const sub1 = ProjectEventBus.onCurrentRunner()?.subscribe((result) => {
@@ -80,11 +78,6 @@ export const RunnerToolbar = (props: Props) => {
         });
     }
 
-    function showTrace() {
-        ProjectEventBus.showTrace(props.project.projectId, !isShowingTrace);
-        setIsShowingTrace((prevState) => !prevState);
-    }
-
     return (
             <div className="runner-toolbar">
                 {!props.showConsole && !props.reloadOnly  &&
@@ -127,17 +120,6 @@ export const RunnerToolbar = (props: Props) => {
                             </Button>
                         </Tooltip>
                     </div>
-                    <div className="row">
-                        <Tooltip content={isShowingTrace ? "Show runtime" : 
"Show trace"} position={TooltipPosition.left}>
-                            <Button isSmall
-                                    variant={"secondary"}
-                                    className="project-button"
-                                    icon={ <TraceIcon/>}
-                                    onClick={() => showTrace()}>
-                                {isShowingTrace ? "Runtime" : "Trace"}
-                            </Button>
-                        </Tooltip>
-                    </div>
                     <Tooltip content="Stop runner" 
position={TooltipPosition.left}>
                         <Button isLoading={isDeletingPod ? true : undefined}
                                 isSmall
diff --git a/karavan-app/src/main/webui/src/projects/tabs/DashboardTab.tsx 
b/karavan-app/src/main/webui/src/project/dashboard/DashboardTab.tsx
similarity index 95%
rename from karavan-app/src/main/webui/src/projects/tabs/DashboardTab.tsx
rename to karavan-app/src/main/webui/src/project/dashboard/DashboardTab.tsx
index a31954f2..7eddf0c6 100644
--- a/karavan-app/src/main/webui/src/projects/tabs/DashboardTab.tsx
+++ b/karavan-app/src/main/webui/src/project/dashboard/DashboardTab.tsx
@@ -4,13 +4,13 @@ import {
     CardBody, Flex, FlexItem, Divider, PageSection
 } from '@patternfly/react-core';
 import '../../designer/karavan.css';
-import {PodStatus} from "../ProjectModels";
 import {RunnerInfoPod} from "./RunnerInfoPod";
 import {RunnerInfoContext} from "./RunnerInfoContext";
 import {RunnerInfoMemory} from "./RunnerInfoMemory";
 import {KaravanApi} from "../../api/KaravanApi";
-import {ProjectEventBus} from "../ProjectEventBus";
-import {useProjectStore} from "../ProjectStore";
+import {PodStatus} from "../../api/ProjectModels";
+import {useProjectStore} from "../../api/ProjectStore";
+import {ProjectEventBus} from "../../api/ProjectEventBus";
 
 export function isRunning(status: PodStatus): boolean {
     return status.phase === 'Running' && !status.terminating;
diff --git a/karavan-app/src/main/webui/src/projects/tabs/RunnerInfoContext.tsx 
b/karavan-app/src/main/webui/src/project/dashboard/RunnerInfoContext.tsx
similarity index 100%
rename from karavan-app/src/main/webui/src/projects/tabs/RunnerInfoContext.tsx
rename to karavan-app/src/main/webui/src/project/dashboard/RunnerInfoContext.tsx
diff --git a/karavan-app/src/main/webui/src/projects/tabs/RunnerInfoMemory.tsx 
b/karavan-app/src/main/webui/src/project/dashboard/RunnerInfoMemory.tsx
similarity index 98%
rename from karavan-app/src/main/webui/src/projects/tabs/RunnerInfoMemory.tsx
rename to karavan-app/src/main/webui/src/project/dashboard/RunnerInfoMemory.tsx
index f2eb27ce..15c37bd0 100644
--- a/karavan-app/src/main/webui/src/projects/tabs/RunnerInfoMemory.tsx
+++ b/karavan-app/src/main/webui/src/project/dashboard/RunnerInfoMemory.tsx
@@ -1,6 +1,5 @@
-import React, {useEffect, useRef, useState} from 'react';
+import React from 'react';
 import {
-    Button,
     DescriptionList,
     DescriptionListDescription,
     DescriptionListGroup,
diff --git a/karavan-app/src/main/webui/src/projects/tabs/RunnerInfoPod.tsx 
b/karavan-app/src/main/webui/src/project/dashboard/RunnerInfoPod.tsx
similarity index 97%
rename from karavan-app/src/main/webui/src/projects/tabs/RunnerInfoPod.tsx
rename to karavan-app/src/main/webui/src/project/dashboard/RunnerInfoPod.tsx
index 0c31d40c..c55ae090 100644
--- a/karavan-app/src/main/webui/src/projects/tabs/RunnerInfoPod.tsx
+++ b/karavan-app/src/main/webui/src/project/dashboard/RunnerInfoPod.tsx
@@ -9,10 +9,10 @@ import {
     Tooltip
 } from '@patternfly/react-core';
 import '../../designer/karavan.css';
-import {PodStatus} from "../ProjectModels";
-import {ProjectEventBus} from "../ProjectEventBus";
 import DownIcon from 
"@patternfly/react-icons/dist/esm/icons/error-circle-o-icon";
 import UpIcon from "@patternfly/react-icons/dist/esm/icons/check-circle-icon";
+import {PodStatus} from "../../api/ProjectModels";
+import {ProjectEventBus} from "../../api/ProjectEventBus";
 
 
 export function isRunning(status: PodStatus): boolean {
diff --git a/karavan-app/src/main/webui/src/projects/tabs/ProjectFilesTab.tsx 
b/karavan-app/src/main/webui/src/project/files/FilesTab.tsx
similarity index 85%
rename from karavan-app/src/main/webui/src/projects/tabs/ProjectFilesTab.tsx
rename to karavan-app/src/main/webui/src/project/files/FilesTab.tsx
index aafc1bc5..feb57616 100644
--- a/karavan-app/src/main/webui/src/projects/tabs/ProjectFilesTab.tsx
+++ b/karavan-app/src/main/webui/src/project/files/FilesTab.tsx
@@ -6,17 +6,17 @@ import {
     EmptyState,
     EmptyStateVariant,
     EmptyStateIcon,
-    Title, PageSection,
+    Title, PageSection, PanelHeader, Flex, FlexItem, Panel,
 } from '@patternfly/react-core';
 import '../../designer/karavan.css';
-import {getProjectFileType} from "../ProjectModels";
 import {TableComposable, Tbody, Td, Th, Thead, Tr} from 
"@patternfly/react-table";
 import DeleteIcon from "@patternfly/react-icons/dist/js/icons/times-icon";
 import SearchIcon from '@patternfly/react-icons/dist/esm/icons/search-icon';
-import {useFilesStore, useFileStore, useProjectStore} from "../ProjectStore";
+import {useFilesStore, useFileStore} from "../../api/ProjectStore";
+import {getProjectFileType} from "../../api/ProjectModels";
 
 
-export const ProjectFilesTab = () => {
+export const FilesTab = () => {
 
     const {files} = useFilesStore();
 
@@ -30,6 +30,18 @@ export const ProjectFilesTab = () => {
     }
     return (
         <PageSection className="project-bottom" padding={{default: "padding"}}>
+            <Panel>
+                <PanelHeader>
+                    <Flex direction={{default: "row"}} 
justifyContent={{default:"justifyContentFlexEnd"}}>
+                        <FlexItem>
+
+                        </FlexItem>
+                        <FlexItem>
+
+                        </FlexItem>
+                    </Flex>
+                </PanelHeader>
+            </Panel>
             <TableComposable aria-label="Files" variant={"compact"} 
className={"table"}>
                 <Thead>
                     <Tr>
diff --git a/karavan-app/src/main/webui/src/projects/UploadModal.tsx 
b/karavan-app/src/main/webui/src/project/files/UploadModal.tsx
similarity index 98%
rename from karavan-app/src/main/webui/src/projects/UploadModal.tsx
rename to karavan-app/src/main/webui/src/project/files/UploadModal.tsx
index fae83f8b..a2af3243 100644
--- a/karavan-app/src/main/webui/src/projects/UploadModal.tsx
+++ b/karavan-app/src/main/webui/src/project/files/UploadModal.tsx
@@ -4,8 +4,8 @@ import {
     Button, Modal, FormGroup, ModalVariant, Switch, Form, FileUpload, Radio
 } from '@patternfly/react-core';
 import '../designer/karavan.css';
-import {KaravanApi} from "../api/KaravanApi";
-import {ProjectFile} from "./ProjectModels";
+import {ProjectFile} from "../../api/ProjectModels";
+import {KaravanApi} from "../../api/KaravanApi";
 
 interface Props {
     projectId: string,
diff --git 
a/karavan-app/src/main/webui/src/projects/tabs/ProjectPipelineTab.tsx 
b/karavan-app/src/main/webui/src/project/pipeline/ProjectPipelineTab.tsx
similarity index 95%
rename from karavan-app/src/main/webui/src/projects/tabs/ProjectPipelineTab.tsx
rename to karavan-app/src/main/webui/src/project/pipeline/ProjectPipelineTab.tsx
index 7eb5ca69..54cd6f99 100644
--- a/karavan-app/src/main/webui/src/projects/tabs/ProjectPipelineTab.tsx
+++ b/karavan-app/src/main/webui/src/project/pipeline/ProjectPipelineTab.tsx
@@ -1,8 +1,8 @@
 import React from 'react';
 import '../../designer/karavan.css';
-import {Project} from "../ProjectModels";
 import {ProjectStatus} from "../ProjectStatus";
 import {PageSection} from "@patternfly/react-core";
+import {Project} from "../../api/ProjectModels";
 
 
 interface Props {
diff --git a/karavan-app/src/main/webui/src/projects/tabs/RunnerInfoTrace.tsx 
b/karavan-app/src/main/webui/src/project/trace/RunnerInfoTrace.tsx
similarity index 98%
rename from karavan-app/src/main/webui/src/projects/tabs/RunnerInfoTrace.tsx
rename to karavan-app/src/main/webui/src/project/trace/RunnerInfoTrace.tsx
index a168b89e..8f0f655d 100644
--- a/karavan-app/src/main/webui/src/projects/tabs/RunnerInfoTrace.tsx
+++ b/karavan-app/src/main/webui/src/project/trace/RunnerInfoTrace.tsx
@@ -9,11 +9,9 @@ import {
     PanelHeader,
     Text,
     Switch, TextContent, TextVariants, Title,
-    Tooltip,
-    TooltipPosition
 } from '@patternfly/react-core';
 import '../../designer/karavan.css';
-import {ProjectEventBus} from "../ProjectEventBus";
+import {ProjectEventBus} from "../../api/ProjectEventBus";
 import {RunnerInfoTraceModal} from "./RunnerInfoTraceModal";
 import {TableComposable, Tbody, Td, Th, Thead, Tr} from 
"@patternfly/react-table";
 import SearchIcon from "@patternfly/react-icons/dist/esm/icons/search-icon";
diff --git 
a/karavan-app/src/main/webui/src/projects/tabs/RunnerInfoTraceModal.tsx 
b/karavan-app/src/main/webui/src/project/trace/RunnerInfoTraceModal.tsx
similarity index 100%
rename from 
karavan-app/src/main/webui/src/projects/tabs/RunnerInfoTraceModal.tsx
rename to karavan-app/src/main/webui/src/project/trace/RunnerInfoTraceModal.tsx
diff --git 
a/karavan-app/src/main/webui/src/projects/tabs/RunnerInfoTraceNode.tsx 
b/karavan-app/src/main/webui/src/project/trace/RunnerInfoTraceNode.tsx
similarity index 100%
rename from karavan-app/src/main/webui/src/projects/tabs/RunnerInfoTraceNode.tsx
rename to karavan-app/src/main/webui/src/project/trace/RunnerInfoTraceNode.tsx
diff --git a/karavan-app/src/main/webui/src/projects/tabs/TraceTab.tsx 
b/karavan-app/src/main/webui/src/project/trace/TraceTab.tsx
similarity index 89%
rename from karavan-app/src/main/webui/src/projects/tabs/TraceTab.tsx
rename to karavan-app/src/main/webui/src/project/trace/TraceTab.tsx
index 46c26403..144c2b00 100644
--- a/karavan-app/src/main/webui/src/projects/tabs/TraceTab.tsx
+++ b/karavan-app/src/main/webui/src/project/trace/TraceTab.tsx
@@ -1,14 +1,12 @@
 import React, {useEffect, useState} from 'react';
-import {
-    Card,
-    CardBody, PageSection
+import { PageSection
 } from '@patternfly/react-core';
 import '../../designer/karavan.css';
-import {PodStatus} from "../ProjectModels";
+import {PodStatus} from "../../api/ProjectModels";
 import {KaravanApi} from "../../api/KaravanApi";
-import {ProjectEventBus} from "../ProjectEventBus";
+import {ProjectEventBus} from "../../api/ProjectEventBus";
 import {RunnerInfoTrace} from "./RunnerInfoTrace";
-import {useProjectStore} from "../ProjectStore";
+import {useProjectStore} from "../../api/ProjectStore";
 
 export function isRunning(status: PodStatus): boolean {
     return status.phase === 'Running' && !status.terminating;
diff --git 
a/karavan-app/src/main/webui/src/projects/modal/CreateProjectModal.tsx 
b/karavan-app/src/main/webui/src/projects/CreateProjectModal.tsx
similarity index 88%
rename from karavan-app/src/main/webui/src/projects/modal/CreateProjectModal.tsx
rename to karavan-app/src/main/webui/src/projects/CreateProjectModal.tsx
index 6312c117..19fa2cb5 100644
--- a/karavan-app/src/main/webui/src/projects/modal/CreateProjectModal.tsx
+++ b/karavan-app/src/main/webui/src/projects/CreateProjectModal.tsx
@@ -1,17 +1,16 @@
-import React, {useEffect, useState} from 'react';
+import React, {useState} from 'react';
 import {
     Button, Form, FormGroup,
     Modal,
     ModalVariant, Radio, TextInput,
 } from '@patternfly/react-core';
-import '../../designer/karavan.css';
-import {useProjectStore} from "../ProjectStore";
-import {ProjectLogic} from "../ProjectLogic";
-import {QuarkusIcon, SpringIcon} from "../../designer/utils/KaravanIcons";
+import '../designer/karavan.css';
 import {CamelUtil} from "karavan-core/lib/api/CamelUtil";
-import {CamelUi} from "../../designer/utils/CamelUi";
-import {Project} from "../ProjectModels";
-import {ProjectEventBus} from "../ProjectEventBus";
+import {useProjectStore} from "../api/ProjectStore";
+import {ProjectService} from "../api/ProjectService";
+import {Project} from "../api/ProjectModels";
+import {QuarkusIcon, SpringIcon} from "../designer/utils/KaravanIcons";
+import {CamelUi} from "../designer/utils/CamelUi";
 
 interface Props {
     config: any,
@@ -38,7 +37,7 @@ export const CreateProjectModal = (props: Props) => {
     }
 
     function confirmAndCloseModal () {
-        ProjectLogic.createProject(new Project({name: name, description: 
description, runtime: runtime, projectId: projectId}));
+        ProjectService.createProject(new Project({name: name, description: 
description, runtime: runtime, projectId: projectId}));
         useProjectStore.setState({operation: "none"});
         cleanValues();
     }
diff --git 
a/karavan-app/src/main/webui/src/projects/modal/DeleteProjectModal.tsx 
b/karavan-app/src/main/webui/src/projects/DeleteProjectModal.tsx
similarity index 91%
rename from karavan-app/src/main/webui/src/projects/modal/DeleteProjectModal.tsx
rename to karavan-app/src/main/webui/src/projects/DeleteProjectModal.tsx
index ad07326c..5ae29dd4 100644
--- a/karavan-app/src/main/webui/src/projects/modal/DeleteProjectModal.tsx
+++ b/karavan-app/src/main/webui/src/projects/DeleteProjectModal.tsx
@@ -4,9 +4,9 @@ import {
     Modal,
     ModalVariant,
 } from '@patternfly/react-core';
-import '../../designer/karavan.css';
-import {useProjectStore} from "../ProjectStore";
-import {ProjectLogic} from "../ProjectLogic";
+import '../designer/karavan.css';
+import {useProjectStore} from "../api/ProjectStore";
+import {ProjectService} from "../api/ProjectService";
 
 export const DeleteProjectModal = () => {
 
@@ -17,7 +17,7 @@ export const DeleteProjectModal = () => {
     }
 
     function confirmAndCloseModal () {
-        ProjectLogic.deleteProject(project);
+        ProjectService.deleteProject(project);
         useProjectStore.setState({operation: "none"});
     }
 
diff --git a/karavan-app/src/main/webui/src/projects/ProjectsPage.tsx 
b/karavan-app/src/main/webui/src/projects/ProjectsPage.tsx
index ff1423cc..dec4ea29 100644
--- a/karavan-app/src/main/webui/src/projects/ProjectsPage.tsx
+++ b/karavan-app/src/main/webui/src/projects/ProjectsPage.tsx
@@ -15,18 +15,17 @@ import {
     Title, Spinner
 } from '@patternfly/react-core';
 import '../designer/karavan.css';
-import {MainToolbar} from "../MainToolbar";
 import RefreshIcon from '@patternfly/react-icons/dist/esm/icons/sync-alt-icon';
 import PlusIcon from '@patternfly/react-icons/dist/esm/icons/plus-icon';
-import {Project} from "./ProjectModels";
 import {TableComposable, Tbody, Td, Th, Thead, Tr} from 
"@patternfly/react-table";
 import SearchIcon from '@patternfly/react-icons/dist/esm/icons/search-icon';
 import {ProjectsTableRow} from "./ProjectsTableRow";
-import {useProjectStore} from "./ProjectStore";
-import {ProjectLogic} from "./ProjectLogic";
-import {useProjectsStore} from "./ProjectStore";
-import {DeleteProjectModal} from "./modal/DeleteProjectModal";
-import {CreateProjectModal} from "./modal/CreateProjectModal";
+import {DeleteProjectModal} from "./DeleteProjectModal";
+import {CreateProjectModal} from "./CreateProjectModal";
+import {useProjectsStore, useProjectStore} from "../api/ProjectStore";
+import {ProjectService} from "../api/ProjectService";
+import {MainToolbar} from "../common/MainToolbar";
+import {Project} from "../api/ProjectModels";
 
 
 interface Props {
@@ -44,7 +43,7 @@ export const ProjectsPage = (props: Props) => {
     useEffect(() => {
         const interval = setInterval(() => {
             if (projects.length === 0) setLoading(true);
-            if (!["create", "delete", "select", "copy"].includes(operation)) 
ProjectLogic.refreshProjects();
+            if (!["create", "delete", "select", "copy"].includes(operation)) 
ProjectService.refreshProjects();
         }, 1300);
         return () => {
             clearInterval(interval)
@@ -56,7 +55,7 @@ export const ProjectsPage = (props: Props) => {
             <ToolbarContent>
                 <ToolbarItem>
                     <Button variant="link" icon={<RefreshIcon/>} onClick={e =>
-                        ProjectLogic.refreshProjects()}/>
+                        ProjectService.refreshProjects()}/>
                 </ToolbarItem>
                 <ToolbarItem>
                     <TextInput className="text-field" type="search" 
id="search" name="search"
diff --git a/karavan-app/src/main/webui/src/projects/ProjectsTableRow.tsx 
b/karavan-app/src/main/webui/src/projects/ProjectsTableRow.tsx
index 76d264a3..9ce6b07e 100644
--- a/karavan-app/src/main/webui/src/projects/ProjectsTableRow.tsx
+++ b/karavan-app/src/main/webui/src/projects/ProjectsTableRow.tsx
@@ -1,45 +1,17 @@
 import React from 'react';
 import {
-    Toolbar,
-    ToolbarContent,
-    ToolbarItem,
-    TextInput,
-    PageSection,
-    TextContent,
-    Text,
     Button,
-    Modal,
-    FormGroup,
-    ModalVariant,
-    Form,
     Badge,
     Tooltip,
-    Bullseye,
-    EmptyState,
-    EmptyStateVariant,
-    EmptyStateIcon,
-    Title,
-    OverflowMenu,
-    OverflowMenuContent,
-    OverflowMenuGroup,
-    OverflowMenuItem,
-    Flex, FlexItem, Radio, Spinner
+    Flex, FlexItem
 } from '@patternfly/react-core';
 import '../designer/karavan.css';
-import {MainToolbar} from "../MainToolbar";
-import RefreshIcon from '@patternfly/react-icons/dist/esm/icons/sync-alt-icon';
-import PlusIcon from '@patternfly/react-icons/dist/esm/icons/plus-icon';
-import {DeploymentStatus, Project} from "./ProjectModels";
-import {TableComposable, Tbody, Td, Th, Thead, Tr} from 
"@patternfly/react-table";
+import { Td, Tr} from "@patternfly/react-table";
 import DeleteIcon from "@patternfly/react-icons/dist/js/icons/times-icon";
-import SearchIcon from '@patternfly/react-icons/dist/esm/icons/search-icon';
 import CopyIcon from "@patternfly/react-icons/dist/esm/icons/copy-icon";
-import {CamelUi} from "../designer/utils/CamelUi";
-import {KaravanApi} from "../api/KaravanApi";
-import {QuarkusIcon, SpringIcon} from "../designer/utils/KaravanIcons";
-import {CamelUtil} from "karavan-core/lib/api/CamelUtil";
-import {ProjectEventBus} from "./ProjectEventBus";
-import {useDeploymentStatusesStore, useProjectsStore, useProjectStore} from 
"./ProjectStore";
+import {DeploymentStatus, Project} from '../api/ProjectModels';
+import {useDeploymentStatusesStore, useProjectStore} from 
"../api/ProjectStore";
+import {ProjectEventBus} from "../api/ProjectEventBus";
 
 interface Props {
     config: any,

Reply via email to