From 9010c8844b9c8c0b156c0308055ff205029709ad Mon Sep 17 00:00:00 2001 From: "Ricardo M." Date: Mon, 15 Apr 2024 10:04:56 +0200 Subject: [PATCH] feat(BaseEntity): Allow individual entities to omit fields Currently, there's a single array to omit form fields, and while this works, in some cases, we could be omitting unintended fields. The solution is to allow for individual Entities to provide their own omit fields list. relates to: https://github.com/KaotoIO/kaoto/issues/492 --- .../components/Visualization/Canvas/CanvasForm.tsx | 4 ++-- .../ui/src/models/visualization/base-visual-entity.ts | 3 +++ .../flows/abstract-camel-visual-entity.ts | 5 +++++ .../flows/camel-error-handler-visual-entity.ts | 5 +++++ .../flows/camel-on-exception-visual-entity.ts | 11 ++++++++--- .../flows/camel-rest-configuration-visual-entity.ts | 5 +++++ .../models/visualization/flows/pipe-visual-entity.ts | 5 +++++ 7 files changed, 33 insertions(+), 5 deletions(-) diff --git a/packages/ui/src/components/Visualization/Canvas/CanvasForm.tsx b/packages/ui/src/components/Visualization/Canvas/CanvasForm.tsx index d1140a5ed..c23314bc0 100644 --- a/packages/ui/src/components/Visualization/Canvas/CanvasForm.tsx +++ b/packages/ui/src/components/Visualization/Canvas/CanvasForm.tsx @@ -5,7 +5,6 @@ import { EntitiesContext } from '../../../providers/entities.provider'; import { SchemaBridgeProvider } from '../../../providers/schema-bridge.provider'; import { isDefined, setValue } from '../../../utils'; import { ErrorBoundary } from '../../ErrorBoundary'; -import { SchemaService } from '../../Form'; import { CustomAutoForm, CustomAutoFormRef } from '../../Form/CustomAutoForm'; import { DataFormatEditor } from '../../Form/dataFormat/DataFormatEditor'; import { LoadBalancerEditor } from '../../Form/loadBalancer/LoadBalancerEditor'; @@ -26,6 +25,7 @@ export const CanvasForm: FunctionComponent = (props) => { const formRef = useRef(null); const divRef = useRef(null); const flowIdRef = useRef(undefined); + const omitFields = useRef(props.selectedNode.data?.vizNode?.getBaseEntity()?.getOmitFormFields() || []); const visualComponentSchema = useMemo(() => { const answer = props.selectedNode.data?.vizNode?.getComponentSchema(); @@ -107,7 +107,7 @@ export const CanvasForm: FunctionComponent = (props) => { model={model} onChange={handleOnChangeIndividualProp} sortFields={false} - omitFields={SchemaService.OMIT_FORM_FIELDS} + omitFields={omitFields.current} data-testid="autoform" />
diff --git a/packages/ui/src/models/visualization/base-visual-entity.ts b/packages/ui/src/models/visualization/base-visual-entity.ts index 281c9f3e3..b7abea016 100644 --- a/packages/ui/src/models/visualization/base-visual-entity.ts +++ b/packages/ui/src/models/visualization/base-visual-entity.ts @@ -26,6 +26,9 @@ export interface BaseVisualCamelEntity extends BaseCamelEntity { /** Given a path, get the component type and definition */ getComponentSchema: (path?: string) => VisualComponentSchema | undefined; + /** Returnt fields that should be omitted when configuring this entity */ + getOmitFormFields: () => string[]; + /** Given a path, update the model */ updateModel(path: string | undefined, value: unknown): void; diff --git a/packages/ui/src/models/visualization/flows/abstract-camel-visual-entity.ts b/packages/ui/src/models/visualization/flows/abstract-camel-visual-entity.ts index 236d9e300..4770c6315 100644 --- a/packages/ui/src/models/visualization/flows/abstract-camel-visual-entity.ts +++ b/packages/ui/src/models/visualization/flows/abstract-camel-visual-entity.ts @@ -1,5 +1,6 @@ /* eslint-disable no-case-declarations */ import { ProcessorDefinition, RouteDefinition } from '@kaoto-next/camel-catalog/types'; +import { SchemaService } from '../../../components/Form/schema.service'; import { ROOT_PATH, getArrayProperty, getValue, isDefined, setValue } from '../../../utils'; import { NodeIconResolver } from '../../../utils/node-icon-resolver'; import { DefinedComponent } from '../../camel-catalog-index'; @@ -63,6 +64,10 @@ export abstract class AbstractCamelVisualEntity implements BaseVisualCamelEntity return visualComponentSchema; } + getOmitFormFields(): string[] { + return SchemaService.OMIT_FORM_FIELDS; + } + toJSON() { return { route: this.route }; } diff --git a/packages/ui/src/models/visualization/flows/camel-error-handler-visual-entity.ts b/packages/ui/src/models/visualization/flows/camel-error-handler-visual-entity.ts index 360ab70e4..76b2d5d13 100644 --- a/packages/ui/src/models/visualization/flows/camel-error-handler-visual-entity.ts +++ b/packages/ui/src/models/visualization/flows/camel-error-handler-visual-entity.ts @@ -1,5 +1,6 @@ import { ErrorHandler, ProcessorDefinition } from '@kaoto-next/camel-catalog/types'; import { getCamelRandomId } from '../../../camel-utils/camel-random-id'; +import { SchemaService } from '../../../components/Form/schema.service'; import { useSchemasStore } from '../../../store'; import { isDefined, setValue } from '../../../utils'; import { EntityType } from '../../camel/entities/base-entity'; @@ -67,6 +68,10 @@ export class CamelErrorHandlerVisualEntity implements BaseVisualCamelEntity { }; } + getOmitFormFields(): string[] { + return SchemaService.OMIT_FORM_FIELDS; + } + updateModel(path: string | undefined, value: unknown): void { if (!path) return; diff --git a/packages/ui/src/models/visualization/flows/camel-on-exception-visual-entity.ts b/packages/ui/src/models/visualization/flows/camel-on-exception-visual-entity.ts index db875aa23..b61d37a11 100644 --- a/packages/ui/src/models/visualization/flows/camel-on-exception-visual-entity.ts +++ b/packages/ui/src/models/visualization/flows/camel-on-exception-visual-entity.ts @@ -1,5 +1,6 @@ import { OnException, ProcessorDefinition } from '@kaoto-next/camel-catalog/types'; import { getCamelRandomId } from '../../../camel-utils/camel-random-id'; +import { SchemaService } from '../../../components/Form/schema.service'; import { getArrayProperty, getValue, isDefined, setValue } from '../../../utils'; import { DefinedComponent } from '../../camel-catalog-index'; import { EntityType } from '../../camel/entities/base-entity'; @@ -11,12 +12,12 @@ import { NodeInteraction, VisualComponentSchema, } from '../base-visual-entity'; +import { AbstractCamelVisualEntity } from './abstract-camel-visual-entity'; +import { CamelComponentDefaultService } from './support/camel-component-default.service'; import { CamelComponentSchemaService } from './support/camel-component-schema.service'; +import { CamelProcessorStepsProperties, CamelRouteVisualEntityData } from './support/camel-component-types'; import { CamelStepsService } from './support/camel-steps.service'; import { ModelValidationService } from './support/validators/model-validation.service'; -import { CamelProcessorStepsProperties, CamelRouteVisualEntityData } from './support/camel-component-types'; -import { AbstractCamelVisualEntity } from './abstract-camel-visual-entity'; -import { CamelComponentDefaultService } from './support/camel-component-default.service'; export class CamelOnExceptionVisualEntity implements BaseVisualCamelEntity { id: string; @@ -81,6 +82,10 @@ export class CamelOnExceptionVisualEntity implements BaseVisualCamelEntity { return visualComponentSchema; } + getOmitFormFields(): string[] { + return SchemaService.OMIT_FORM_FIELDS; + } + updateModel(path: string | undefined, value: unknown): void { if (!path) return; diff --git a/packages/ui/src/models/visualization/flows/camel-rest-configuration-visual-entity.ts b/packages/ui/src/models/visualization/flows/camel-rest-configuration-visual-entity.ts index d56711772..6f11e3439 100644 --- a/packages/ui/src/models/visualization/flows/camel-rest-configuration-visual-entity.ts +++ b/packages/ui/src/models/visualization/flows/camel-rest-configuration-visual-entity.ts @@ -2,6 +2,7 @@ import { ProcessorDefinition, RestConfiguration } from '@kaoto-next/camel-catalo import Ajv, { ValidateFunction } from 'ajv-draft-04'; import addFormats from 'ajv-formats'; import { getCamelRandomId } from '../../../camel-utils/camel-random-id'; +import { SchemaService } from '../../../components/Form/schema.service'; import { isDefined, setValue } from '../../../utils'; import { EntityType } from '../../camel/entities/base-entity'; import { CatalogKind } from '../../catalog-kind'; @@ -77,6 +78,10 @@ export class CamelRestConfigurationVisualEntity implements BaseVisualCamelEntity }; } + getOmitFormFields(): string[] { + return SchemaService.OMIT_FORM_FIELDS; + } + updateModel(path: string | undefined, value: unknown): void { if (!path) return; diff --git a/packages/ui/src/models/visualization/flows/pipe-visual-entity.ts b/packages/ui/src/models/visualization/flows/pipe-visual-entity.ts index 6fc9fb316..103eaf1c3 100644 --- a/packages/ui/src/models/visualization/flows/pipe-visual-entity.ts +++ b/packages/ui/src/models/visualization/flows/pipe-visual-entity.ts @@ -2,6 +2,7 @@ import { Pipe } from '@kaoto-next/camel-catalog/types'; import get from 'lodash/get'; import set from 'lodash/set'; import { getCamelRandomId } from '../../../camel-utils/camel-random-id'; +import { SchemaService } from '../../../components/Form/schema.service'; import { getArrayProperty, NodeIconResolver } from '../../../utils'; import { DefinedComponent } from '../../camel-catalog-index'; import { EntityType } from '../../camel/entities'; @@ -64,6 +65,10 @@ export class PipeVisualEntity implements BaseVisualCamelEntity { return KameletSchemaService.getVisualComponentSchema(stepModel); } + getOmitFormFields(): string[] { + return SchemaService.OMIT_FORM_FIELDS; + } + toJSON() { return this.spec; }