Skip to content

Commit 3115fc2

Browse files
refactor: replacing injectIntl with useIntl() part 3 (#460)
1 parent f49c6a5 commit 3115fc2

File tree

12 files changed

+91
-103
lines changed

12 files changed

+91
-103
lines changed

src/components/DemoAlert/index.jsx

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React from 'react';
22
import PropTypes from 'prop-types';
33

4-
import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
4+
import { useIntl } from '@edx/frontend-platform/i18n';
55
import {
66
ActionRow,
77
AlertModal,
@@ -11,29 +11,30 @@ import {
1111
import messages from './messages';
1212

1313
export const DemoAlert = ({
14-
intl: { formatMessage },
1514
isOpen,
1615
onClose,
17-
}) => (
18-
<AlertModal
19-
title={formatMessage(messages.title)}
20-
isOpen={isOpen}
21-
onClose={onClose}
22-
footerNode={(
23-
<ActionRow>
24-
<Button variant="primary" onClick={onClose}>
25-
{formatMessage(messages.confirm)}
26-
</Button>
27-
</ActionRow>
16+
}) => {
17+
const { formatMessage } = useIntl();
18+
return (
19+
<AlertModal
20+
title={formatMessage(messages.title)}
21+
isOpen={isOpen}
22+
onClose={onClose}
23+
footerNode={(
24+
<ActionRow>
25+
<Button variant="primary" onClick={onClose}>
26+
{formatMessage(messages.confirm)}
27+
</Button>
28+
</ActionRow>
2829
)}
29-
>
30-
<p>{formatMessage(messages.warningMessage)}</p>
31-
</AlertModal>
32-
);
30+
>
31+
<p>{formatMessage(messages.warningMessage)}</p>
32+
</AlertModal>
33+
);
34+
};
3335
DemoAlert.propTypes = {
34-
intl: intlShape.isRequired,
3536
isOpen: PropTypes.bool.isRequired,
3637
onClose: PropTypes.func.isRequired,
3738
};
3839

39-
export default injectIntl(DemoAlert);
40+
export default DemoAlert;

src/components/DemoAlert/index.test.jsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ jest.unmock('react');
99

1010
describe('DemoAlert component', () => {
1111
const props = {
12-
intl: { formatMessage },
1312
isOpen: true,
1413
onClose: jest.fn().mockName('props.onClose'),
1514
};

src/components/FilePreview/FileRenderer.jsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React from 'react';
22
import PropTypes from 'prop-types';
33

4-
import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
4+
import { useIntl } from '@edx/frontend-platform/i18n';
55

66
import FileCard from './FileCard';
77
import { ErrorBanner, LoadingBanner } from './Banners';
@@ -12,8 +12,8 @@ import { renderHooks } from './hooks';
1212
*/
1313
export const FileRenderer = ({
1414
file,
15-
intl,
1615
}) => {
16+
const intl = useIntl();
1717
const {
1818
Renderer,
1919
isLoading,
@@ -39,8 +39,6 @@ FileRenderer.propTypes = {
3939
name: PropTypes.string,
4040
downloadUrl: PropTypes.string,
4141
}).isRequired,
42-
// injected
43-
intl: intlShape.isRequired,
4442
};
4543

46-
export default injectIntl(FileRenderer);
44+
export default FileRenderer;

src/components/FilePreview/FileRenderer.test.jsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { render, screen } from '@testing-library/react';
2-
import { formatMessage } from 'testUtils';
32
import { keyStore } from 'utils';
43
import { ErrorStatuses } from 'data/constants/requests';
54
import { FileRenderer } from './FileRenderer';
@@ -16,7 +15,6 @@ const props = {
1615
name: 'filename.txt',
1716
description: 'A text file',
1817
},
19-
intl: { formatMessage },
2018
};
2119
describe('FileRenderer', () => {
2220
describe('component', () => {

src/components/InfoPopover/index.jsx

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
IconButton,
99
} from '@openedx/paragon';
1010
import { InfoOutline } from '@openedx/paragon/icons';
11-
import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
11+
import { useIntl } from '@edx/frontend-platform/i18n';
1212

1313
import { nullMethod } from 'hooks';
1414

@@ -17,27 +17,35 @@ import messages from './messages';
1717
/**
1818
* <InfoPopover />
1919
*/
20-
export const InfoPopover = ({ onClick, children, intl }) => (
21-
<OverlayTrigger
22-
trigger="focus"
23-
placement="right-end"
24-
flip
25-
overlay={(
26-
<Popover id="info-popover" className="overlay-help-popover">
27-
<Popover.Content>{children}</Popover.Content>
28-
</Popover>
29-
)}
30-
>
31-
<IconButton
32-
className="esg-help-icon"
33-
data-testid="esg-help-icon"
34-
src={InfoOutline}
35-
alt={intl.formatMessage(messages.altText)}
36-
iconAs={Icon}
37-
onClick={onClick}
38-
/>
39-
</OverlayTrigger>
40-
);
20+
export const InfoPopover = (
21+
{
22+
onClick,
23+
children,
24+
},
25+
) => {
26+
const intl = useIntl();
27+
return (
28+
<OverlayTrigger
29+
trigger="focus"
30+
placement="right-end"
31+
flip
32+
overlay={(
33+
<Popover id="info-popover" className="overlay-help-popover">
34+
<Popover.Content>{children}</Popover.Content>
35+
</Popover>
36+
)}
37+
>
38+
<IconButton
39+
className="esg-help-icon"
40+
data-testid="esg-help-icon"
41+
src={InfoOutline}
42+
alt={intl.formatMessage(messages.altText)}
43+
iconAs={Icon}
44+
onClick={onClick}
45+
/>
46+
</OverlayTrigger>
47+
);
48+
};
4149

4250
InfoPopover.defaultProps = {
4351
onClick: nullMethod,
@@ -48,7 +56,6 @@ InfoPopover.propTypes = {
4856
PropTypes.arrayOf(PropTypes.node),
4957
PropTypes.node,
5058
]).isRequired,
51-
intl: intlShape.isRequired,
5259
};
5360

54-
export default injectIntl(InfoPopover);
61+
export default InfoPopover;

src/components/InfoPopover/index.test.jsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { render, fireEvent } from '@testing-library/react';
2-
import { formatMessage } from 'testUtils';
32
import { InfoPopover } from '.';
43

54
jest.unmock('@openedx/paragon');
@@ -12,7 +11,7 @@ describe('Info Popover Component', () => {
1211
describe('Component', () => {
1312
it('renders the help icon button', () => {
1413
const { getByTestId } = render(
15-
<InfoPopover onClick={onClick} intl={{ formatMessage }}>
14+
<InfoPopover onClick={onClick}>
1615
{child}
1716
</InfoPopover>,
1817
);
@@ -21,7 +20,7 @@ describe('Info Popover Component', () => {
2120

2221
it('calls onClick when the help icon is clicked', () => {
2322
const { getByTestId } = render(
24-
<InfoPopover onClick={onClick} intl={{ formatMessage }}>
23+
<InfoPopover onClick={onClick}>
2524
{child}
2625
</InfoPopover>,
2726
);

src/containers/ReviewActions/components/StartGradingButton/index.jsx

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@ import React from 'react';
22
import { useDispatch } from 'react-redux';
33

44
import { Button } from '@openedx/paragon';
5-
import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
5+
import { useIntl } from '@edx/frontend-platform/i18n';
66

77
import StopGradingConfirmModal from '../StopGradingConfirmModal';
88
import OverrideGradeConfirmModal from '../OverrideGradeConfirmModal';
99

1010
import * as hooks from './hooks';
1111

12-
export const StartGradingButton = ({ intl }) => {
12+
export const StartGradingButton = () => {
13+
const intl = useIntl();
1314
const dispatch = useDispatch();
1415
const {
1516
hide,
@@ -31,8 +32,4 @@ export const StartGradingButton = ({ intl }) => {
3132
);
3233
};
3334

34-
StartGradingButton.propTypes = {
35-
intl: intlShape.isRequired,
36-
};
37-
38-
export default injectIntl(StartGradingButton);
35+
export default StartGradingButton;

src/containers/ReviewActions/components/StartGradingButton/index.test.jsx

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { shallow } from '@edx/react-unit-test-utils';
33

44
import { useDispatch } from 'react-redux';
55

6-
import { formatMessage } from 'testUtils';
76
import * as hooks from './hooks';
87
import { StartGradingButton } from '.';
98

@@ -14,13 +13,10 @@ jest.mock('./hooks', () => ({
1413
buttonHooks: jest.fn(),
1514
}));
1615

17-
const intl = { formatMessage };
18-
1916
let el;
2017
describe('StartGradingButton component', () => {
2118
describe('component', () => {
2219
const dispatch = useDispatch();
23-
const props = { intl };
2420
const buttonHooks = {
2521
hide: false,
2622
buttonArgs: { props: 'hooks.buttonArgs' },
@@ -30,20 +26,21 @@ describe('StartGradingButton component', () => {
3026
describe('behavior', () => {
3127
it('initializes buttonHooks with dispatch and intl fields', () => {
3228
hooks.buttonHooks.mockReturnValueOnce(buttonHooks);
33-
el = shallow(<StartGradingButton {...props} />);
34-
expect(hooks.buttonHooks).toHaveBeenCalledWith({ dispatch, intl });
29+
el = shallow(<StartGradingButton />);
30+
const expected = { dispatch, intl: { formatMessage: expect.any(Function), formatDate: expect.any(Function) } };
31+
expect(hooks.buttonHooks).toHaveBeenCalledWith(expected);
3532
});
3633
});
3734
describe('snapshots', () => {
3835
test('hide: renders empty component if hook.hide is true', () => {
3936
hooks.buttonHooks.mockReturnValueOnce({ ...buttonHooks, hide: true });
40-
el = shallow(<StartGradingButton {...props} />);
37+
el = shallow(<StartGradingButton />);
4138
expect(el.snapshot).toMatchSnapshot();
4239
expect(el.isEmptyRender()).toEqual(true);
4340
});
4441
test('smoke test: forwards props to components from hooks', () => {
4542
hooks.buttonHooks.mockReturnValueOnce(buttonHooks);
46-
el = shallow(<StartGradingButton {...props} />);
43+
el = shallow(<StartGradingButton />);
4744
expect(el.snapshot).toMatchSnapshot();
4845
expect(el.isEmptyRender()).toEqual(false);
4946
});
Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,39 @@
11
import React from 'react';
22
import PropTypes from 'prop-types';
33

4-
import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
4+
import { useIntl } from '@edx/frontend-platform/i18n';
55

66
import ConfirmModal from 'components/ConfirmModal';
77
import messages from './messages';
88

99
export const StopGradingConfirmModal = ({
10-
intl,
1110
isOpen,
1211
isOverride,
1312
onCancel,
1413
onConfirm,
15-
}) => (
16-
<ConfirmModal
17-
title={intl.formatMessage(isOverride
18-
? messages.confirmStopOverrideTitle
19-
: messages.confirmStopGradingTitle)}
20-
content={intl.formatMessage(messages.confirmStopWarning)}
21-
cancelText={intl.formatMessage(messages.goBack)}
22-
confirmText={intl.formatMessage(isOverride
23-
? messages.confirmStopOverrideAction
24-
: messages.confirmStopGradingAction)}
25-
onCancel={onCancel}
26-
onConfirm={onConfirm}
27-
isOpen={isOpen}
28-
/>
29-
);
14+
}) => {
15+
const intl = useIntl();
16+
return (
17+
<ConfirmModal
18+
title={intl.formatMessage(isOverride
19+
? messages.confirmStopOverrideTitle
20+
: messages.confirmStopGradingTitle)}
21+
content={intl.formatMessage(messages.confirmStopWarning)}
22+
cancelText={intl.formatMessage(messages.goBack)}
23+
confirmText={intl.formatMessage(isOverride
24+
? messages.confirmStopOverrideAction
25+
: messages.confirmStopGradingAction)}
26+
onCancel={onCancel}
27+
onConfirm={onConfirm}
28+
isOpen={isOpen}
29+
/>
30+
);
31+
};
3032
StopGradingConfirmModal.propTypes = {
3133
isOpen: PropTypes.bool.isRequired,
3234
isOverride: PropTypes.bool.isRequired,
3335
onCancel: PropTypes.func.isRequired,
3436
onConfirm: PropTypes.func.isRequired,
35-
// injected
36-
intl: intlShape.isRequired,
3737
};
3838

39-
export default injectIntl(StopGradingConfirmModal);
39+
export default StopGradingConfirmModal;

src/containers/ReviewActions/components/StopGradingConfirmModal.test.jsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
import { shallow } from '@edx/react-unit-test-utils';
22

3-
import { formatMessage } from 'testUtils';
43
import { StopGradingConfirmModal } from './StopGradingConfirmModal';
54

65
jest.mock('components/ConfirmModal', () => 'ConfirmModal');
76

87
describe('StopGradingConfirmModal', () => {
98
const props = {
10-
intl: { formatMessage },
119
isOpen: false,
1210
isOverride: false,
1311
onCancel: jest.fn().mockName('this.props.onCancel'),

0 commit comments

Comments
 (0)