diff --git a/backend/src/main/resources/dynamic-http-metadata-provider.schema.json b/backend/src/main/resources/dynamic-http-metadata-provider.schema.json index 8be8bbf9b..5de721ce6 100644 --- a/backend/src/main/resources/dynamic-http-metadata-provider.schema.json +++ b/backend/src/main/resources/dynamic-http-metadata-provider.schema.json @@ -47,13 +47,10 @@ ] }, "match": { + "$id": "match", "title": "label.match", "description": "tooltip.match", - "type": "string", - "widget": { - "id": "string", - "required": true - } + "type": "string" } }, "required": [ diff --git a/ui/src/app/metadata/domain/provider/definition/BaseProviderDefinition.js b/ui/src/app/metadata/domain/provider/definition/BaseProviderDefinition.js index 207eb0a2e..d5d766f38 100644 --- a/ui/src/app/metadata/domain/provider/definition/BaseProviderDefinition.js +++ b/ui/src/app/metadata/domain/provider/definition/BaseProviderDefinition.js @@ -77,6 +77,7 @@ export const BaseProviderDefinition = { } }; }, + overrideSchema: (schema) => schema, uiSchema: { name: { 'ui:help': 'message.must-be-unique' diff --git a/ui/src/app/metadata/domain/provider/definition/DynamicHttpMetadataProviderDefinition.js b/ui/src/app/metadata/domain/provider/definition/DynamicHttpMetadataProviderDefinition.js index 84b694e9a..2786db408 100644 --- a/ui/src/app/metadata/domain/provider/definition/DynamicHttpMetadataProviderDefinition.js +++ b/ui/src/app/metadata/domain/provider/definition/DynamicHttpMetadataProviderDefinition.js @@ -1,14 +1,57 @@ import { BaseProviderDefinition, HttpMetadataResolverAttributesSchema, MetadataFilterPluginsSchema } from './BaseProviderDefinition'; import API_BASE_PATH from '../../../../App.constant'; import defaultsDeep from 'lodash/defaultsDeep'; +import isNil from 'lodash/isNil'; import { DurationOptions } from '../../data'; import { isValidRegex } from '../../../../core/utility/is_valid_regex'; +function findById(o, id) { + //Early return + if (o.$id === id) { + return o; + } + var result, p; + for (p in o) { + if (o.hasOwnProperty(p) && typeof o[p] === 'object') { + result = findById(o[p], id); + if (result) { + return result; + } + } + } + return result; +} + + export const DynamicHttpMetadataProviderWizard = { ...BaseProviderDefinition, label: 'DynamicHttpMetadataProvider', type: 'DynamicHttpMetadataResolver', schema: `${API_BASE_PATH}/ui/MetadataResolver/DynamicHttpMetadataResolver`, + overrideSchema: (schema, models) => { + + const includeMatch = models.some(m => !isNil(m?.metadataRequestURLConstructionScheme?.match)); + + console.log(models) + + if (includeMatch) { + return ({ + ...schema, + properties: { + ...schema.properties, + metadataRequestURLConstructionScheme: { + ...schema.properties.metadataRequestURLConstructionScheme, + properties: { + ...schema.properties.metadataRequestURLConstructionScheme.properties, + match: findById(schema.properties.metadataRequestURLConstructionScheme.dependencies, 'match') + } + } + } + }); + } + + return schema; + }, validator: (data = [], current = { resourceId: null }, group, translator) => { const base = BaseProviderDefinition.validator(data, current, group); diff --git a/ui/src/app/metadata/hoc/MetadataSchema.js b/ui/src/app/metadata/hoc/MetadataSchema.js index 6ee801c28..025e7a415 100644 --- a/ui/src/app/metadata/hoc/MetadataSchema.js +++ b/ui/src/app/metadata/hoc/MetadataSchema.js @@ -54,6 +54,4 @@ export function useMetadataDefinitionValidator(data, current, group) { return definition.validator(data, current, group, translator); } -//getConfigurationSections - export default MetadataSchema; \ No newline at end of file diff --git a/ui/src/app/metadata/hooks/configuration.js b/ui/src/app/metadata/hooks/configuration.js index 0574359a1..0c78cd90f 100644 --- a/ui/src/app/metadata/hooks/configuration.js +++ b/ui/src/app/metadata/hooks/configuration.js @@ -18,5 +18,5 @@ export function useMetadataConfiguration(models, schema, definition, limited = f return {}; } - return getLimitedConfigurationsFn(getConfigurationSections(models, definition, schema), limited); + return getLimitedConfigurationsFn(getConfigurationSections(models, definition, definition.overrideSchema ? definition.overrideSchema(schema, models) : schema), limited); }