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 9aff5cbf Fix #1156 9aff5cbf is described below commit 9aff5cbf5245ec303250b7b6f04476417f2d3fce Author: Marat Gubaidullin <ma...@talismancloud.io> AuthorDate: Fri Mar 1 14:20:33 2024 -0500 Fix #1156 --- .../property/property/ComponentPropertyField.tsx | 14 ++++++++++++-- .../src/designer/property/property/DslPropertyField.tsx | 16 +++++++++------- .../src/main/webui/src/designer/utils/CamelUi.tsx | 17 ++++++++++++++++- .../webui/src/project/trace/RunnerInfoTraceMessage.tsx | 6 +----- .../property/property/ComponentPropertyField.tsx | 14 ++++++++++++-- .../src/designer/property/property/DslPropertyField.tsx | 16 +++++++++------- karavan-designer/src/designer/utils/CamelUi.tsx | 17 ++++++++++++++++- .../property/property/ComponentPropertyField.tsx | 14 ++++++++++++-- .../src/designer/property/property/DslPropertyField.tsx | 16 +++++++++------- karavan-space/src/designer/utils/CamelUi.tsx | 17 ++++++++++++++++- 10 files changed, 112 insertions(+), 35 deletions(-) diff --git a/karavan-app/src/main/webui/src/designer/property/property/ComponentPropertyField.tsx b/karavan-app/src/main/webui/src/designer/property/property/ComponentPropertyField.tsx index 3f13cb1e..925ab18b 100644 --- a/karavan-app/src/main/webui/src/designer/property/property/ComponentPropertyField.tsx +++ b/karavan-app/src/main/webui/src/designer/property/property/ComponentPropertyField.tsx @@ -70,7 +70,7 @@ export function ComponentPropertyField(props: Props) { const {onParametersChange, getInternalComponentName} = usePropertiesHook(); - const [integration] = useIntegrationStore((state) => [state.integration], shallow) + const [integration, files] = useIntegrationStore((state) => [state.integration, state.files], shallow) const [dark, setSelectedStep, beans] = useDesignerStore((s) => [s.dark, s.setSelectedStep, s.beans], shallow) @@ -150,12 +150,22 @@ export function ComponentPropertyField(props: Props) { } } + function checkUri(startsWith: string): boolean { + if (props.element && props.element.dslName === 'ToDefinition' && property.name === 'name') { + const uri: string = (props.element as ToDefinition).uri || ''; + return uri.startsWith(startsWith); + } else { + return false; + } + } + function getInternalUriSelect(property: ComponentProperty, value: any) { const selectOptions: JSX.Element[] = []; const componentName = getInternalComponentName(property.name, props.element); const internalUris = CamelUi.getInternalRouteUris(integration, componentName, false); - const uris: string [] = []; + let uris: string[] = CamelUi.getInternalUris(files, checkUri('direct'), checkUri('seda')); uris.push(...internalUris); + uris = [...new Set(uris.map(e => e.includes(":") ? e.split(":")?.at(1) || "" : e))] if (value && value.length > 0 && !uris.includes(value)) { uris.unshift(value); } diff --git a/karavan-app/src/main/webui/src/designer/property/property/DslPropertyField.tsx b/karavan-app/src/main/webui/src/designer/property/property/DslPropertyField.tsx index 43986796..a17dc88d 100644 --- a/karavan-app/src/main/webui/src/designer/property/property/DslPropertyField.tsx +++ b/karavan-app/src/main/webui/src/designer/property/property/DslPropertyField.tsx @@ -51,7 +51,7 @@ import {CamelDefinitionApiExt} from "karavan-core/lib/api/CamelDefinitionApiExt" import {ExpressionField} from "./ExpressionField"; import {CamelUi, RouteToCreate} from "../../utils/CamelUi"; import {ComponentPropertyField} from "./ComponentPropertyField"; -import {CamelElement} from "karavan-core/lib/model/IntegrationDefinition"; +import {CamelElement, IntegrationFile} from "karavan-core/lib/model/IntegrationDefinition"; import {KameletPropertyField} from "./KameletPropertyField"; import PlusIcon from "@patternfly/react-icons/dist/esm/icons/plus-icon"; import {ObjectField} from "./ObjectField"; @@ -77,6 +77,7 @@ import {BeanProperties} from "./BeanProperties"; import {PropertyPlaceholderDropdown} from "./PropertyPlaceholderDropdown"; import {VariablesDropdown} from "./VariablesDropdown"; import {ROUTE, GLOBAL} from "karavan-core/lib/api/VariableUtil"; +import {getIntegrations} from "../../../topology/TopologyApi"; interface Props { property: PropertyMeta, @@ -92,7 +93,7 @@ interface Props { export function DslPropertyField(props: Props) { - const [integration, setIntegration, addVariable] = useIntegrationStore((s) => [s.integration, s.setIntegration, s.addVariable], shallow) + const [integration, setIntegration, addVariable, files] = useIntegrationStore((s) => [s.integration, s.setIntegration, s.addVariable, s.files], shallow) const [dark, setSelectedStep] = useDesignerStore((s) => [s.dark, s.setSelectedStep], shallow) const [isShowAdvanced, setIsShowAdvanced] = useState<string[]>([]); @@ -107,7 +108,9 @@ export function DslPropertyField(props: Props) { const [variableType, setVariableType] = useState<'global:' | 'route:' | ''>(''); const [checkChanges, setCheckChanges] = useState<boolean>(false); - useEffect(() => setTextVariable(value), []) + useEffect(() => { + setTextVariable(value) + }, []) useEffect(() => { if (checkChanges) { @@ -687,10 +690,9 @@ export function DslPropertyField(props: Props) { function getInternalUriSelect(property: PropertyMeta, value: any) { const selectOptions: JSX.Element[] = []; - const urls = CamelUi.getInternalRouteUris(integration, "direct"); - urls.push(...CamelUi.getInternalRouteUris(integration, "seda")); - if (urls && urls.length > 0) { - selectOptions.push(...urls.map((value: string) => + const uris: string[] = CamelUi.getInternalUris(files, true, true); + if (uris && uris.length > 0) { + selectOptions.push(...uris.map((value: string) => <SelectOption key={value} value={value.trim()}/>)); } return ( diff --git a/karavan-app/src/main/webui/src/designer/utils/CamelUi.tsx b/karavan-app/src/main/webui/src/designer/utils/CamelUi.tsx index 28718e59..8caf309f 100644 --- a/karavan-app/src/main/webui/src/designer/utils/CamelUi.tsx +++ b/karavan-app/src/main/webui/src/designer/utils/CamelUi.tsx @@ -27,7 +27,7 @@ import { RouteDefinition, ToDefinition } from "karavan-core/lib/model/CamelDefinition"; -import {CamelElement, Integration} from "karavan-core/lib/model/IntegrationDefinition"; +import {CamelElement, Integration, IntegrationFile} from "karavan-core/lib/model/IntegrationDefinition"; import { ActivemqIcon, ApiIcon, AwsIcon, @@ -92,6 +92,7 @@ import { } from "../icons/EipIcons"; import React from "react"; import {TopologyUtils} from "karavan-core/lib/api/TopologyUtils"; +import {getIntegrations} from "../../topology/TopologyApi"; const StepElements: string[] = [ "AggregateDefinition", @@ -342,6 +343,20 @@ export class CamelUi { return result; } + static getInternalUris = (files: IntegrationFile[], direct: boolean, seda: boolean) => { + const urls: string[] = []; + const integrations = getIntegrations(files); + integrations.forEach(i => { + if (direct) { + urls.push(...CamelUi.getInternalRouteUris(i, "direct")) + } + if (seda) { + urls.push(...CamelUi.getInternalRouteUris(i, "seda")); + } + }) + return urls; + } + static getElementTitle = (element: CamelElement): string => { if (element.dslName === 'RouteDefinition') { const routeId = (element as RouteDefinition).id diff --git a/karavan-app/src/main/webui/src/project/trace/RunnerInfoTraceMessage.tsx b/karavan-app/src/main/webui/src/project/trace/RunnerInfoTraceMessage.tsx index 7eae1020..1ddabfdc 100644 --- a/karavan-app/src/main/webui/src/project/trace/RunnerInfoTraceMessage.tsx +++ b/karavan-app/src/main/webui/src/project/trace/RunnerInfoTraceMessage.tsx @@ -53,10 +53,6 @@ export function RunnerInfoTraceMessage (props: Props) { const body = props.trace?.message?.body?.value; const variable = variables.filter(v => v.key === variableName)?.at(0); - useEffect(()=> { - console.log(variableName) - }, [variableName]) - function getBody() { return ( <CodeBlock title="Body"> @@ -150,7 +146,7 @@ export function RunnerInfoTraceMessage (props: Props) { </Tabs> {tab === 'variables' && variables.length > 0 && <> - <Tabs activeKey={variableName} onSelect={(event, eventKey) => setVariableName(eventKey)}> + <Tabs key={variableName} activeKey={variableName} onSelect={(event, eventKey) => setVariableName(eventKey)}> {variables.map(v => (<Tab eventKey={v.key} title={<TabTitleText>{v.key}</TabTitleText>}/>))} </Tabs> {getVariableType()} diff --git a/karavan-designer/src/designer/property/property/ComponentPropertyField.tsx b/karavan-designer/src/designer/property/property/ComponentPropertyField.tsx index 3f13cb1e..925ab18b 100644 --- a/karavan-designer/src/designer/property/property/ComponentPropertyField.tsx +++ b/karavan-designer/src/designer/property/property/ComponentPropertyField.tsx @@ -70,7 +70,7 @@ export function ComponentPropertyField(props: Props) { const {onParametersChange, getInternalComponentName} = usePropertiesHook(); - const [integration] = useIntegrationStore((state) => [state.integration], shallow) + const [integration, files] = useIntegrationStore((state) => [state.integration, state.files], shallow) const [dark, setSelectedStep, beans] = useDesignerStore((s) => [s.dark, s.setSelectedStep, s.beans], shallow) @@ -150,12 +150,22 @@ export function ComponentPropertyField(props: Props) { } } + function checkUri(startsWith: string): boolean { + if (props.element && props.element.dslName === 'ToDefinition' && property.name === 'name') { + const uri: string = (props.element as ToDefinition).uri || ''; + return uri.startsWith(startsWith); + } else { + return false; + } + } + function getInternalUriSelect(property: ComponentProperty, value: any) { const selectOptions: JSX.Element[] = []; const componentName = getInternalComponentName(property.name, props.element); const internalUris = CamelUi.getInternalRouteUris(integration, componentName, false); - const uris: string [] = []; + let uris: string[] = CamelUi.getInternalUris(files, checkUri('direct'), checkUri('seda')); uris.push(...internalUris); + uris = [...new Set(uris.map(e => e.includes(":") ? e.split(":")?.at(1) || "" : e))] if (value && value.length > 0 && !uris.includes(value)) { uris.unshift(value); } diff --git a/karavan-designer/src/designer/property/property/DslPropertyField.tsx b/karavan-designer/src/designer/property/property/DslPropertyField.tsx index 43986796..a17dc88d 100644 --- a/karavan-designer/src/designer/property/property/DslPropertyField.tsx +++ b/karavan-designer/src/designer/property/property/DslPropertyField.tsx @@ -51,7 +51,7 @@ import {CamelDefinitionApiExt} from "karavan-core/lib/api/CamelDefinitionApiExt" import {ExpressionField} from "./ExpressionField"; import {CamelUi, RouteToCreate} from "../../utils/CamelUi"; import {ComponentPropertyField} from "./ComponentPropertyField"; -import {CamelElement} from "karavan-core/lib/model/IntegrationDefinition"; +import {CamelElement, IntegrationFile} from "karavan-core/lib/model/IntegrationDefinition"; import {KameletPropertyField} from "./KameletPropertyField"; import PlusIcon from "@patternfly/react-icons/dist/esm/icons/plus-icon"; import {ObjectField} from "./ObjectField"; @@ -77,6 +77,7 @@ import {BeanProperties} from "./BeanProperties"; import {PropertyPlaceholderDropdown} from "./PropertyPlaceholderDropdown"; import {VariablesDropdown} from "./VariablesDropdown"; import {ROUTE, GLOBAL} from "karavan-core/lib/api/VariableUtil"; +import {getIntegrations} from "../../../topology/TopologyApi"; interface Props { property: PropertyMeta, @@ -92,7 +93,7 @@ interface Props { export function DslPropertyField(props: Props) { - const [integration, setIntegration, addVariable] = useIntegrationStore((s) => [s.integration, s.setIntegration, s.addVariable], shallow) + const [integration, setIntegration, addVariable, files] = useIntegrationStore((s) => [s.integration, s.setIntegration, s.addVariable, s.files], shallow) const [dark, setSelectedStep] = useDesignerStore((s) => [s.dark, s.setSelectedStep], shallow) const [isShowAdvanced, setIsShowAdvanced] = useState<string[]>([]); @@ -107,7 +108,9 @@ export function DslPropertyField(props: Props) { const [variableType, setVariableType] = useState<'global:' | 'route:' | ''>(''); const [checkChanges, setCheckChanges] = useState<boolean>(false); - useEffect(() => setTextVariable(value), []) + useEffect(() => { + setTextVariable(value) + }, []) useEffect(() => { if (checkChanges) { @@ -687,10 +690,9 @@ export function DslPropertyField(props: Props) { function getInternalUriSelect(property: PropertyMeta, value: any) { const selectOptions: JSX.Element[] = []; - const urls = CamelUi.getInternalRouteUris(integration, "direct"); - urls.push(...CamelUi.getInternalRouteUris(integration, "seda")); - if (urls && urls.length > 0) { - selectOptions.push(...urls.map((value: string) => + const uris: string[] = CamelUi.getInternalUris(files, true, true); + if (uris && uris.length > 0) { + selectOptions.push(...uris.map((value: string) => <SelectOption key={value} value={value.trim()}/>)); } return ( diff --git a/karavan-designer/src/designer/utils/CamelUi.tsx b/karavan-designer/src/designer/utils/CamelUi.tsx index 28718e59..8caf309f 100644 --- a/karavan-designer/src/designer/utils/CamelUi.tsx +++ b/karavan-designer/src/designer/utils/CamelUi.tsx @@ -27,7 +27,7 @@ import { RouteDefinition, ToDefinition } from "karavan-core/lib/model/CamelDefinition"; -import {CamelElement, Integration} from "karavan-core/lib/model/IntegrationDefinition"; +import {CamelElement, Integration, IntegrationFile} from "karavan-core/lib/model/IntegrationDefinition"; import { ActivemqIcon, ApiIcon, AwsIcon, @@ -92,6 +92,7 @@ import { } from "../icons/EipIcons"; import React from "react"; import {TopologyUtils} from "karavan-core/lib/api/TopologyUtils"; +import {getIntegrations} from "../../topology/TopologyApi"; const StepElements: string[] = [ "AggregateDefinition", @@ -342,6 +343,20 @@ export class CamelUi { return result; } + static getInternalUris = (files: IntegrationFile[], direct: boolean, seda: boolean) => { + const urls: string[] = []; + const integrations = getIntegrations(files); + integrations.forEach(i => { + if (direct) { + urls.push(...CamelUi.getInternalRouteUris(i, "direct")) + } + if (seda) { + urls.push(...CamelUi.getInternalRouteUris(i, "seda")); + } + }) + return urls; + } + static getElementTitle = (element: CamelElement): string => { if (element.dslName === 'RouteDefinition') { const routeId = (element as RouteDefinition).id diff --git a/karavan-space/src/designer/property/property/ComponentPropertyField.tsx b/karavan-space/src/designer/property/property/ComponentPropertyField.tsx index 3f13cb1e..925ab18b 100644 --- a/karavan-space/src/designer/property/property/ComponentPropertyField.tsx +++ b/karavan-space/src/designer/property/property/ComponentPropertyField.tsx @@ -70,7 +70,7 @@ export function ComponentPropertyField(props: Props) { const {onParametersChange, getInternalComponentName} = usePropertiesHook(); - const [integration] = useIntegrationStore((state) => [state.integration], shallow) + const [integration, files] = useIntegrationStore((state) => [state.integration, state.files], shallow) const [dark, setSelectedStep, beans] = useDesignerStore((s) => [s.dark, s.setSelectedStep, s.beans], shallow) @@ -150,12 +150,22 @@ export function ComponentPropertyField(props: Props) { } } + function checkUri(startsWith: string): boolean { + if (props.element && props.element.dslName === 'ToDefinition' && property.name === 'name') { + const uri: string = (props.element as ToDefinition).uri || ''; + return uri.startsWith(startsWith); + } else { + return false; + } + } + function getInternalUriSelect(property: ComponentProperty, value: any) { const selectOptions: JSX.Element[] = []; const componentName = getInternalComponentName(property.name, props.element); const internalUris = CamelUi.getInternalRouteUris(integration, componentName, false); - const uris: string [] = []; + let uris: string[] = CamelUi.getInternalUris(files, checkUri('direct'), checkUri('seda')); uris.push(...internalUris); + uris = [...new Set(uris.map(e => e.includes(":") ? e.split(":")?.at(1) || "" : e))] if (value && value.length > 0 && !uris.includes(value)) { uris.unshift(value); } diff --git a/karavan-space/src/designer/property/property/DslPropertyField.tsx b/karavan-space/src/designer/property/property/DslPropertyField.tsx index 43986796..a17dc88d 100644 --- a/karavan-space/src/designer/property/property/DslPropertyField.tsx +++ b/karavan-space/src/designer/property/property/DslPropertyField.tsx @@ -51,7 +51,7 @@ import {CamelDefinitionApiExt} from "karavan-core/lib/api/CamelDefinitionApiExt" import {ExpressionField} from "./ExpressionField"; import {CamelUi, RouteToCreate} from "../../utils/CamelUi"; import {ComponentPropertyField} from "./ComponentPropertyField"; -import {CamelElement} from "karavan-core/lib/model/IntegrationDefinition"; +import {CamelElement, IntegrationFile} from "karavan-core/lib/model/IntegrationDefinition"; import {KameletPropertyField} from "./KameletPropertyField"; import PlusIcon from "@patternfly/react-icons/dist/esm/icons/plus-icon"; import {ObjectField} from "./ObjectField"; @@ -77,6 +77,7 @@ import {BeanProperties} from "./BeanProperties"; import {PropertyPlaceholderDropdown} from "./PropertyPlaceholderDropdown"; import {VariablesDropdown} from "./VariablesDropdown"; import {ROUTE, GLOBAL} from "karavan-core/lib/api/VariableUtil"; +import {getIntegrations} from "../../../topology/TopologyApi"; interface Props { property: PropertyMeta, @@ -92,7 +93,7 @@ interface Props { export function DslPropertyField(props: Props) { - const [integration, setIntegration, addVariable] = useIntegrationStore((s) => [s.integration, s.setIntegration, s.addVariable], shallow) + const [integration, setIntegration, addVariable, files] = useIntegrationStore((s) => [s.integration, s.setIntegration, s.addVariable, s.files], shallow) const [dark, setSelectedStep] = useDesignerStore((s) => [s.dark, s.setSelectedStep], shallow) const [isShowAdvanced, setIsShowAdvanced] = useState<string[]>([]); @@ -107,7 +108,9 @@ export function DslPropertyField(props: Props) { const [variableType, setVariableType] = useState<'global:' | 'route:' | ''>(''); const [checkChanges, setCheckChanges] = useState<boolean>(false); - useEffect(() => setTextVariable(value), []) + useEffect(() => { + setTextVariable(value) + }, []) useEffect(() => { if (checkChanges) { @@ -687,10 +690,9 @@ export function DslPropertyField(props: Props) { function getInternalUriSelect(property: PropertyMeta, value: any) { const selectOptions: JSX.Element[] = []; - const urls = CamelUi.getInternalRouteUris(integration, "direct"); - urls.push(...CamelUi.getInternalRouteUris(integration, "seda")); - if (urls && urls.length > 0) { - selectOptions.push(...urls.map((value: string) => + const uris: string[] = CamelUi.getInternalUris(files, true, true); + if (uris && uris.length > 0) { + selectOptions.push(...uris.map((value: string) => <SelectOption key={value} value={value.trim()}/>)); } return ( diff --git a/karavan-space/src/designer/utils/CamelUi.tsx b/karavan-space/src/designer/utils/CamelUi.tsx index 28718e59..8caf309f 100644 --- a/karavan-space/src/designer/utils/CamelUi.tsx +++ b/karavan-space/src/designer/utils/CamelUi.tsx @@ -27,7 +27,7 @@ import { RouteDefinition, ToDefinition } from "karavan-core/lib/model/CamelDefinition"; -import {CamelElement, Integration} from "karavan-core/lib/model/IntegrationDefinition"; +import {CamelElement, Integration, IntegrationFile} from "karavan-core/lib/model/IntegrationDefinition"; import { ActivemqIcon, ApiIcon, AwsIcon, @@ -92,6 +92,7 @@ import { } from "../icons/EipIcons"; import React from "react"; import {TopologyUtils} from "karavan-core/lib/api/TopologyUtils"; +import {getIntegrations} from "../../topology/TopologyApi"; const StepElements: string[] = [ "AggregateDefinition", @@ -342,6 +343,20 @@ export class CamelUi { return result; } + static getInternalUris = (files: IntegrationFile[], direct: boolean, seda: boolean) => { + const urls: string[] = []; + const integrations = getIntegrations(files); + integrations.forEach(i => { + if (direct) { + urls.push(...CamelUi.getInternalRouteUris(i, "direct")) + } + if (seda) { + urls.push(...CamelUi.getInternalRouteUris(i, "seda")); + } + }) + return urls; + } + static getElementTitle = (element: CamelElement): string => { if (element.dslName === 'RouteDefinition') { const routeId = (element as RouteDefinition).id