From 347bbdf3050e95ced9e9a00a153e8ae254e98c3c Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Wed, 18 Aug 2021 14:25:26 -0700 Subject: [PATCH] Added field to group form --- .../src/main/resources/i18n/messages.properties | 3 +++ ui/public/assets/schema/groups/group.json | 5 +++++ ui/src/app/admin/component/GroupForm.js | 4 +++- ui/src/app/admin/hooks.js | 16 ++++++++++++++++ 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/backend/src/main/resources/i18n/messages.properties b/backend/src/main/resources/i18n/messages.properties index 9789f7299..261600110 100644 --- a/backend/src/main/resources/i18n/messages.properties +++ b/backend/src/main/resources/i18n/messages.properties @@ -489,6 +489,9 @@ label.by=By label.source=Metadata Source label.provider=Metadata Provider +label.url-validation-regex=URL validation regular expression +tooltip.url-validation-regex=URL validation regular expression + message.user-role-admin-group=Cannot change group for ROLE_ADMIN users. message.delete-user-title=Delete User? diff --git a/ui/public/assets/schema/groups/group.json b/ui/public/assets/schema/groups/group.json index 02bcb2dea..518293851 100644 --- a/ui/public/assets/schema/groups/group.json +++ b/ui/public/assets/schema/groups/group.json @@ -17,6 +17,11 @@ "type": "string", "minLength": 1, "maxLength": 255 + }, + "validationRegex": { + "title": "label.url-validation-regex", + "description": "tooltip.url-validation-regex", + "type": "string" } } } \ No newline at end of file diff --git a/ui/src/app/admin/component/GroupForm.js b/ui/src/app/admin/component/GroupForm.js index da8c5af8b..77ec82135 100644 --- a/ui/src/app/admin/component/GroupForm.js +++ b/ui/src/app/admin/component/GroupForm.js @@ -5,7 +5,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faSpinner, faSave } from '@fortawesome/free-solid-svg-icons'; import Translate from '../../i18n/components/translate'; -import { useGroupUiSchema } from '../hooks'; +import { useGroupUiSchema, useGroupUiValidator } from '../hooks'; import { fields, widgets } from '../../form/component'; import { templates } from '../../form/component'; import { FormContext, setFormDataAction, setFormErrorAction } from '../../form/FormManager'; @@ -23,6 +23,7 @@ export function GroupForm ({group = {}, errors = [], loading = false, schema, on }; const uiSchema = useGroupUiSchema(); + const validator = useGroupUiValidator(); return (<>
@@ -49,6 +50,7 @@ export function GroupForm ({group = {}, errors = [], loading = false, schema, on
onChange(form)} + validate={validator} schema={schema} uiSchema={uiSchema} FieldTemplate={templates.FieldTemplate} diff --git a/ui/src/app/admin/hooks.js b/ui/src/app/admin/hooks.js index 28aef201a..483f1edeb 100644 --- a/ui/src/app/admin/hooks.js +++ b/ui/src/app/admin/hooks.js @@ -1,4 +1,6 @@ import useFetch from 'use-http'; +import isNil from 'lodash/isNil'; +import {isValidRegex} from '../core/utility/is_valid_regex'; import API_BASE_PATH from '../App.constant'; export function useGroups (opts = { cachePolicy: 'no-cache' }) { @@ -17,4 +19,18 @@ export function useGroupUiSchema () { 'ui:widget': 'textarea' } }; +} + +export function useGroupUiValidator() { + console.log('hi') + return (formData, errors) => { + console.log(formData, errors) + if (!isNil(formData?.validationRegex)) { + const isValid = isValidRegex(formData.validationRegex); + if (!isValid) { + errors.validationRegex.addError('message.invalid-regex-pattern'); + } + } + return errors; + } } \ No newline at end of file