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();