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 2237352d7..035e8d4e0 100644 --- a/backend/src/main/resources/dynamic-http-metadata-provider.schema.json +++ b/backend/src/main/resources/dynamic-http-metadata-provider.schema.json @@ -45,7 +45,6 @@ "title": "label.xml-id", "description": "tooltip.xml-id", "type": "string", - "default": "", "minLength": 1 }, "metadataRequestURLConstructionScheme": { @@ -118,8 +117,7 @@ ], "description": "value.false" } - ], - "default": true + ] }, "failFastInitialization": { "title": "label.fail-fast-init", @@ -141,8 +139,7 @@ ], "description": "value.false" } - ], - "default": true + ] }, "dynamicMetadataResolverAttributes": { "type": "object", @@ -179,7 +176,6 @@ "PT24H" ] }, - "default": null, "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" }, "maxCacheDuration": { @@ -201,7 +197,6 @@ "PT24H" ] }, - "default": null, "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" }, "maxIdleEntityData": { @@ -223,7 +218,6 @@ "PT24H" ] }, - "default": null, "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" }, "removeIdleEntityData": { @@ -246,8 +240,7 @@ ], "description": "value.false" } - ], - "default": true + ] }, "cleanupTaskInterval": { "title": "label.cleanup-task-interval", @@ -268,14 +261,12 @@ "PT24H" ] }, - "default": null, "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" }, "persistentCacheManagerDirectory": { "title": "label.persistent-cache-manager-directory", "description": "tooltip.persistent-cache-manager-directory", "type": "string", - "default": "", "minLength": 1 }, "initializeFromPersistentCacheInBackground": { @@ -298,8 +289,7 @@ ], "description": "value.false" } - ], - "default": true + ] }, "backgroundInitializationFromCacheDelay": { "title": "label.background-init-from-cache-delay", @@ -325,7 +315,6 @@ true ] }, - "default": null, "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" } } @@ -405,16 +394,14 @@ ], "description": "False" } - ], - "default": false + ] }, "httpClientRef": { "type": "string", "title": "", "description": "", "placeholder": "", - "widget": "hidden", - "default": "" + "widget": "hidden" }, "connectionRequestTimeout": { "type": "string", @@ -435,7 +422,6 @@ "PT24H" ] }, - "default": null, "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" }, "connectionTimeout": { @@ -457,7 +443,6 @@ "PT24H" ] }, - "default": null, "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" }, "socketTimeout": { @@ -479,7 +464,6 @@ "PT24H" ] }, - "default": null, "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" }, "tlsTrustEngineRef": { @@ -487,44 +471,38 @@ "title": "", "description": "", "placeholder": "", - "widget": "hidden", - "default": "" + "widget": "hidden" }, "httpClientSecurityParametersRef": { "type": "string", "title": "", "description": "", "placeholder": "", - "widget": "hidden", - "default": "" + "widget": "hidden" }, "proxyHost": { "type": "string", "title": "label.proxy-host", "description": "tooltip.proxy-host", - "placeholder": "", - "default": "" + "placeholder": "" }, "proxyPort": { "type": "string", "title": "label.proxy-port", "description": "tooltip.proxy-port", - "placeholder": "", - "default": "" + "placeholder": "" }, "proxyUser": { "type": "string", "title": "label.proxy-user", "description": "tooltip.proxy-user", - "placeholder": "", - "default": "" + "placeholder": "" }, "proxyPassword": { "type": "string", "title": "label.proxy-password", "description": "tooltip.proxy-password", - "placeholder": "", - "default": "" + "placeholder": "" }, "httpCaching": { "type": "string", @@ -566,7 +544,6 @@ "title": "label.http-max-cache-entries", "description": "tooltip.http-max-cache-entries", "placeholder": "", - "default": 0, "minimum": 0 }, "httpMaxCacheEntrySize": { @@ -574,7 +551,6 @@ "title": "label.max-cache-entry-size", "description": "tooltip.max-cache-entry-size", "placeholder": "", - "default": 0, "minimum": 0 } } @@ -613,7 +589,6 @@ "PT24H" ] }, - "default": null, "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" } } @@ -629,8 +604,7 @@ "requireSignedRoot": { "title": "label.require-signed-root", "description": "tooltip.require-signed-root", - "type": "boolean", - "default": true + "type": "boolean" }, "certificateFile": { "title": "label.certificate-file", @@ -698,14 +672,12 @@ "removeRolelessEntityDescriptors": { "title": "label.remove-roleless-entity-descriptors", "description": "tooltip.remove-roleless-entity-descriptors", - "type": "boolean", - "default": true + "type": "boolean" }, "removeEmptyEntitiesDescriptors": { "title": "label.remove-empty-entities-descriptors", "description": "tooltip.remove-empty-entities-descriptors", - "type": "boolean", - "default": true + "type": "boolean" } } } diff --git a/backend/src/main/resources/entity-attributes-filters-ui-schema.json b/backend/src/main/resources/entity-attributes-filters-ui-schema.json index c7bb95b1a..fa64d5abb 100644 --- a/backend/src/main/resources/entity-attributes-filters-ui-schema.json +++ b/backend/src/main/resources/entity-attributes-filters-ui-schema.json @@ -95,44 +95,37 @@ "signAssertion": { "title": "label.sign-the-assertion", "description": "tooltip.sign-assertion", - "type": "boolean", - "default": false + "type": "boolean" }, "dontSignResponse": { "title": "label.dont-sign-the-response", "description": "tooltip.dont-sign-response", - "type": "boolean", - "default": false + "type": "boolean" }, "turnOffEncryption": { "title": "label.turn-off-encryption-of-response", "description": "tooltip.turn-off-encryption", - "type": "boolean", - "default": false + "type": "boolean" }, "useSha": { "title": "label.use-sha1-signing-algorithm", "description": "tooltip.usa-sha-algorithm", - "type": "boolean", - "default": false + "type": "boolean" }, "ignoreAuthenticationMethod": { "title": "label.ignore-any-sp-requested-authentication-method", "description": "tooltip.ignore-auth-method", - "type": "boolean", - "default": false + "type": "boolean" }, "forceAuthn": { "title": "label.force-authn", "description": "tooltip.force-authn", - "type": "boolean", - "default": false + "type": "boolean" }, "omitNotBefore": { "title": "label.omit-not-before-condition", "type": "boolean", - "description": "tooltip.omit-not-before-condition", - "default": false + "description": "tooltip.omit-not-before-condition" }, "responderId": { "title": "label.responder-id", @@ -157,8 +150,7 @@ "urn:oasis:names:tc:SAML:2.0:nameid-format:transient" ] } - }, - "default": null + } }, "authenticationMethods": { "title": "label.authentication-methods-to-use", @@ -177,8 +169,7 @@ "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport" ] } - }, - "default": null + } } } }, diff --git a/backend/src/main/resources/file-system-metadata-provider.schema.json b/backend/src/main/resources/file-system-metadata-provider.schema.json index f6037c79b..b7b2292d9 100644 --- a/backend/src/main/resources/file-system-metadata-provider.schema.json +++ b/backend/src/main/resources/file-system-metadata-provider.schema.json @@ -39,14 +39,12 @@ "title": "label.xml-id", "description": "tooltip.xml-id", "type": "string", - "default": "", "minLength": 1 }, "metadataFile": { "title": "label.metadata-file", "description": "tooltip.metadata-file", "type": "string", - "default": "", "minLength": 1 }, "enabled": { @@ -75,8 +73,7 @@ ], "description": "value.false" } - ], - "default": false + ] }, "reloadableMetadataResolverAttributes": { "type": "object", @@ -100,7 +97,6 @@ "PT24H" ] }, - "default": null, "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" }, "maxRefreshDelay": { @@ -122,7 +118,6 @@ "PT24H" ] }, - "default": null, "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" }, "refreshDelayFactor": { diff --git a/backend/src/main/resources/filebacked-http-metadata-provider.schema.json b/backend/src/main/resources/filebacked-http-metadata-provider.schema.json index 505fe6ebd..ee27e6330 100644 --- a/backend/src/main/resources/filebacked-http-metadata-provider.schema.json +++ b/backend/src/main/resources/filebacked-http-metadata-provider.schema.json @@ -64,14 +64,12 @@ "title": "label.xml-id", "description": "tooltip.xml-id", "type": "string", - "default": "", "minLength": 1 }, "metadataURL": { "title": "label.metadata-url", "description": "tooltip.metadata-url", "type": "string", - "default": "", "minLength": 1 }, "initializeFromBackupFile": { @@ -94,14 +92,12 @@ ], "description": "value.false" } - ], - "default": true + ] }, "backingFile": { "title": "label.backing-file", "description": "tooltip.backing-file", - "type": "string", - "default": "" + "type": "string" }, "backupFileInitNextRefreshDelay": { "title": "label.backup-file-init-refresh-delay", @@ -121,7 +117,6 @@ "PT24H" ] }, - "default": null, "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" }, "requireValidMetadata": { @@ -144,8 +139,7 @@ ], "description": "value.false" } - ], - "default": true + ] }, "failFastInitialization": { "title": "label.fail-fast-init", @@ -167,8 +161,7 @@ ], "description": "value.false" } - ], - "default": true + ] }, "useDefaultPredicateRegistry": { "title": "label.use-default-predicate-reg", @@ -190,8 +183,7 @@ ], "description": "value.false" } - ], - "default": true + ] }, "satisfyAnyPredicates": { "$id": "satisfyAnyPredicates", @@ -214,8 +206,7 @@ ], "description": "value.false" } - ], - "default": false + ] }, "httpMetadataResolverAttributes": { "$id": "httpMetadataResolverAttributes", @@ -477,7 +468,6 @@ "PT24H" ] }, - "default": null, "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" }, "maxRefreshDelay": { @@ -499,7 +489,6 @@ "PT24H" ] }, - "default": null, "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" }, "refreshDelayFactor": { @@ -551,7 +540,6 @@ "PT24H" ] }, - "default": null, "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" } } @@ -567,8 +555,7 @@ "requireSignedRoot": { "title": "label.require-signed-root", "description": "tooltip.require-signed-root", - "type": "boolean", - "default": true + "type": "boolean" }, "certificateFile": { "title": "label.certificate-file", @@ -636,14 +623,12 @@ "removeRolelessEntityDescriptors": { "title": "label.remove-roleless-entity-descriptors", "description": "tooltip.remove-roleless-entity-descriptors", - "type": "boolean", - "default": true + "type": "boolean" }, "removeEmptyEntitiesDescriptors": { "title": "label.remove-empty-entities-descriptors", "description": "tooltip.remove-empty-entities-descriptors", - "type": "boolean", - "default": true + "type": "boolean" } } } diff --git a/backend/src/main/resources/local-dynamic-metadata-provider.schema.json b/backend/src/main/resources/local-dynamic-metadata-provider.schema.json index c7cfeb360..df9c432e4 100644 --- a/backend/src/main/resources/local-dynamic-metadata-provider.schema.json +++ b/backend/src/main/resources/local-dynamic-metadata-provider.schema.json @@ -39,14 +39,12 @@ "title": "label.xml-id", "description": "tooltip.xml-id", "type": "string", - "default": "", "minLength": 1 }, "sourceDirectory": { "title": "label.source-directory", "description": "tooltip.source-directory", "type": "string", - "default": "", "minLength": 1 }, "enabled": { @@ -91,7 +89,6 @@ "PT24H" ] }, - "default": null, "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" }, "maxCacheDuration": { @@ -114,7 +111,6 @@ "PT24H" ] }, - "default": null, "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" }, "maxIdleEntityData": { @@ -137,7 +133,6 @@ "PT24H" ] }, - "default": null, "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" }, "removeIdleEntityData": { @@ -160,8 +155,7 @@ ], "description": "value.false" } - ], - "default": true + ] }, "cleanupTaskInterval": { "title": "label.cleanup-task-interval", @@ -183,7 +177,6 @@ "PT24H" ] }, - "default": null, "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" } } diff --git a/backend/src/main/resources/metadata-sources-ui-schema.json b/backend/src/main/resources/metadata-sources-ui-schema.json index 156dffce2..89a312a9f 100644 --- a/backend/src/main/resources/metadata-sources-ui-schema.json +++ b/backend/src/main/resources/metadata-sources-ui-schema.json @@ -81,8 +81,7 @@ ], "description": "value.false" } - ], - "default": false + ] }, "authenticationRequestsSigned": { "title": "label.authentication-requests-signed", @@ -104,8 +103,7 @@ ], "description": "value.false" } - ], - "default": false + ] }, "wantAssertionsSigned": { "title": "label.want-assertions-signed", @@ -127,8 +125,7 @@ ], "description": "value.false" } - ], - "default": false + ] }, "x509Certificates": { "title": "label.x509-certificates", @@ -316,8 +313,7 @@ ], "description": "value.both" } - ], - "default": "both" + ] }, "value": { "title": "label.certificate", @@ -394,8 +390,7 @@ "makeDefault": { "title": "label.mark-as-default", "description": "tooltip.mark-as-default", - "type": "boolean", - "default": false + "type": "boolean" } } }, diff --git a/backend/src/main/resources/nameid-filter.schema.json b/backend/src/main/resources/nameid-filter.schema.json index db562abe5..0416092d0 100644 --- a/backend/src/main/resources/nameid-filter.schema.json +++ b/backend/src/main/resources/nameid-filter.schema.json @@ -116,8 +116,7 @@ "removeExistingFormats": { "type": "boolean", "title": "label.remove-existing-formats", - "description": "tooltip.remove-existing-formats", - "default": false + "description": "tooltip.remove-existing-formats" }, "formats": { "$ref": "#/definitions/nameIdFormats" diff --git a/ui/src/app/metadata/provider/container/provider-edit-step.component.ts b/ui/src/app/metadata/provider/container/provider-edit-step.component.ts index 79f8d33bc..0a8e1e5ef 100644 --- a/ui/src/app/metadata/provider/container/provider-edit-step.component.ts +++ b/ui/src/app/metadata/provider/container/provider-edit-step.component.ts @@ -99,12 +99,16 @@ export class ProviderEditStepComponent implements OnDestroy { this.valueChangeEmitted$.pipe( map(changes => changes.value), - withLatestFrom(this.definition$, this.store.select(fromProvider.getSelectedProvider)), + withLatestFrom( + this.definition$, + this.store.select(fromProvider.getSelectedProvider) + ), filter(([ changes, definition, provider ]) => definition && changes && provider), map(([ changes, definition, provider ]) => { + const staticFilterTypes = Object.keys(changes.metadataFilters); const appliedFilters = changes && changes.metadataFilters ? { ...changes, - metadataFilters: Object.keys(changes.metadataFilters).reduce((filters, filterType) => ({ + metadataFilters: staticFilterTypes.reduce((filters, filterType) => ({ ...filters, [filterType]: { ...provider.metadataFilters.find(f => f['@type'] === filterType) || {}, @@ -112,7 +116,7 @@ export class ProviderEditStepComponent implements OnDestroy { } }), {}) } : changes; - const parsed = definition.parser(appliedFilters); + const parsed = definition.parser(appliedFilters, provider); return parsed; }) ) diff --git a/ui/src/app/metadata/provider/model/base.provider.form.ts b/ui/src/app/metadata/provider/model/base.provider.form.ts index 1fce5263d..8152faa79 100644 --- a/ui/src/app/metadata/provider/model/base.provider.form.ts +++ b/ui/src/app/metadata/provider/model/base.provider.form.ts @@ -1,5 +1,6 @@ import { Wizard } from '../../../wizard/model'; import { BaseMetadataProvider } from '../../domain/model/providers'; +import { filterTypeFn } from '../../filter/reducer'; import { getFilteredProviderNames, getFilteredProviderXmlIds } from '../reducer'; export const BaseMetadataProviderEditor: Wizard = { @@ -44,26 +45,39 @@ export const BaseMetadataProviderEditor: Wizard = { }; return validators; }, - parser: (changes: any): BaseMetadataProvider => (changes.metadataFilters ? ({ - ...changes, - metadataFilters: [ - ...Object.keys(changes.metadataFilters).reduce((collection, filterName) => ([ - ...collection, - { - ...changes.metadataFilters[filterName], - '@type': filterName - } - ]), []) - ] - }) : changes), - formatter: (changes: BaseMetadataProvider): any => (changes.metadataFilters ? ({ - ...changes, - metadataFilters: { - ...(changes.metadataFilters || []).reduce((collection, filter) => ({ - ...collection, - [filter['@type']]: filter - }), {}) + parser: (changes: any, provider: any): BaseMetadataProvider => { + if (!changes.metadataFilters) { + return changes; } - }) : changes), + const staticFilterTypes = Object.keys(changes.metadataFilters); + const filterList = filterTypeFn(provider.metadataFilters); + return { + ...changes, + metadataFilters: [ + ...staticFilterTypes.reduce((collection, filterName) => ([ + ...collection, + { + ...changes.metadataFilters[filterName], + '@type': filterName + } + ]), []), + ...filterList + ] + }; + }, + formatter: (changes: BaseMetadataProvider): any => { + if (!changes.metadataFilters) { + return changes; + } + return { + ...changes, + metadataFilters: { + ...(changes.metadataFilters || []).reduce((collection, filter) => ({ + ...collection, + [filter['@type']]: filter + }), {}) + } + }; + }, steps: [] }; diff --git a/ui/src/app/schema-form/widget/number/float.component.ts b/ui/src/app/schema-form/widget/number/float.component.ts index 9ad124211..bcdb2b5a8 100644 --- a/ui/src/app/schema-form/widget/number/float.component.ts +++ b/ui/src/app/schema-form/widget/number/float.component.ts @@ -37,13 +37,15 @@ export class CustomFloatComponent extends IntegerWidget implements AfterViewInit control.valueChanges.subscribe((newValue) => { const native = (this.element.nativeElement); this._displayValue = newValue; - if (newValue === '' && native.validity.badInput) { + if (newValue === '' && this.required) { this.formProperty.setValue(native.valueAsNumber, false); this.formProperty.extendErrors([{ code: 'INVALID_NUMBER', path: `#${this.formProperty.path}`, message: 'Invalid number', }]); + } else if (newValue === '' && !this.required) { + this.formProperty.setValue(null, false); } else { this.formProperty.setValue(newValue, false); }