diff --git a/backend/src/main/resources/i18n/messages.properties b/backend/src/main/resources/i18n/messages.properties
index 17781cbc9..60b8dfd78 100644
--- a/backend/src/main/resources/i18n/messages.properties
+++ b/backend/src/main/resources/i18n/messages.properties
@@ -466,6 +466,7 @@ message.delete-attribute-title=Delete Attribute?
message.delete-attribute-body=You are requesting to delete a custom attribute. If you complete this process the attribute will be removed. This cannot be undone. Do you wish to continue?
message.must-be-unique=Must be unique.
+message.must-be-number=Must be a number.
message.name-must-be-unique=Name must be unique.
message.uri-valid-format=URI must be valid format.
message.id-unique=ID must be unique.
diff --git a/ui/src/app/form/component/widgets/RadioWidget.js b/ui/src/app/form/component/widgets/RadioWidget.js
index 987a88e2e..c92d63e95 100644
--- a/ui/src/app/form/component/widgets/RadioWidget.js
+++ b/ui/src/app/form/component/widgets/RadioWidget.js
@@ -33,9 +33,6 @@ const RadioWidget = ({
const inline = Boolean(options && options.inline);
-
- console.log(enumOptions, id);
-
return (
diff --git a/ui/src/app/metadata/domain/source/SourceDefinition.js b/ui/src/app/metadata/domain/source/SourceDefinition.js
index cef3eaba1..f82662a58 100644
--- a/ui/src/app/metadata/domain/source/SourceDefinition.js
+++ b/ui/src/app/metadata/domain/source/SourceDefinition.js
@@ -1,8 +1,8 @@
-import { defaults } from 'lodash';
+import { defaults, merge, toNumber, uniq } from 'lodash';
import defaultsDeep from 'lodash/defaultsDeep';
import API_BASE_PATH from '../../../App.constant';
import {removeNull} from '../../../core/utility/remove_null';
-
+import { updatedDiff, detailedDiff } from 'deep-object-diff';
export const SourceBase = {
label: 'Metadata Source',
@@ -26,18 +26,6 @@ export const SourceBase = {
if (entityIds.indexOf(formData.entityId) > -1) {
errors.entityId.addError('message.id-unique');
}
-
- /*if (!formData?.relyingPartyOverrides?.signAssertion && formData?.relyingPartyOverrides?.dontSignResponse) {
- errors = {
- ...errors,
- relyingPartyOverrides: {
- dontSignResponse: {
- __errors: ['message.invalid-signing'],
- nonBlocking: true
- }
- }
- };
- }*/
return errors;
}
},
@@ -56,6 +44,27 @@ export const SourceBase = {
return warnings;
},
+ bindings: (original, formData) => {
+
+ let d = { ...formData };
+
+ if (formData.assertionConsumerServices && formData.assertionConsumerServices.length) {
+ const { updated, added } = detailedDiff(original.assertionConsumerServices, formData.assertionConsumerServices);
+ const merged = merge(updated, added);
+ const changingDefault = Object.keys(merged).some(k => merged[k].hasOwnProperty('makeDefault'));
+ if (changingDefault) {
+ const settingToTrue = Object.keys(merged).some(k => merged[k].makeDefault === true);
+ if (settingToTrue) {
+ d.assertionConsumerServices = d.assertionConsumerServices.map((s, i) => ({
+ ...s,
+ makeDefault: i === toNumber(Object.keys(merged)[0])
+ }));
+ }
+ }
+ }
+ return d;
+ },
+
uiSchema: {
'ui:order': ['serviceProviderName', '*'],
layout: {
diff --git a/ui/src/app/metadata/editor/MetadataEditorForm.js b/ui/src/app/metadata/editor/MetadataEditorForm.js
index 22689ff8c..1d2b7ecad 100644
--- a/ui/src/app/metadata/editor/MetadataEditorForm.js
+++ b/ui/src/app/metadata/editor/MetadataEditorForm.js
@@ -8,6 +8,8 @@ import { templates } from '../../form/component';
import { useUiSchema } from '../hooks/schema';
import Alert from 'react-bootstrap/Alert';
+import { updatedDiff } from 'deep-object-diff';
+
const invisErrors = ['const', 'oneOf']
function ErrorListTemplate () {
@@ -29,6 +31,11 @@ export function MetadataEditorForm({ metadata, definition, schema, current, onCh
const transformErrors = (errors) => {
return errors.filter(e => invisErrors.indexOf(e.name) === -1);
}
+
+ const onFormChange = (form) => {
+ onChange(definition.bindings ? { ...form, formData: definition.bindings(data, form.formData) }: form);
+ };
+
return (
<>
{step.locked &&
@@ -49,8 +56,8 @@ export function MetadataEditorForm({ metadata, definition, schema, current, onCh
}