From cb4692f5c72277693f47884e7ab5ddf5377a390e Mon Sep 17 00:00:00 2001 From: JOSHUA Date: Tue, 6 Feb 2024 12:12:18 +0300 Subject: [PATCH 1/9] rerun build --- .../change-password-button.component.tsx | 29 +++ .../change-password-button.scss | 4 + .../change-password-button.test.tsx | 24 +++ .../change-password-modal.component.tsx | 197 ++++++++++++++++++ .../change-password-modal.scss | 9 + .../change-password-modal.test.tsx | 18 ++ .../change-password-model.resource.ts | 16 ++ packages/esm-system-admin-app/src/index.ts | 10 + packages/esm-system-admin-app/src/routes.json | 14 ++ .../esm-system-admin-app/translations/ar.json | 19 +- .../esm-system-admin-app/translations/en.json | 19 +- 11 files changed, 357 insertions(+), 2 deletions(-) create mode 100644 packages/esm-system-admin-app/src/change-password-button/change-password-button.component.tsx create mode 100644 packages/esm-system-admin-app/src/change-password-button/change-password-button.scss create mode 100644 packages/esm-system-admin-app/src/change-password-button/change-password-button.test.tsx create mode 100644 packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx create mode 100644 packages/esm-system-admin-app/src/change-password-modal/change-password-modal.scss create mode 100644 packages/esm-system-admin-app/src/change-password-modal/change-password-modal.test.tsx create mode 100644 packages/esm-system-admin-app/src/change-password-modal/change-password-model.resource.ts diff --git a/packages/esm-system-admin-app/src/change-password-button/change-password-button.component.tsx b/packages/esm-system-admin-app/src/change-password-button/change-password-button.component.tsx new file mode 100644 index 0000000..85e8254 --- /dev/null +++ b/packages/esm-system-admin-app/src/change-password-button/change-password-button.component.tsx @@ -0,0 +1,29 @@ +import React, { useCallback } from 'react'; +import { useTranslation } from 'react-i18next'; +import { SwitcherItem } from '@carbon/react'; +import { Settings } from '@carbon/react/icons'; +import { showModal } from '@openmrs/esm-framework'; +import styles from './change-password-button.scss'; + +export interface ChangePasswordLinkProps {} + +const ChangePasswordLink: React.FC = () => { + const { t } = useTranslation(); + + const launchChangePasswordModal = useCallback(() => { + showModal('change-password-modal'); + }, []); + + return ( + <> + +
+ +

{t('changePassword', 'Change Password')}

+
+
+ + ); +}; + +export default ChangePasswordLink; diff --git a/packages/esm-system-admin-app/src/change-password-button/change-password-button.scss b/packages/esm-system-admin-app/src/change-password-button/change-password-button.scss new file mode 100644 index 0000000..dd58114 --- /dev/null +++ b/packages/esm-system-admin-app/src/change-password-button/change-password-button.scss @@ -0,0 +1,4 @@ +.changePasswordButton { + width: 16rem; + display: inline-flex; +} diff --git a/packages/esm-system-admin-app/src/change-password-button/change-password-button.test.tsx b/packages/esm-system-admin-app/src/change-password-button/change-password-button.test.tsx new file mode 100644 index 0000000..bf67dc8 --- /dev/null +++ b/packages/esm-system-admin-app/src/change-password-button/change-password-button.test.tsx @@ -0,0 +1,24 @@ +import React from 'react'; +import ChangePasswordButton from './change-password-button.component'; +import { render, screen } from '@testing-library/react'; +import { showModal } from '@openmrs/esm-framework'; +import userEvent from '@testing-library/user-event'; + +const showModalMock = showModal as jest.Mock; + +describe('', () => { + beforeEach(() => { + render(); + }); + + it('should display the `Change Password` button', async () => { + const user = userEvent.setup(); + const changePasswordButton = await screen.findByRole('button', { + name: /Change Password/i, + }); + + await user.click(changePasswordButton); + + expect(showModalMock).toHaveBeenCalledWith('change-password-modal'); + }); +}); diff --git a/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx b/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx new file mode 100644 index 0000000..847b875 --- /dev/null +++ b/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx @@ -0,0 +1,197 @@ +import React, { useCallback, useEffect, useRef, useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import { Button, ModalBody, ModalFooter, ModalHeader, Tile, PasswordInput, Form, Layer } from '@carbon/react'; +import { navigate, showSnackbar } from '@openmrs/esm-framework'; +import styles from './change-password-modal.scss'; +import { performPasswordChange } from './change-password-model.resource'; + +interface ChangePasswordModalProps { + close(): void; +} + +export default function ChangePasswordModal({ close }: ChangePasswordModalProps) { + const { t } = useTranslation(); + const [isSavingPassword, setIsSavingPassword] = useState(false); + const oldPasswordInputRef = useRef(null); + const newPasswordInputRef = useRef(null); + const confirmPasswordInputRef = useRef(null); + const formRef = useRef(null); + const [newPasswordError, setNewPasswordErr] = useState(''); + const [oldPasswordError, setOldPasswordErr] = useState(''); + const [confirmPasswordError, setConfirmPasswordError] = useState(''); + const [isOldPasswordInvalid, setIsOldPasswordInvalid] = useState(true); + const [isNewPasswordInvalid, setIsNewPasswordInvalid] = useState(true); + const [isConfirmPasswordInvalid, setIsConfirmPasswordInvalid] = useState(true); + const [passwordInput, setPasswordInput] = useState({ + oldPassword: '', + newPassword: '', + confirmPassword: '', + }); + + const handleValidation = useCallback( + (passwordInputValue, passwordInputFieldName) => { + if (passwordInputFieldName === 'newPassword') { + const uppercaseRegExp = /(?=.*?[A-Z])/; + const lowercaseRegExp = /(?=.*?[a-z])/; + const digitsRegExp = /(?=.*?[0-9])/; + const minLengthRegExp = /.{8,}/; + const passwordLength = passwordInputValue.length; + const uppercasePassword = uppercaseRegExp.test(passwordInputValue); + const lowercasePassword = lowercaseRegExp.test(passwordInputValue); + const digitsPassword = digitsRegExp.test(passwordInputValue); + const minLengthPassword = minLengthRegExp.test(passwordInputValue); + let errMsg = ''; + if (passwordLength === 0) { + errMsg = t('passwordIsEmpty', 'Password is empty'); + } else if (!uppercasePassword) { + errMsg = t('atLeastOneUppercase', 'At least one Uppercase'); + } else if (!lowercasePassword) { + errMsg = t('atLeastOneLowercase', 'At least one Lowercase'); + } else if (!digitsPassword) { + errMsg = t('atLeastOneDigit', 'At least one digit'); + } else if (!minLengthPassword) { + errMsg = t('minimum8Characters', 'Minimum 8 characters'); + } else if (passwordInput.oldPassword.length > 0 && passwordInput.newPassword === passwordInput.oldPassword) { + errMsg = t('newPasswordMustNotBeTheSameAsOld', 'New password must not be the same as password'); + } else { + errMsg = ''; + setIsNewPasswordInvalid(false); + } + setNewPasswordErr(errMsg); + } else if ( + passwordInputFieldName === 'confirmPassword' || + (passwordInputFieldName === 'newPassword' && passwordInput.confirmPassword.length > 0) + ) { + if (passwordInput.confirmPassword !== passwordInput.newPassword) { + setConfirmPasswordError(t('confirmPasswordMustBeTheSameAsNew', 'Confirm password must be the same as new')); + } else { + setConfirmPasswordError(''); + setIsConfirmPasswordInvalid(false); + } + } else { + if (passwordInput.newPassword.length > 0 && passwordInput.newPassword === passwordInput.oldPassword) { + setOldPasswordErr(t('oldPasswordMustNotBeTheSameAsNew', 'Old password must not be the same as new')); + } else { + setOldPasswordErr(''); + setIsOldPasswordInvalid(false); + } + } + }, + [passwordInput.confirmPassword, passwordInput.newPassword, passwordInput.oldPassword, t], + ); + + useEffect(() => { + if (passwordInput.oldPassword !== '') { + handleValidation(passwordInput.oldPassword, 'oldPassword'); + } + if (passwordInput.newPassword !== '') { + handleValidation(passwordInput.newPassword, 'newPassword'); + } + if (passwordInput.confirmPassword !== '') { + handleValidation(passwordInput.confirmPassword, 'confirmPassword'); + } + }, [handleValidation, passwordInput]); + + const handlePasswordChange = (event) => { + const passwordInputValue = event.target.value.trim(); + const passwordInputFieldName = event.target.name; + const NewPasswordInput = { ...passwordInput, [passwordInputFieldName]: passwordInputValue }; + setPasswordInput(NewPasswordInput); + }; + + const handleSubmit = useCallback( + async (evt: React.FormEvent) => { + evt.preventDefault(); + setIsSavingPassword(true); + performPasswordChange(passwordInput.oldPassword, passwordInput.confirmPassword) + .then(() => { + close(); + navigate({ to: `\${openmrsSpaBase}/logout` }); + showSnackbar({ + isLowContrast: true, + kind: 'success', + subtitle: t('userPasswordUpdated', 'User password updated successfully'), + title: t('userPassword', 'User password'), + }); + }) + .catch((error) => { + setIsSavingPassword(false); + showSnackbar({ + title: t('invalidPasswordCredentials', 'Invalid password provided'), + kind: 'error', + isLowContrast: false, + subtitle: error?.message, + }); + }); + }, + [close, passwordInput.confirmPassword, passwordInput.oldPassword, t], + ); + + return ( + <> + + + +
+
+ + 0} + invalidText={oldPasswordError} + labelText={t('oldPassword', 'Old Password')} + name="oldPassword" + value={passwordInput.oldPassword} + onChange={handlePasswordChange} + ref={oldPasswordInputRef} + required + showPasswordLabel="Show old password" + /> + + + 0} + invalidText={newPasswordError} + labelText={t('newPassword', 'New Password')} + name="newPassword" + value={passwordInput.newPassword} + onChange={handlePasswordChange} + ref={newPasswordInputRef} + required + showPasswordLabel="Show new password" + /> + + + 0} + invalidText={confirmPasswordError} + labelText={t('confirmPassword', 'Confirm Password')} + name="confirmPassword" + value={passwordInput.confirmPassword} + onChange={handlePasswordChange} + ref={confirmPasswordInputRef} + required + showPasswordLabel="Show confirm password" + /> + +
+
+
+
+ + + + + + ); +} diff --git a/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.scss b/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.scss new file mode 100644 index 0000000..22476c8 --- /dev/null +++ b/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.scss @@ -0,0 +1,9 @@ +.input-group { + :global(.cds--label) { + margin-top: 1rem; + } + + :global(.cds--text-input) { + background-color: white; + } +} diff --git a/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.test.tsx b/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.test.tsx new file mode 100644 index 0000000..bc17d86 --- /dev/null +++ b/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.test.tsx @@ -0,0 +1,18 @@ +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import ChangePasswordModal from './change-password-modal.component'; +import userEvent from '@testing-library/user-event'; + +describe(`Change Password Modal`, () => { + it('should change user locale', async () => { + const user = userEvent.setup(); + + render(); + expect(screen.getByRole('button', { name: /Apply/ })).toBeDisabled(); + + await user.type(screen.getByLabelText(/Old Password/i), 'my-password'); + await user.type(screen.getByLabelText(/New Password/i), 'my-password'); + await user.type(screen.getByLabelText(/Confirm Password/i), 'my-password'); + await user.click(screen.getByRole('button', { name: /Apply/i })); + }); +}); diff --git a/packages/esm-system-admin-app/src/change-password-modal/change-password-model.resource.ts b/packages/esm-system-admin-app/src/change-password-modal/change-password-model.resource.ts new file mode 100644 index 0000000..61195cb --- /dev/null +++ b/packages/esm-system-admin-app/src/change-password-modal/change-password-model.resource.ts @@ -0,0 +1,16 @@ +import { openmrsFetch } from '@openmrs/esm-framework'; + +export async function performPasswordChange(oldPassword: string, newPassword: string) { + return openmrsFetch(`/ws/rest/v1/password`, { + headers: { + 'Content-Type': 'application/json', + }, + method: 'POST', + body: { + oldPassword: oldPassword, + newPassword: newPassword, + }, + }).then((res) => { + return res; + }); +} diff --git a/packages/esm-system-admin-app/src/index.ts b/packages/esm-system-admin-app/src/index.ts index b209060..ea9ec44 100644 --- a/packages/esm-system-admin-app/src/index.ts +++ b/packages/esm-system-admin-app/src/index.ts @@ -34,3 +34,13 @@ export const legacySystemAdminPageCardLink = getAsyncLifecycle( () => import('./dashboard/legacy-admin-page-link.component'), options, ); + +export const changePasswordButton = getAsyncLifecycle( + () => import('./change-password-button/change-password-button.component'), + options, +); + +export const changePasswordModal = getAsyncLifecycle( + () => import('./change-password-modal/change-password-modal.component'), + options, +); diff --git a/packages/esm-system-admin-app/src/routes.json b/packages/esm-system-admin-app/src/routes.json index 7e07604..1bd85a5 100644 --- a/packages/esm-system-admin-app/src/routes.json +++ b/packages/esm-system-admin-app/src/routes.json @@ -15,6 +15,20 @@ "slot": "system-admin-page-card-link-slot", "component": "legacySystemAdminPageCardLink", "order": 0 + }, + { + "name": "change-password", + "slot": "user-panel-slot", + "component": "changePasswordButton", + "online": true, + "offline": true, + "order": 3 + }, + { + "name": "change-password-modal", + "component": "changePasswordModal", + "online": true, + "offline": true } ], "pages": [ diff --git a/packages/esm-system-admin-app/translations/ar.json b/packages/esm-system-admin-app/translations/ar.json index b4f6659..86ba147 100644 --- a/packages/esm-system-admin-app/translations/ar.json +++ b/packages/esm-system-admin-app/translations/ar.json @@ -1,5 +1,22 @@ { + "atLeastOneDigit": "رقم واحد على الأقل", + "atLeastOneLowercase": "حرف صغير واحد على الأقل", + "atLeastOneUppercase": "حرف كبير واحد على الأقل", + "cancel": "يلغي", + "changePassword": "تغيير كلمة المرور", "config": "الإعدادات", + "confirmPassword": "تأكيد كلمة المرور", + "confirmPasswordMustBeTheSameAsNew": "تأكيد كلمة المرور يجب أن تكون هي نفسها الجديدة", + "invalidPasswordCredentials": "", "legacyAdmin": "إدارة النظام القديم", - "systemAdmin": "إدارة النظام" + "minimum8Characters": "الحد الأدنى 8 أحرف", + "newPassword": "كلمة المرور الجديدة", + "newPasswordMustNotBeTheSameAsOld": "كلمة المرور الجديدة يجب ألا تكون نفس كلمة المرور", + "oldPassword": "كلمة المرور القديمة", + "oldPasswordMustNotBeTheSameAsNew": "يجب ألا تكون كلمة المرور القديمة هي نفس كلمة المرور الجديدة", + "passwordIsEmpty": "كلمة المرور فارغة", + "systemAdmin": "إدارة النظام", + "updatePassword": "تطوير كلمة السر", + "userPassword": "كلمة مرور المستخدم", + "userPasswordUpdated": "تم تحديث كلمة مرور المستخدم بنجاح" } diff --git a/packages/esm-system-admin-app/translations/en.json b/packages/esm-system-admin-app/translations/en.json index d4964b7..7ed3e04 100644 --- a/packages/esm-system-admin-app/translations/en.json +++ b/packages/esm-system-admin-app/translations/en.json @@ -1,5 +1,22 @@ { + "atLeastOneDigit": "At least one digit", + "atLeastOneLowercase": "At least one Lowercase", + "atLeastOneUppercase": "At least one Uppercase", + "cancel": "Cancel", + "changePassword": "Change Password", "config": "Configurations", + "confirmPassword": "Confirm Password", + "confirmPasswordMustBeTheSameAsNew": "Confirm password must be the same as new", + "invalidPasswordCredentials": "", "legacyAdmin": "Legacy Admin", - "systemAdmin": "System Administration" + "minimum8Characters": "Minimum 8 characters", + "newPassword": "New Password", + "newPasswordMustNotBeTheSameAsOld": "New password must not be the same as password", + "oldPassword": "Old Password", + "oldPasswordMustNotBeTheSameAsNew": "Old password must not be the same as new", + "passwordIsEmpty": "Password is empty", + "systemAdmin": "System Administration", + "updatePassword": "Update Password", + "userPassword": "User password", + "userPasswordUpdated": "User password updated successfully" } From 70a8f2db530b0ba349d9b6fe2ee13ffcc5772880 Mon Sep 17 00:00:00 2001 From: jnsereko <58003327+jnsereko@users.noreply.github.com> Date: Tue, 6 Feb 2024 12:17:03 +0300 Subject: [PATCH 2/9] Update ar.json --- packages/esm-system-admin-app/translations/ar.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/esm-system-admin-app/translations/ar.json b/packages/esm-system-admin-app/translations/ar.json index 86ba147..b12ba13 100644 --- a/packages/esm-system-admin-app/translations/ar.json +++ b/packages/esm-system-admin-app/translations/ar.json @@ -9,6 +9,7 @@ "confirmPasswordMustBeTheSameAsNew": "تأكيد كلمة المرور يجب أن تكون هي نفسها الجديدة", "invalidPasswordCredentials": "", "legacyAdmin": "إدارة النظام القديم", + "systemAdmin": "إدارة النظام" "minimum8Characters": "الحد الأدنى 8 أحرف", "newPassword": "كلمة المرور الجديدة", "newPasswordMustNotBeTheSameAsOld": "كلمة المرور الجديدة يجب ألا تكون نفس كلمة المرور", From cae39eaedbb20f1ef500cbcbbec8a672b17faa91 Mon Sep 17 00:00:00 2001 From: jnsereko <58003327+jnsereko@users.noreply.github.com> Date: Tue, 6 Feb 2024 12:17:58 +0300 Subject: [PATCH 3/9] Update en.json --- packages/esm-system-admin-app/translations/en.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/esm-system-admin-app/translations/en.json b/packages/esm-system-admin-app/translations/en.json index 7ed3e04..b29c2a1 100644 --- a/packages/esm-system-admin-app/translations/en.json +++ b/packages/esm-system-admin-app/translations/en.json @@ -9,6 +9,7 @@ "confirmPasswordMustBeTheSameAsNew": "Confirm password must be the same as new", "invalidPasswordCredentials": "", "legacyAdmin": "Legacy Admin", + "systemAdmin": "System Administration" "minimum8Characters": "Minimum 8 characters", "newPassword": "New Password", "newPasswordMustNotBeTheSameAsOld": "New password must not be the same as password", From 615974863c9269f9d90900422efdacc1cae091dc Mon Sep 17 00:00:00 2001 From: jnsereko <58003327+jnsereko@users.noreply.github.com> Date: Tue, 6 Feb 2024 13:51:44 +0300 Subject: [PATCH 4/9] Update packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx Co-authored-by: Dennis Kigen --- .../change-password-modal/change-password-modal.component.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx b/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx index 847b875..2a26ab3 100644 --- a/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx +++ b/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx @@ -42,7 +42,7 @@ export default function ChangePasswordModal({ close }: ChangePasswordModalProps) const minLengthPassword = minLengthRegExp.test(passwordInputValue); let errMsg = ''; if (passwordLength === 0) { - errMsg = t('passwordIsEmpty', 'Password is empty'); + errMsg = t('passwordRequired', 'Your password cannot be blank. Please enter a password.'); } else if (!uppercasePassword) { errMsg = t('atLeastOneUppercase', 'At least one Uppercase'); } else if (!lowercasePassword) { From a2feec69f04ecbad8199c670e845d43365223e74 Mon Sep 17 00:00:00 2001 From: jnsereko <58003327+jnsereko@users.noreply.github.com> Date: Tue, 6 Feb 2024 13:51:58 +0300 Subject: [PATCH 5/9] Update packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx Co-authored-by: Dennis Kigen --- .../change-password-modal/change-password-modal.component.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx b/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx index 2a26ab3..0557de2 100644 --- a/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx +++ b/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx @@ -44,7 +44,7 @@ export default function ChangePasswordModal({ close }: ChangePasswordModalProps) if (passwordLength === 0) { errMsg = t('passwordRequired', 'Your password cannot be blank. Please enter a password.'); } else if (!uppercasePassword) { - errMsg = t('atLeastOneUppercase', 'At least one Uppercase'); + errMsg = t('atLeastOneUppercaseLetterRequired', 'Your password must contain at least one uppercase letter (A-Z)'); } else if (!lowercasePassword) { errMsg = t('atLeastOneLowercase', 'At least one Lowercase'); } else if (!digitsPassword) { From 31a16d54c264239040257da2393e08f1c85cd9e6 Mon Sep 17 00:00:00 2001 From: jnsereko <58003327+jnsereko@users.noreply.github.com> Date: Tue, 6 Feb 2024 13:52:10 +0300 Subject: [PATCH 6/9] Update packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx Co-authored-by: Dennis Kigen --- .../change-password-modal/change-password-modal.component.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx b/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx index 0557de2..daa14ea 100644 --- a/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx +++ b/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx @@ -46,7 +46,7 @@ export default function ChangePasswordModal({ close }: ChangePasswordModalProps) } else if (!uppercasePassword) { errMsg = t('atLeastOneUppercaseLetterRequired', 'Your password must contain at least one uppercase letter (A-Z)'); } else if (!lowercasePassword) { - errMsg = t('atLeastOneLowercase', 'At least one Lowercase'); + errMsg = t('atLeastOneLowercaseLetterRequired', 'Your password must contain at least one lowercase letter (a-z)'); } else if (!digitsPassword) { errMsg = t('atLeastOneDigit', 'At least one digit'); } else if (!minLengthPassword) { From 12e1898c5e54f281d38b1917351e7ba8cd893049 Mon Sep 17 00:00:00 2001 From: jnsereko <58003327+jnsereko@users.noreply.github.com> Date: Tue, 6 Feb 2024 13:52:20 +0300 Subject: [PATCH 7/9] Update packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx Co-authored-by: Dennis Kigen --- .../change-password-modal/change-password-modal.component.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx b/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx index daa14ea..1909cf5 100644 --- a/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx +++ b/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx @@ -48,7 +48,7 @@ export default function ChangePasswordModal({ close }: ChangePasswordModalProps) } else if (!lowercasePassword) { errMsg = t('atLeastOneLowercaseLetterRequired', 'Your password must contain at least one lowercase letter (a-z)'); } else if (!digitsPassword) { - errMsg = t('atLeastOneDigit', 'At least one digit'); + errMsg = t('atLeastOneNumberRequired', 'Your password must include at least one number (0-9).'); } else if (!minLengthPassword) { errMsg = t('minimum8Characters', 'Minimum 8 characters'); } else if (passwordInput.oldPassword.length > 0 && passwordInput.newPassword === passwordInput.oldPassword) { From 3e17fb669c997a27995537f4983e99dcf1e69199 Mon Sep 17 00:00:00 2001 From: jnsereko <58003327+jnsereko@users.noreply.github.com> Date: Tue, 6 Feb 2024 13:52:30 +0300 Subject: [PATCH 8/9] Update packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx Co-authored-by: Dennis Kigen --- .../change-password-modal/change-password-modal.component.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx b/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx index 1909cf5..1b0b096 100644 --- a/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx +++ b/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx @@ -50,7 +50,7 @@ export default function ChangePasswordModal({ close }: ChangePasswordModalProps) } else if (!digitsPassword) { errMsg = t('atLeastOneNumberRequired', 'Your password must include at least one number (0-9).'); } else if (!minLengthPassword) { - errMsg = t('minimum8Characters', 'Minimum 8 characters'); + errMsg = t('minCharacterLengthRequired', 'Your password must contain at least 8 characters.'); } else if (passwordInput.oldPassword.length > 0 && passwordInput.newPassword === passwordInput.oldPassword) { errMsg = t('newPasswordMustNotBeTheSameAsOld', 'New password must not be the same as password'); } else { From c7431e5b39306eee7f9304740a7f48489cac3853 Mon Sep 17 00:00:00 2001 From: jnsereko <58003327+jnsereko@users.noreply.github.com> Date: Tue, 6 Feb 2024 13:52:52 +0300 Subject: [PATCH 9/9] Update packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx Co-authored-by: Dennis Kigen --- .../change-password-modal/change-password-modal.component.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx b/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx index 1b0b096..639ad60 100644 --- a/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx +++ b/packages/esm-system-admin-app/src/change-password-modal/change-password-modal.component.tsx @@ -110,8 +110,8 @@ export default function ChangePasswordModal({ close }: ChangePasswordModalProps) showSnackbar({ isLowContrast: true, kind: 'success', - subtitle: t('userPasswordUpdated', 'User password updated successfully'), - title: t('userPassword', 'User password'), + title: t('passwordChanged', 'Password changed'), + subtitle: t('passwordUpdatedSuccessfully', 'Your password has been successfully updated.') }); }) .catch((error) => {