From 0e894f5de4d212bbff0d56b1eabed4940a8c9bb2 Mon Sep 17 00:00:00 2001 From: Jeoffrey Haeyaert Date: Thu, 29 Jul 2021 18:38:00 +0200 Subject: [PATCH] fix(gv-policy-studio): make dynamic properties backward compatible Related to gravitee-io/issues#5910 --- package-lock.json | 4 +- src/organisms/gv-properties.js | 66 ++++++++++++++------------- src/policy-studio/gv-policy-studio.js | 3 ++ 3 files changed, 40 insertions(+), 33 deletions(-) diff --git a/package-lock.json b/package-lock.json index 88053791..0d8de702 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24667,8 +24667,8 @@ "binary-extensions": "^2.2.0", "diff": "^5.0.0", "minimatch": "^3.0.4", - "npm-package-arg": "^8.1.1", - "pacote": "^11.3.0", + "npm-package-arg": "^8.1.4", + "pacote": "^11.3.4", "tar": "^6.1.0" } }, diff --git a/src/organisms/gv-properties.js b/src/organisms/gv-properties.js index 5cc8897b..4d50d4c2 100644 --- a/src/organisms/gv-properties.js +++ b/src/organisms/gv-properties.js @@ -45,6 +45,7 @@ import { empty } from '../styles/empty'; export class GvProperties extends KeyboardElement(LitElement) { static get properties() { return { + dynamicPropertySchema: { type: Object }, properties: { type: Array }, _properties: { type: Array, attribute: false }, provider: { type: Object }, @@ -208,44 +209,47 @@ export class GvProperties extends KeyboardElement(LitElement) { } _onConfigureDynamicProperties() { - const providersTitleMap = this.providers.reduce((map, provider) => { - map[provider.id] = provider.key; - return map; - }, {}); - - const providersEnum = Object.keys(providersTitleMap); - const defaultSchema = { - properties: { - enabled: { - type: 'boolean', - title: 'Enabled', - description: ' This service is requiring an API deployment. Do not forget to deploy API to start dynamic-properties service.', - }, - schedule: { - type: 'string', - title: 'Schedule', - 'x-schema-form': { - 'cron-expression': true, + if (this.dynamicPropertySchema == null) { + // dynamicPropertySchema has been introduced to ensure backward compatibility with old versions. If no schema is provided a default schema will be used. + const providersTitleMap = this.providers.reduce((map, provider) => { + map[provider.id] = provider.key; + return map; + }, {}); + + const providersEnum = Object.keys(providersTitleMap); + this.dynamicPropertySchema = { + properties: { + enabled: { + type: 'boolean', + title: 'Enabled', + description: ' This service is requiring an API deployment. Do not forget to deploy API to start dynamic-properties service.', }, - }, - provider: { - type: 'string', - title: 'Provider type', - enum: providersEnum, - default: providersEnum[0], - 'x-schema-form': { - titleMap: providersTitleMap, + schedule: { + type: 'string', + title: 'Schedule', + 'x-schema-form': { + 'cron-expression': true, + }, + }, + provider: { + type: 'string', + title: 'Provider type', + enum: providersEnum, + default: providersEnum[0], + 'x-schema-form': { + titleMap: providersTitleMap, + }, }, }, - }, - required: ['schedule', 'provider'], - }; + required: ['schedule', 'provider'], + }; + } const defaultProvider = this.providers[0]; this._propertySchemaForm = { - properties: { ...defaultSchema.properties, configuration: defaultProvider.schema }, - required: defaultSchema.required, + properties: { ...this.dynamicPropertySchema.properties, configuration: defaultProvider.schema }, + required: this.dynamicPropertySchema.required, }; this._providerDocumentation = defaultProvider.documentation; this._maximizeBottomView(); diff --git a/src/policy-studio/gv-policy-studio.js b/src/policy-studio/gv-policy-studio.js index 030b0603..2e0076bf 100644 --- a/src/policy-studio/gv-policy-studio.js +++ b/src/policy-studio/gv-policy-studio.js @@ -48,6 +48,7 @@ const FLOW_STEP_FORM_ID = 'flow-step-form'; * @attr {Array} services - Services available * @attr {Array} resourceTypes - Resources types available * @attr {Array} propertyProviders - Providers of properties + * @attr {Array} dynamicPropertySchema - Schema for the dynamic property form * @attr {String} tabId - Current tabId to display (design, settings, properties or resources) * @attr {Object} definition - The definition of flows * @attr {Object} documentation - The documentation to display @@ -70,6 +71,7 @@ export class GvPolicyStudio extends KeyboardElement(LitElement) { services: { type: Object }, resourceTypes: { type: Array, attribute: 'resource-types' }, propertyProviders: { type: Array, attribute: 'property-providers' }, + dynamicPropertySchema: { type: Object, attribute: 'dynamic-property-schema' }, tabId: { type: String, attribute: 'tab-id' }, _tabId: { type: String, attribute: false }, definition: { type: Object }, @@ -1704,6 +1706,7 @@ export class GvPolicyStudio extends KeyboardElement(LitElement) { ?readonly="${readonlyMode}" .properties="${this.definedProperties}" .providers="${this.propertyProviders}" + .dynamicPropertySchema="${this.dynamicPropertySchema}" >