Skip to content

Commit

Permalink
Fixed name validation
Browse files Browse the repository at this point in the history
  • Loading branch information
rmathis committed Dec 6, 2022
1 parent 655874b commit 4c0b3eb
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 17 deletions.
10 changes: 0 additions & 10 deletions ui/src/app/dynamic-registration/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,3 @@ export function useDynamicRegistrationJsonSchema(opts = {}) {
export function useDynamicRegistrationUiSchema() {
return DynamicConfigurationDefinition.uiSchema;
}
export function useDynamicRegistrationValidator(registrations) {
const names = registrations.map(s => s.name);

return (formData, errors) => {
if (names.indexOf(formData.name) > -1) {
errors.name.addError('message.name-unique');
}
return errors;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,25 @@ import { faSpinner, faSave } from '@fortawesome/free-solid-svg-icons';
import Translate from '../../i18n/components/translate';

import { FormContext, setFormDataAction, setFormErrorAction } from '../../form/FormManager';
import { useDynamicRegistrationUiSchema, useDynamicRegistrationValidator } from '../api';
import { useDynamicRegistrationUiSchema } from '../api';
import Row from 'react-bootstrap/Row';
import Col from 'react-bootstrap/Col';
import { useGetDynamicRegistrationsQuery } from '../../store/dynamic-registration/DynamicRegistrationSlice';
import DynamicRegistrationDefinition from '../hoc/DynamicConfigurationDefinition';


export function DynamicRegistrationForm ({registration = {}, errors = [], loading = false, schema, onSave, onCancel}) {
export function DynamicRegistrationForm ({registration = {}, errors = [], current = {}, loading = false, schema, onSave, onCancel}) {

const {data: registrations = []} = useGetDynamicRegistrationsQuery();

const [touched, setTouched] = React.useState(false);

const { dispatch } = React.useContext(FormContext);
const onChange = ({formData, errors, ...props}) => {
dispatch(setFormDataAction(formData));
dispatch(setFormErrorAction(errors));
setTouched(true);
};

const uiSchema = useDynamicRegistrationUiSchema();
const validator = useDynamicRegistrationValidator(registrations);
const validator = DynamicRegistrationDefinition.validator(registrations, current?.name);

return (<>
<div className="container-fluid">
Expand All @@ -35,7 +33,7 @@ export function DynamicRegistrationForm ({registration = {}, errors = [], loadin
<Button variant="info" className="me-2"
type="button"
onClick={() => onSave(registration)}
disabled={!touched || errors.length > 0 || loading}
disabled={errors.length > 0 || loading}
aria-label="Save changes to the dynamic registration. You will return to the dashboard">
<FontAwesomeIcon icon={loading ? faSpinner : faSave} pulse={loading} />&nbsp;
<Translate value="action.save">Save</Translate>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,17 @@ export const DynamicRegistrationDefinition = {
parser: (changes) => changes,
formatter: (changes) => changes,
display: (changes) => changes,
validator: (data = [], current = '') => {

const names = data.map(s => s.name).filter(n => n !== current);

return (formData, errors) => {
if (names.indexOf(formData.name) > -1) {
errors.name.addError('message.name-unique');
}
return errors;
}
}
}

export default DynamicRegistrationDefinition;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ export function DynamicRegistrationEdit () {
<>
<DynamicRegistrationForm
registration={data}
current={detail}
errors={errors}
schema={schema}
loading={loading}
Expand Down

0 comments on commit 4c0b3eb

Please sign in to comment.