Skip to content

Commit bd279f0

Browse files
committed
refactor: refactored code
1 parent dca7cc4 commit bd279f0

File tree

2 files changed

+22
-31
lines changed

2 files changed

+22
-31
lines changed

src/discussions/discussions-home/DiscussionsConfirmEmailBanner.jsx

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useState } from 'react';
1+
import React, { useCallback, useState } from 'react';
22

33
import {
44
Button,
@@ -22,22 +22,22 @@ const DiscussionsConfirmEmailBanner = () => {
2222
const isEmailVerified = useSelector(selectIsEmailVerified);
2323
const [showPageBanner, setShowPageBanner] = useState(!isEmailVerified);
2424
const [showConfirmModal, setShowConfirmModal] = useState(false);
25-
const closePageBanner = () => setShowPageBanner(false);
26-
const closeConfirmModal = () => setShowConfirmModal(false);
27-
const openConfirmModal = () => setShowConfirmModal(true);
25+
const closePageBanner = useCallback(() => setShowPageBanner(false), [setShowPageBanner]);
26+
const closeConfirmModal = useCallback(() => setShowConfirmModal(false), [setShowConfirmModal]);
27+
const openConfirmModal = useCallback(() => setShowConfirmModal(true), [setShowConfirmModal]);
2828

29-
if (isEmailVerified) { return null; }
30-
31-
const openConfirmModalButtonClick = () => {
29+
const handleConfirmNowClick = useCallback(() => {
3230
dispatch(sendAccountActivationEmail());
3331
openConfirmModal();
3432
closePageBanner();
35-
};
33+
}, [dispatch, openConfirmModal, closePageBanner]);
3634

37-
const userConfirmEmailButtonClick = () => {
35+
const handleVerifiedClick = useCallback(() => {
3836
closeConfirmModal();
3937
closePageBanner();
40-
};
38+
}, [closeConfirmModal, closePageBanner]);
39+
40+
if (isEmailVerified) { return null; }
4141

4242
return (
4343
<>
@@ -48,7 +48,7 @@ const DiscussionsConfirmEmailBanner = () => {
4848
className="confirm-email-now-button"
4949
variant="link"
5050
size="inline"
51-
onClick={openConfirmModalButtonClick}
51+
onClick={handleConfirmNowClick}
5252
>
5353
{intl.formatMessage(messages.confirmNowButton)}
5454
</Button>
@@ -70,7 +70,7 @@ const DiscussionsConfirmEmailBanner = () => {
7070
</ModalDialog.Hero>
7171
)}
7272
footerNode={(
73-
<Button className="mx-auto my-3" variant="danger" onClick={userConfirmEmailButtonClick}>
73+
<Button className="mx-auto my-3" variant="danger" onClick={handleVerifiedClick}>
7474
{intl.formatMessage(messages.verifiedConfirmEmailButton)}
7575
</Button>
7676
)}
@@ -82,6 +82,4 @@ const DiscussionsConfirmEmailBanner = () => {
8282
);
8383
};
8484

85-
DiscussionsConfirmEmailBanner.propTypes = {};
86-
8785
export default DiscussionsConfirmEmailBanner;

src/discussions/discussions-home/DiscussionsConfirmEmailBanner.test.jsx

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,7 @@ describe('DiscussionsConfirmEmailBanner', () => {
5252
axiosMock.onGet(getDiscussionsConfigUrl(courseId)).reply(200, { isEmailVerified: true });
5353
await executeThunk(fetchCourseConfig(courseId), store.dispatch, store.getState);
5454
renderComponent();
55-
const banner = screen.queryByRole('alert');
56-
expect(banner).toBeNull();
55+
expect(screen.queryByRole('alert')).toBeNull();
5756
});
5857

5958
describe('when email is unverified', () => {
@@ -79,11 +78,9 @@ describe('DiscussionsConfirmEmailBanner', () => {
7978
fireEvent.click(confirmButton);
8079
});
8180
await waitFor(() => {
82-
const modal = screen.getByRole('dialog');
83-
expect(modal).toBeInTheDocument();
84-
const banner = screen.queryByRole('alert');
85-
expect(banner).not.toBeInTheDocument();
86-
expect(axiosMock.history.post.length).toBe(1);
81+
expect(screen.getByRole('dialog')).toBeInTheDocument();
82+
expect(screen.queryByRole('alert')).not.toBeInTheDocument();
83+
expect(axiosMock.history.post).toHaveLength(1);
8784
expect(axiosMock.history.post[0].url).toBe(resendEmailUrl);
8885
});
8986
});
@@ -94,23 +91,19 @@ describe('DiscussionsConfirmEmailBanner', () => {
9491
fireEvent.click(confirmButton);
9592
});
9693
await waitFor(() => {
97-
const modalHeader = screen.getByText(messages.confirmEmailModalHeader.defaultMessage);
98-
expect(modalHeader).toBeInTheDocument();
99-
const modalBody = screen.getByText(messages.confirmEmailModalBody.defaultMessage);
100-
expect(modalBody).toBeInTheDocument();
101-
const confirmImage = screen.getByRole('img', { name: messages.confirmEmailImageAlt.defaultMessage });
102-
expect(confirmImage).toBeInTheDocument();
94+
expect(screen.getByText(messages.confirmEmailModalHeader.defaultMessage)).toBeInTheDocument();
95+
expect(screen.getByText(messages.confirmEmailModalBody.defaultMessage)).toBeInTheDocument();
96+
expect(screen.getByRole('img', { name: messages.confirmEmailImageAlt.defaultMessage })).toBeInTheDocument();
97+
10398
const verifyButton = screen.getByRole('button', { name: messages.verifiedConfirmEmailButton.defaultMessage });
10499
expect(verifyButton).toBeInTheDocument();
105100
act(() => {
106101
fireEvent.click(verifyButton);
107102
});
108103
});
109104
await waitFor(() => {
110-
const modal = screen.queryByRole('dialog');
111-
expect(modal).not.toBeInTheDocument();
112-
const banner = screen.queryByRole('alert');
113-
expect(banner).not.toBeInTheDocument();
105+
expect(screen.queryByRole('dialog')).not.toBeInTheDocument();
106+
expect(screen.queryByRole('alert')).not.toBeInTheDocument();
114107
});
115108
});
116109
});

0 commit comments

Comments
 (0)