You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ma...@apache.org on 2023/10/26 00:05:05 UTC
[camel-karavan] 01/07: Kamelet Sink in Source Kamelet Selector for #315
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 211dd994b3d3873ca5325de4ae93f937850b962c
Author: Marat Gubaidullin <ma...@talismancloud.io>
AuthorDate: Mon Oct 23 16:53:01 2023 -0400
Kamelet Sink in Source Kamelet Selector for #315
---
karavan-designer/src/App.tsx | 4 ++--
karavan-designer/src/designer/KaravanDesigner.tsx | 2 --
.../src/designer/icons/ComponentIcons.tsx | 23 +++++++++++++++++++++-
.../src/designer/icons/KaravanIcons.tsx | 3 ++-
.../src/designer/route/DslConnections.tsx | 1 +
karavan-designer/src/designer/route/DslElement.tsx | 12 +++++++++--
.../src/designer/route/DslSelector.tsx | 3 +--
.../src/designer/route/useRouteDesignerHook.tsx | 9 ++++++++-
karavan-designer/src/designer/utils/CamelUi.tsx | 12 +++++++++--
9 files changed, 56 insertions(+), 13 deletions(-)
diff --git a/karavan-designer/src/App.tsx b/karavan-designer/src/App.tsx
index 933c493d..30196dab 100644
--- a/karavan-designer/src/App.tsx
+++ b/karavan-designer/src/App.tsx
@@ -81,8 +81,8 @@ class App extends React.Component<Props, State> {
fetch("components/components.json"),
fetch("snippets/org.apache.camel.AggregationStrategy"),
fetch("snippets/org.apache.camel.Processor"),
- fetch("example/demo.camel.yaml")
- // fetch("example/aws-s3-cdc-source.kamelet.yaml")
+ // fetch("example/demo.camel.yaml")
+ fetch("example/aws-s3-cdc-source.kamelet.yaml")
// fetch("components/supported-components.json"),
]).then(responses =>
Promise.all(responses.map(response => response.text()))
diff --git a/karavan-designer/src/designer/KaravanDesigner.tsx b/karavan-designer/src/designer/KaravanDesigner.tsx
index 4b7b3c7a..b1af73c5 100644
--- a/karavan-designer/src/designer/KaravanDesigner.tsx
+++ b/karavan-designer/src/designer/KaravanDesigner.tsx
@@ -24,8 +24,6 @@ import {
Tabs,
TabTitleIcon,
TabTitleText,
- Tooltip,
- TooltipPosition,
} from '@patternfly/react-core';
import './karavan.css';
import {RouteDesigner} from "./route/RouteDesigner";
diff --git a/karavan-designer/src/designer/icons/ComponentIcons.tsx b/karavan-designer/src/designer/icons/ComponentIcons.tsx
index a05f5e70..bda35d53 100644
--- a/karavan-designer/src/designer/icons/ComponentIcons.tsx
+++ b/karavan-designer/src/designer/icons/ComponentIcons.tsx
@@ -1165,7 +1165,28 @@ export function ApiIcon() {
);
}
-export function MonitoringIcon() {
+export function KameletIcon() {
+ return (
+ <svg
+ className="icon" id="icon"
+ xmlns="http://www.w3.org/2000/svg"
+ viewBox="0 0 32 32"
+ >
+ <title>{"application"}</title>
+ <path d="M16 18H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2ZM6 6v10h10V6ZM26 12v4h-4v-4h4m0-2h-4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h4a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2ZM26 22v4h-4v-4h4m0-2h-4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h4a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2ZM16 22v4h-4v-4h4m0-2h-4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h4a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2Z" />
+ <path
+ d="M0 0h32v32H0z"
+ data-name="<Transparent Rectangle>"
+ style={{
+ fill: "none",
+ }}
+ />
+ </svg>
+ )
+}
+
+
+ export function MonitoringIcon() {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
diff --git a/karavan-designer/src/designer/icons/KaravanIcons.tsx b/karavan-designer/src/designer/icons/KaravanIcons.tsx
index b7165b93..b0b8042f 100644
--- a/karavan-designer/src/designer/icons/KaravanIcons.tsx
+++ b/karavan-designer/src/designer/icons/KaravanIcons.tsx
@@ -260,7 +260,7 @@ export function CamelIcon(props?: (JSX.IntrinsicAttributes & React.SVGProps<SVGS
);
}
-export function getDesignerIcon(icon: string) {
+export function getDesignerIcon(icon: string): React.JSX.Element {
if (icon === 'kamelet') return (
<svg
className="top-icon" id="icon"
@@ -429,6 +429,7 @@ export function getDesignerIcon(icon: string) {
<rect id="_Transparent_Rectangle_" data-name="<Transparent Rectangle>" className="cls-1" width="32"
height="32" transform="translate(0 32) rotate(-90)"/>
</svg>)
+ return <></>;
}
diff --git a/karavan-designer/src/designer/route/DslConnections.tsx b/karavan-designer/src/designer/route/DslConnections.tsx
index de6a0060..10338ae9 100644
--- a/karavan-designer/src/designer/route/DslConnections.tsx
+++ b/karavan-designer/src/designer/route/DslConnections.tsx
@@ -142,6 +142,7 @@ export function DslConnections() {
.filter(pos => pos.step.dslName === 'ToDefinition' && !CamelUi.isActionKamelet(pos.step) && !TopologyUtils.isElementInternalComponent(pos.step))
.filter(pos => !(outgoingDefinitions.includes(pos.step.dslName) && TopologyUtils.hasInternalUri(pos.step)))
.filter(pos => pos.step.dslName !== 'SagaDefinition')
+ .filter(pos => !CamelUi.isKameletSink(pos.step))
.sort((pos1: DslPosition, pos2: DslPosition) => {
const y1 = pos1.headerRect.y + pos1.headerRect.height / 2;
const y2 = pos2.headerRect.y + pos2.headerRect.height / 2;
diff --git a/karavan-designer/src/designer/route/DslElement.tsx b/karavan-designer/src/designer/route/DslElement.tsx
index 305b7859..c45dcbe4 100644
--- a/karavan-designer/src/designer/route/DslElement.tsx
+++ b/karavan-designer/src/designer/route/DslElement.tsx
@@ -42,7 +42,7 @@ interface Props {
export function DslElement(props: Props) {
const headerRef = React.useRef<HTMLDivElement>(null);
- const {selectElement, moveElement, onShowDeleteConfirmation, openSelector} = useRouteDesignerHook();
+ const {selectElement, moveElement, onShowDeleteConfirmation, openSelector, isKamelet} = useRouteDesignerHook();
const [integration] = useIntegrationStore((s) => [s.integration, s.setIntegration], shallow)
@@ -241,9 +241,17 @@ export function DslElement(props: Props) {
)
}
+ function getHeaderText(step: CamelElement): string {
+ if (isKamelet() && step.dslName === 'ToDefinition' && (step as any).uri === 'kamelet:sink') {
+ return "Sink";
+ } else {
+ return (step as any).description ? (step as any).description : CamelUi.getElementTitle(props.step);
+ }
+ }
+
function getHeaderTextWithTooltip(step: CamelElement) {
const checkRequired = CamelUtil.checkRequired(step);
- const title = (step as any).description ? (step as any).description : CamelUi.getElementTitle(props.step);
+ const title = getHeaderText(step);
let className = hasWideChildrenElement() ? "text text-right" : "text text-bottom";
if (!checkRequired[0]) className = className + " header-text-required";
if (checkRequired[0]) {
diff --git a/karavan-designer/src/designer/route/DslSelector.tsx b/karavan-designer/src/designer/route/DslSelector.tsx
index 8f815536..a80525ba 100644
--- a/karavan-designer/src/designer/route/DslSelector.tsx
+++ b/karavan-designer/src/designer/route/DslSelector.tsx
@@ -24,7 +24,7 @@ import {
import '../karavan.css';
import {CamelUi} from "../utils/CamelUi";
import {DslMetaModel} from "../utils/DslMetaModel";
-import {useDesignerStore, useSelectorStore} from "../DesignerStore";
+import {useDesignerStore, useIntegrationStore, useSelectorStore} from "../DesignerStore";
import {shallow} from "zustand/shallow";
import {useRouteDesignerHook} from "./useRouteDesignerHook";
@@ -40,7 +40,6 @@ export function DslSelector (props: Props) {
[s.showSelector, s.showSteps, s.parentId, s.parentDsl, s.selectorTabIndex, s.setShowSelector, s.setSelectorTabIndex,
s.selectedPosition, s.selectedLabels, s.addSelectedLabel, s.deleteSelectedLabel], shallow)
-
const [dark] = useDesignerStore((s) => [s.dark], shallow)
const {onDslSelect} = useRouteDesignerHook();
diff --git a/karavan-designer/src/designer/route/useRouteDesignerHook.tsx b/karavan-designer/src/designer/route/useRouteDesignerHook.tsx
index fe61d410..5848acc9 100644
--- a/karavan-designer/src/designer/route/useRouteDesignerHook.tsx
+++ b/karavan-designer/src/designer/route/useRouteDesignerHook.tsx
@@ -46,6 +46,10 @@ export function useRouteDesignerHook () {
}
}
+ function isKamelet(): boolean {
+ return integration.type === 'kamelet';
+ }
+
const onShowDeleteConfirmation = (id: string) => {
let message: string;
const uuidsToDelete:string [] = [id];
@@ -200,6 +204,9 @@ export function useRouteDesignerHook () {
addStep(route, parentId, position)
break;
case 'ToDefinition' :
+ if (dsl.uri === undefined && isKamelet()) {
+ dsl.uri = 'kamelet:sink';
+ }
const to = CamelDefinitionApi.createStep(dsl.dsl, {uri: dsl.uri});
addStep(to, parentId, position)
break;
@@ -291,5 +298,5 @@ export function useRouteDesignerHook () {
}
return { deleteElement, selectElement, moveElement, onShowDeleteConfirmation, onDslSelect, openSelector,
- createRouteConfiguration, onCommand, handleKeyDown, handleKeyUp, unselectElement}
+ createRouteConfiguration, onCommand, handleKeyDown, handleKeyUp, unselectElement, isKamelet}
}
\ No newline at end of file
diff --git a/karavan-designer/src/designer/utils/CamelUi.tsx b/karavan-designer/src/designer/utils/CamelUi.tsx
index 6864361b..2b672a8d 100644
--- a/karavan-designer/src/designer/utils/CamelUi.tsx
+++ b/karavan-designer/src/designer/utils/CamelUi.tsx
@@ -51,7 +51,7 @@ import {
IgniteIcon,
InfinispanIcon,
IotIcon,
- KafkaIcon,
+ KafkaIcon, KameletIcon,
KubernetesIcon,
MachineLearningIcon,
MailIcon,
@@ -93,6 +93,7 @@ import {
import React from "react";
import {TopologyUtils} from "karavan-core/lib/api/TopologyUtils";
import {CamelDisplayUtil} from "karavan-core/lib/api/CamelDisplayUtil";
+import {getDesignerIcon} from "../icons/KaravanIcons";
const StepElements: string[] = [
"AggregateDefinition",
@@ -107,6 +108,7 @@ const StepElements: string[] = [
// "ErrorHandlerDefinition",
"FilterDefinition",
"IdempotentConsumerDefinition",
+ "KameletDefinition",
"LogDefinition",
"LoopDefinition",
"MarshalDefinition",
@@ -306,6 +308,10 @@ export class CamelUi {
else return false;
}
+ static isKameletSink = (element: CamelElement): boolean => {
+ return element.dslName === 'ToDefinition' && (element as any).uri === 'kamelet:sink';
+ }
+
static getInternalRouteUris = (integration: Integration, componentName: string, showComponentName: boolean = true): string[] => {
const result: string[] = [];
integration.spec.flows?.filter(f => f.dslName === 'RouteDefinition')
@@ -519,7 +525,7 @@ export class CamelUi {
}
}
- static getIconForDsl = (dsl: DslMetaModel): JSX.Element => {
+ static getIconForDsl = (dsl: DslMetaModel): React.JSX.Element => {
if (dsl.dsl && (dsl.dsl === "KameletDefinition" || dsl.navigation === 'kamelet')) {
return this.getIconFromSource(CamelUi.getKameletIconByName(dsl.name));
} else if ((dsl.dsl && dsl.dsl === "FromDefinition")
@@ -687,6 +693,8 @@ export class CamelUi {
return <ApiIcon/>;
case 'HeadDefinition' :
return <ApiIcon/>;
+ case 'KameletDefinition' :
+ return <KameletIcon/>;
default:
return this.getIconFromSource(CamelUi.getIconSrcForName(dslName))
}