diff --git a/client/hooks/useForm.ts b/client/hooks/useForm.ts index 5db76c03f6f..9e22dc921ab 100644 --- a/client/hooks/useForm.ts +++ b/client/hooks/useForm.ts @@ -175,12 +175,13 @@ export const useForm = < initialValue, value: newValue, key: name, + values: state.values, }); }, }), {}, ), - [onChange, state.fields], + [onChange, state.fields, state.values], ); return { diff --git a/client/views/admin/users/AddUser.js b/client/views/admin/users/AddUser.js index 075f9582b8a..d8c0c13f314 100644 --- a/client/views/admin/users/AddUser.js +++ b/client/views/admin/users/AddUser.js @@ -33,15 +33,20 @@ export function AddUser({ roles, onReload, ...props }) { ...errors, email: !email.trim().length ? t('The_field_is_required', t('email')) : undefined, })), - password: (password) => + password: (password, values) => setErrors((errors) => ({ ...errors, - password: !password.trim().length ? t('The_field_is_required', t('password')) : undefined, + password: !password.trim().length && !values.setRandomPassword ? t('The_field_is_required', t('password')) : undefined, + })), + setRandomPassword: (setRandomPassword, values) => + setErrors((errors) => ({ + ...errors, + password: !values.password.trim().length && !setRandomPassword ? t('The_field_is_required', t('password')) : undefined, })), }; - const validateForm = ({ key, value }) => { - validationKeys[key] && validationKeys[key](value); + const validateForm = ({ key, value, values }) => { + validationKeys[key] && validationKeys[key](value, values); }; const { values, handlers, reset, hasUnsavedChanges } = useForm( @@ -77,11 +82,14 @@ export function AddUser({ roles, onReload, ...props }) { const handleSave = useMutableCallback(async () => { Object.entries(values).forEach(([key, value]) => { - validateForm({ key, value }); + validateForm({ key, value, values }); }); - const { name, username, password, email } = values; - if (name === '' || username === '' || password === '' || email === '') { + const { name, username, password, email, setRandomPassword } = values; + if (name === '' || username === '' || email === '') { + return false; + } + if (password === '' && setRandomPassword === false) { return false; }