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 335386d7 reload kamelets on file editor route #1134 (#1140)
335386d7 is described below
commit 335386d79922cd6117db390136f58b7b309fb6e1
Author: Vidhya Sagar <[email protected]>
AuthorDate: Tue Feb 27 00:47:41 2024 +0800
reload kamelets on file editor route #1134 (#1140)
* reload kamelets on file editor route
* reload kamelets in file editor
* Saving custom kamelet in KameletApi.ts file
* merge issue fix
---------
Co-authored-by: induja <[email protected]>
---
.../src/main/webui/src/designer/karavan.css | 7 +++++-
.../main/webui/src/designer/route/DslSelector.tsx | 21 ++++++++++++++---
.../src/main/webui/src/project/FileEditor.tsx | 9 +++++++-
.../webui/src/project/files/DeleteFileModal.tsx | 8 ++++++-
karavan-core/src/core/api/KameletApi.ts | 27 +++++++++++++++++++++-
karavan-designer/src/designer/karavan.css | 7 +++++-
.../src/designer/route/DslSelector.tsx | 21 ++++++++++++++---
.../camel/karavan/generator/KaravanGenerator.java | 2 +-
8 files changed, 90 insertions(+), 12 deletions(-)
diff --git a/karavan-app/src/main/webui/src/designer/karavan.css
b/karavan-app/src/main/webui/src/designer/karavan.css
index 78b2a135..6184b230 100644
--- a/karavan-app/src/main/webui/src/designer/karavan.css
+++ b/karavan-app/src/main/webui/src/designer/karavan.css
@@ -558,12 +558,17 @@
}
.dsl-modal .search {
- width: 300px;
+ width: 350px;
position: absolute;
top: 24px;
right: 72px;
+ display:flex;
+ justify-content:flex-end;
}
+.dsl-modal .search .pf-v5-c-form__group{
+ grid-template-columns:auto !important;
+}
.dsl-modal .search .pf-v5-c-form__group-label {
padding: 0;
diff --git a/karavan-app/src/main/webui/src/designer/route/DslSelector.tsx
b/karavan-app/src/main/webui/src/designer/route/DslSelector.tsx
index 3bc6bb7d..d5613b70 100644
--- a/karavan-app/src/main/webui/src/designer/route/DslSelector.tsx
+++ b/karavan-app/src/main/webui/src/designer/route/DslSelector.tsx
@@ -19,7 +19,7 @@ import {
Badge,
Card, CardBody, CardFooter, CardHeader, Flex, FlexItem, Form, FormGroup,
Gallery, Modal, PageSection,
Tab, Tabs, TabTitleText,
- Text, TextInput, ToggleGroup, ToggleGroupItem,
+ Text, TextInput, ToggleGroup, ToggleGroupItem,Switch
} from '@patternfly/react-core';
import '../karavan.css';
import {CamelUi} from "../utils/CamelUi";
@@ -48,6 +48,7 @@ export function DslSelector (props: Props) {
const [filter, setFilter] = useState<string>('');
+ const [customOnly, setCustomOnly] = useState<boolean>(false);
useEffect(() => {
}, [selectedLabels]);
@@ -67,6 +68,17 @@ export function DslSelector (props: Props) {
function searchInput() {
return (
<Form isHorizontal className="search" autoComplete="off">
+ {selectorTabIndex === 'kamelet' && <FormGroup fieldId="switch">
+
+ <Switch
+ label="Custom only"
+ id="switch"
+ isChecked={customOnly}
+ onChange={(_event, checked) => setCustomOnly(checked)}
+ />
+ </FormGroup>}
+
+
<FormGroup fieldId="search">
<TextInput className="text-field" type="text" id="search"
name="search"
value={filter}
@@ -75,9 +87,10 @@ export function DslSelector (props: Props) {
</Form>
)
}
-
+
function getCard(dsl: DslMetaModel, index: number) {
const labels = dsl.labels !== undefined ?
dsl.labels.split(",").filter(label => label !== 'eip') : [];
+ const isCustom = KameletApi.getCustomKameletNames().includes(dsl.name);
return (
<Card key={dsl.dsl + index} isCompact className="dsl-card"
onClick={event => selectDsl(event, dsl)}>
@@ -86,6 +99,7 @@ export function DslSelector (props: Props) {
{['kamelet',
'component'].includes(dsl.navigation.toLowerCase()) &&
<Badge isRead className="version
labels">{dsl.version}</Badge>
}
+ {isCustom && <Badge className="custom">custom</Badge>}
</CardHeader>
<CardHeader>
{CamelUi.getIconForDsl(dsl)}
@@ -124,10 +138,11 @@ export function DslSelector (props: Props) {
const blockedComponents = ComponentApi.getBlockedComponentNames();
const blockedKamelets = KameletApi.getBlockedKameletNames();
const elements = CamelUi.getSelectorModelsForParentFiltered(parentDsl,
navigation, showSteps);
- const allowedElements = selectorTabIndex === 'component' ?
+ let allowedElements = selectorTabIndex === 'component' ?
elements.filter(dsl => (!blockedComponents.includes(dsl.uri ||
dsl.name))) :
(selectorTabIndex === 'kamelet' ? elements.filter(dsl =>
(!blockedKamelets.includes(dsl.name))) : elements);
const eipLabels = [...new Set(elements.map(e =>
e.labels).join(",").split(",").filter(e => e !== 'eip'))];
+ if (customOnly) allowedElements = allowedElements.filter(k =>
KameletApi.getCustomKameletNames().includes(k.name));
const filteredElement = allowedElements
.filter((dsl: DslMetaModel) => CamelUi.checkFilter(dsl, filter))
.filter((dsl: DslMetaModel) => {
diff --git a/karavan-app/src/main/webui/src/project/FileEditor.tsx
b/karavan-app/src/main/webui/src/project/FileEditor.tsx
index dcea5772..95a1a195 100644
--- a/karavan-app/src/main/webui/src/project/FileEditor.tsx
+++ b/karavan-app/src/main/webui/src/project/FileEditor.tsx
@@ -27,6 +27,7 @@ import {CodeUtils} from "../util/CodeUtils";
import {RegistryBeanDefinition} from "karavan-core/lib/model/CamelDefinition";
import {TopologyUtils} from "karavan-core/lib/api/TopologyUtils";
import {IntegrationFile} from "karavan-core/lib/model/IntegrationDefinition";
+import { KameletApi } from 'karavan-core/lib/api/KameletApi';
interface Props {
projectId: string
@@ -60,7 +61,13 @@ export function FileEditor(props: Props) {
prevState.length = 0;
prevState.push(...bs);
return prevState;
- })
+ });
+ return () => {
+ //save custom kamelet on page unload
+ if (props.projectId.includes('kamelets') && file) {
+ KameletApi.saveKamelet(file?.code);
+ }
+ };
}, []);
function save(name: string, code: string) {
diff --git a/karavan-app/src/main/webui/src/project/files/DeleteFileModal.tsx
b/karavan-app/src/main/webui/src/project/files/DeleteFileModal.tsx
index c89ba0ad..2428c305 100644
--- a/karavan-app/src/main/webui/src/project/files/DeleteFileModal.tsx
+++ b/karavan-app/src/main/webui/src/project/files/DeleteFileModal.tsx
@@ -24,6 +24,7 @@ import {
import '../../designer/karavan.css';
import {useFileStore} from "../../api/ProjectStore";
import {ProjectService} from "../../api/ProjectService";
+import { KameletApi } from 'karavan-core/lib/api/KameletApi';
export function DeleteFileModal () {
@@ -33,8 +34,13 @@ export function DeleteFileModal () {
useFileStore.setState({operation: "none"})
}
- function confirmAndCloseModal () {
+ function isKameletsProject(): boolean {
+ return file?.name.includes ('kamelet.yaml') || false;
+ }
+
+ function confirmAndCloseModal() {
if (file) ProjectService.deleteFile(file);
+ if (isKameletsProject()) KameletApi.removeKamelet(file?.code || '');
useFileStore.setState({operation: "none"});
}
diff --git a/karavan-core/src/core/api/KameletApi.ts
b/karavan-core/src/core/api/KameletApi.ts
index acccea33..aec59ad1 100644
--- a/karavan-core/src/core/api/KameletApi.ts
+++ b/karavan-core/src/core/api/KameletApi.ts
@@ -32,6 +32,17 @@ export class KameletApi {
CustomNames.push(...names);
};
+ static saveCustomKameletName = (name: string) => {
+ CustomNames.push(name);
+ }
+
+ static removeCustomKameletName = (name: string) => {
+ const index = CustomNames.indexOf(name);
+ if (index > -1) {
+ CustomNames.splice(index,1);
+ }
+ }
+
static getKameletProperties = (kameletName: string): Property[] => {
const kamelet: KameletModel | undefined =
KameletApi.findKameletByName(kameletName);
const properties: Property[] = [];
@@ -95,8 +106,22 @@ export class KameletApi {
static saveKamelet = (yaml: string): void => {
const kamelet: KameletModel = KameletApi.yamlToKamelet(yaml);
- if (Kamelets.findIndex((k: KameletModel) => k.metadata.name ===
kamelet.metadata.name) === -1) {
+ const kameletIndex = Kamelets.findIndex((k: KameletModel) =>
k.metadata.name === kamelet.metadata.name);
+ if (kameletIndex === -1) {
Kamelets.push(kamelet);
+ KameletApi.saveCustomKameletName(kamelet.metadata.name);
+ }
+ else {
+ Kamelets.splice(kameletIndex, 1, kamelet)
+ }
+ };
+
+ static removeKamelet = (yaml: string): void => {
+ const kamelet: KameletModel = KameletApi.yamlToKamelet(yaml);
+ const kameletIndex = Kamelets.findIndex((k: KameletModel) =>
k.metadata.name === kamelet.metadata.name);
+ if (kameletIndex > -1) {
+ Kamelets.splice(kameletIndex,1);
+ KameletApi.removeCustomKameletName(kamelet.metadata.name);
}
};
diff --git a/karavan-designer/src/designer/karavan.css
b/karavan-designer/src/designer/karavan.css
index 78b2a135..6184b230 100644
--- a/karavan-designer/src/designer/karavan.css
+++ b/karavan-designer/src/designer/karavan.css
@@ -558,12 +558,17 @@
}
.dsl-modal .search {
- width: 300px;
+ width: 350px;
position: absolute;
top: 24px;
right: 72px;
+ display:flex;
+ justify-content:flex-end;
}
+.dsl-modal .search .pf-v5-c-form__group{
+ grid-template-columns:auto !important;
+}
.dsl-modal .search .pf-v5-c-form__group-label {
padding: 0;
diff --git a/karavan-designer/src/designer/route/DslSelector.tsx
b/karavan-designer/src/designer/route/DslSelector.tsx
index 3bc6bb7d..d5613b70 100644
--- a/karavan-designer/src/designer/route/DslSelector.tsx
+++ b/karavan-designer/src/designer/route/DslSelector.tsx
@@ -19,7 +19,7 @@ import {
Badge,
Card, CardBody, CardFooter, CardHeader, Flex, FlexItem, Form, FormGroup,
Gallery, Modal, PageSection,
Tab, Tabs, TabTitleText,
- Text, TextInput, ToggleGroup, ToggleGroupItem,
+ Text, TextInput, ToggleGroup, ToggleGroupItem,Switch
} from '@patternfly/react-core';
import '../karavan.css';
import {CamelUi} from "../utils/CamelUi";
@@ -48,6 +48,7 @@ export function DslSelector (props: Props) {
const [filter, setFilter] = useState<string>('');
+ const [customOnly, setCustomOnly] = useState<boolean>(false);
useEffect(() => {
}, [selectedLabels]);
@@ -67,6 +68,17 @@ export function DslSelector (props: Props) {
function searchInput() {
return (
<Form isHorizontal className="search" autoComplete="off">
+ {selectorTabIndex === 'kamelet' && <FormGroup fieldId="switch">
+
+ <Switch
+ label="Custom only"
+ id="switch"
+ isChecked={customOnly}
+ onChange={(_event, checked) => setCustomOnly(checked)}
+ />
+ </FormGroup>}
+
+
<FormGroup fieldId="search">
<TextInput className="text-field" type="text" id="search"
name="search"
value={filter}
@@ -75,9 +87,10 @@ export function DslSelector (props: Props) {
</Form>
)
}
-
+
function getCard(dsl: DslMetaModel, index: number) {
const labels = dsl.labels !== undefined ?
dsl.labels.split(",").filter(label => label !== 'eip') : [];
+ const isCustom = KameletApi.getCustomKameletNames().includes(dsl.name);
return (
<Card key={dsl.dsl + index} isCompact className="dsl-card"
onClick={event => selectDsl(event, dsl)}>
@@ -86,6 +99,7 @@ export function DslSelector (props: Props) {
{['kamelet',
'component'].includes(dsl.navigation.toLowerCase()) &&
<Badge isRead className="version
labels">{dsl.version}</Badge>
}
+ {isCustom && <Badge className="custom">custom</Badge>}
</CardHeader>
<CardHeader>
{CamelUi.getIconForDsl(dsl)}
@@ -124,10 +138,11 @@ export function DslSelector (props: Props) {
const blockedComponents = ComponentApi.getBlockedComponentNames();
const blockedKamelets = KameletApi.getBlockedKameletNames();
const elements = CamelUi.getSelectorModelsForParentFiltered(parentDsl,
navigation, showSteps);
- const allowedElements = selectorTabIndex === 'component' ?
+ let allowedElements = selectorTabIndex === 'component' ?
elements.filter(dsl => (!blockedComponents.includes(dsl.uri ||
dsl.name))) :
(selectorTabIndex === 'kamelet' ? elements.filter(dsl =>
(!blockedKamelets.includes(dsl.name))) : elements);
const eipLabels = [...new Set(elements.map(e =>
e.labels).join(",").split(",").filter(e => e !== 'eip'))];
+ if (customOnly) allowedElements = allowedElements.filter(k =>
KameletApi.getCustomKameletNames().includes(k.name));
const filteredElement = allowedElements
.filter((dsl: DslMetaModel) => CamelUi.checkFilter(dsl, filter))
.filter((dsl: DslMetaModel) => {
diff --git
a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/KaravanGenerator.java
b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/KaravanGenerator.java
index c3950392..b6e518d3 100644
---
a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/KaravanGenerator.java
+++
b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/KaravanGenerator.java
@@ -21,7 +21,7 @@ public final class KaravanGenerator {
public static void main(String[] args) throws Exception {
String[] paths = new String[] {
"karavan-designer/public",
- "karavan-web/karavan-app/src/main/resources",
+ "karavan-app/src/main/resources",
"karavan-vscode"
};
if (args.length > 0) {