diff --git a/src/_style.scss b/src/_style.scss
index 8e471aad..9c0bbcf2 100644
--- a/src/_style.scss
+++ b/src/_style.scss
@@ -311,6 +311,38 @@ select.form-control {
.pt-10 {
padding-top: 10px;
}
+.tooltip-shadow {
+ box-shadow: 0px 5px 15px 0px rgba(0,0,0,0.3) !important;
+}
+#password-requirement-left {
+ .tooltip-inner {
+ @extend .tooltip-shadow;
+ background: white;
+ display: block;
+ color: #707070;
+ }
+ .arrow::before {
+ border-left-color: #fff;
+ @extend .tooltip-shadow;
+ }
+
+}
+
+#password-requirement-top {
+ .tooltip-inner {
+ background: white;
+ max-width: 465px;
+ width: 465px;
+ display: block;
+ @extend .tooltip-shadow;
+ color: #707070;
+ }
+ .arrow::before {
+ border-top-color: #fff;
+ @extend .tooltip-shadow;
+ }
+
+}
@media (min-width: 1024px) {
.mw-500 {
diff --git a/src/common-components/PasswordField.jsx b/src/common-components/PasswordField.jsx
index 08d32985..179493b5 100644
--- a/src/common-components/PasswordField.jsx
+++ b/src/common-components/PasswordField.jsx
@@ -29,9 +29,9 @@ const PasswordField = (props) => {
const ShowButton = (
);
-
+ const placement = window.innerWidth < 768 ? 'top' : 'left';
const tooltip = (
-
+
{LETTER_REGEX.test(props.value) ? : }
{formatMessage(messages['one.letter'])}
@@ -46,12 +46,11 @@ const PasswordField = (props) => {
);
-
return (
-
+
setShowTooltip(props.showRequirements && true)}
+ handleFocus={() => setTimeout(() => setShowTooltip(props.showRequirements && true), 150)}
handleBlur={handleBlur}
type={isPasswordHidden ? 'password' : 'text'}
trailingElement={isPasswordHidden ? ShowButton : HideButton}
diff --git a/src/common-components/tests/FormField.test.jsx b/src/common-components/tests/FormField.test.jsx
index 32290a9f..7cf0c918 100644
--- a/src/common-components/tests/FormField.test.jsx
+++ b/src/common-components/tests/FormField.test.jsx
@@ -48,10 +48,14 @@ describe('PasswordField', () => {
it('should show password requirement tooltip on focus', async () => {
const passwordField = mount();
- await act(async () => { passwordField.find('input').simulate('focus'); });
+ jest.useFakeTimers();
+ await act(async () => {
+ passwordField.find('input').simulate('focus');
+ jest.runAllTimers();
+ });
passwordField.update();
- expect(passwordField.find('#password-requirement').exists()).toBeTruthy();
+ expect(passwordField.find('#password-requirement-left').exists()).toBeTruthy();
});
it('should show all password requirement checks as failed', async () => {
@@ -60,8 +64,12 @@ describe('PasswordField', () => {
value: '',
};
+ jest.useFakeTimers();
const passwordField = mount();
- await act(async () => { passwordField.find('input').simulate('focus'); });
+ await act(async () => {
+ passwordField.find('input').simulate('focus');
+ jest.runAllTimers();
+ });
passwordField.update();
expect(passwordField.find('#letter-check span').prop('className')).toEqual('pgn__icon mr-1');
@@ -71,9 +79,10 @@ describe('PasswordField', () => {
it('should update password requirement checks', async () => {
const passwordField = mount();
-
+ jest.useFakeTimers();
await act(async () => {
passwordField.find('input').simulate('focus');
+ jest.runAllTimers();
});
passwordField.update();