diff --git a/src/apps/dashboard/routes/users/add.tsx b/src/apps/dashboard/routes/users/add.tsx index ffb8d3dc04..d61b2f502b 100644 --- a/src/apps/dashboard/routes/users/add.tsx +++ b/src/apps/dashboard/routes/users/add.tsx @@ -149,9 +149,17 @@ const UserNew = () => { }).catch(err => { console.error('[usernew] failed to update user policy', err); }); - }, function () { - toast(globalize.translate('ErrorDefault')); - loading.hide(); + }, function (error) { + try { + console.error('[usernew] failed to create new user', error); + error.text().then((errorMessage: string) => { + toast(errorMessage); + loading.hide(); + }); + } catch { + toast(globalize.translate('ErrorDefault')); + loading.hide(); + } }); }; @@ -198,6 +206,7 @@ const UserNew = () => { type='text' id='txtUsername' label='LabelName' + validator={{ pattern: '^([\\w \\-\'._@+]*)([\\w\\-\'._@+])([\\w \\-\'._@+]*)$', errMessage: globalize.translate('MessageInvalidUsernameFormat') }} options={'required'} /> diff --git a/src/apps/dashboard/routes/users/profile.tsx b/src/apps/dashboard/routes/users/profile.tsx index 36afb9ca9f..baf8c93132 100644 --- a/src/apps/dashboard/routes/users/profile.tsx +++ b/src/apps/dashboard/routes/users/profile.tsx @@ -230,7 +230,16 @@ const UserEdit = () => { )).then(() => { onSaveComplete(); }).catch(err => { - console.error('[useredit] failed to update user', err); + try { + console.error('[useredit] failed to update user', err); + err.text().then((errorMessage: string) => { + toast(errorMessage); + loading.hide(); + }); + } catch { + toast(globalize.translate('ErrorDefault')); + loading.hide(); + } }); }; @@ -318,6 +327,7 @@ const UserEdit = () => { type='text' id='txtUserName' label='LabelName' + validator={{ pattern: '^([\\w \\-\'._@+]*)([\\w\\-\'._@+])([\\w \\-\'._@+]*)$', errMessage: globalize.translate('MessageInvalidUsernameFormat') }} options={'required'} /> diff --git a/src/elements/InputElement.tsx b/src/elements/InputElement.tsx index ae7e757b69..c181b53057 100644 --- a/src/elements/InputElement.tsx +++ b/src/elements/InputElement.tsx @@ -2,23 +2,30 @@ import React, { type FC, useCallback, useEffect, useMemo, useRef } from 'react'; import globalize from 'lib/globalize'; +import './InputElementInvalidMessage.scss'; + interface CreateInputElementParams { type?: string id?: string label?: string initialValue?: string + validator?: { pattern: string, errMessage: string } options?: string } -const createInputElement = ({ type, id, label, initialValue, options }: CreateInputElementParams) => ({ +const createInputElement = ({ type, id, label, initialValue, validator, options }: CreateInputElementParams) => ({ __html: `` + /> +