Skip to content

Commit 0aa3ea4

Browse files
authored
Update code base to work in react 16 and 18 (#1628)
Signed-off-by: Viraj Sanghvi <[email protected]>
1 parent 985c194 commit 0aa3ea4

File tree

19 files changed

+296
-58
lines changed

19 files changed

+296
-58
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
### 📝 Documentation
1717

1818
### 🛠 Maintenance
19+
- Update code base to work in react 16 and 18 ([#1628](https://github.com/opensearch-project/oui/pull/1628))
1920

2021
### 🪛 Refactoring
2122

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@
9595
"dependencies": {
9696
"@types/chroma-js": "^2.4.0",
9797
"@types/react-beautiful-dnd": "^13.1.3",
98-
"@types/react-input-autosize": "^2.2.1",
98+
"@types/react-input-autosize": "^2.2.4",
9999
"@types/react-window": "^1.8.5",
100100
"chroma-js": "^2.4.2",
101101
"classnames": "^2.3.2",
@@ -107,7 +107,7 @@
107107
"react-beautiful-dnd": "^13.1.1",
108108
"react-dropzone": "^14.2.3",
109109
"react-focus-on": "^3.5.0",
110-
"react-input-autosize": "^3.0.0",
110+
"react-input-autosize": "npm:react-18-input-autosize@^3.0.0",
111111
"react-is": "~16.3.0",
112112
"react-virtualized-auto-sizer": "1.0.7",
113113
"react-window": "^1.8.9",

src-docs/src/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
*/
1111

1212
import React, { createElement } from 'react';
13-
import ReactDOM from 'react-dom';
1413
import { Provider } from 'react-redux';
14+
import { render } from '../../src/services/react_dom';
1515
import { Router, Switch, Route, Redirect } from 'react-router';
1616

1717
import configureStore, { history } from './store/configure_store';
@@ -59,7 +59,7 @@ const routes = [
5959
...childRoutes,
6060
];
6161

62-
ReactDOM.render(
62+
render(
6363
<Provider store={store}>
6464
<ThemeProvider>
6565
<Router history={history}>

src-docs/src/services/string/render_to_html.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,8 @@
1010
*/
1111

1212
import React from 'react';
13-
import ReactDOM from 'react-dom';
14-
1513
import html from 'html';
14+
import { render } from '../../../../src/services/react_dom';
1615

1716
const renderTarget = document.createElement('div');
1817
export function renderToHtml(ComponentReference, props = {}) {
@@ -25,10 +24,10 @@ export function renderToHtml(ComponentReference, props = {}) {
2524

2625
return {
2726
render() {
28-
ReactDOM.render(element, renderTarget);
27+
const root = render(element, renderTarget);
2928
const htmlString = renderTarget.innerHTML;
3029
const result = htmlString;
31-
ReactDOM.unmountComponentAtNode(renderTarget);
30+
root.unmount();
3231

3332
return html.prettyPrint(result, {
3433
indent_size: 2,

src-docs/src/views/popover/popover_htmlelement_anchor.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
/* eslint-disable react/no-multi-comp */
1313
import React, { useState, useEffect } from 'react';
1414

15-
import { render, unmountComponentAtNode } from 'react-dom';
15+
import { render } from '../../../../src/services/react_dom';
1616

1717
import { OuiWrappingPopover } from '../../../../src/components';
1818

@@ -47,9 +47,11 @@ export default () => {
4747
const container = document.createElement('div');
4848
document.body.appendChild(container);
4949

50-
render(<PopoverApp anchor={thisAnchor} />, container);
50+
const root = render(<PopoverApp anchor={thisAnchor} />, container);
5151

52-
return () => unmountComponentAtNode(container);
52+
return () => {
53+
root.unmount();
54+
};
5355
}, []);
5456

5557
return (

src/components/code/code_block.test.tsx

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,9 @@
2929
*/
3030

3131
import React, { useState, useEffect } from 'react';
32-
import ReactDOM from 'react-dom';
3332
import { mount, render } from 'enzyme';
3433
import html from 'html';
35-
import { act } from 'react-dom/test-utils';
34+
import { renderTestElement, act } from '../../test/react_test_utils';
3635
import { requiredProps } from '../../test/required_props';
3736

3837
import { OuiCodeBlock } from './code_block';
@@ -118,18 +117,19 @@ describe('OuiCodeBlock', () => {
118117
it('updates DOM when input changes', (done) => {
119118
expect.assertions(2);
120119

120+
const { container } = renderTestElement(<App />, {
121+
attachToDocument: false,
122+
});
123+
121124
function takeSnapshot() {
122125
expect(
123-
html.prettyPrint(appDiv.innerHTML, {
126+
html.prettyPrint(container.innerHTML, {
124127
indent_size: 2,
125128
unformatted: [], // Expand all tags, including spans
126129
})
127130
).toMatchSnapshot();
128131
}
129132

130-
// enzyme does not recreate enough of the React<->DOM interaction to reproduce this bug
131-
const appDiv = document.createElement('div');
132-
133133
function App() {
134134
const [value, setValue] = useState('State 1');
135135

@@ -158,8 +158,6 @@ describe('OuiCodeBlock', () => {
158158
</div>
159159
);
160160
}
161-
162-
ReactDOM.render(<App />, appDiv);
163161
});
164162

165163
it('displays content in fullscreen mode', () => {

src/components/datagrid/data_grid.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ import {
3939
import { OuiDataGridColumnResizer } from './data_grid_column_resizer';
4040
import { OuiDataGridRowHeightOption } from './data_grid_types';
4141
import { keys } from '../../services';
42-
import { act } from 'react-dom/test-utils';
42+
import { act } from '../../test/react_test_utils';
4343

4444
jest.mock('./row_height_utils', () => {
4545
return {

src/components/drag_and_drop/draggable.test.tsx

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@
2929
*/
3030

3131
import React from 'react';
32-
import ReactDOM from 'react-dom';
3332
import { resetServerContext } from 'react-beautiful-dnd';
33+
import { renderTestElement } from '../../test/react_test_utils';
3434
import html from 'html';
3535
import { requiredProps } from '../../test/required_props';
3636
import { OuiDragDropContext, OuiDraggable, OuiDroppable } from './';
@@ -45,50 +45,41 @@ function takeSnapshot(element: HTMLElement) {
4545
}
4646

4747
describe('OuiDraggable', () => {
48-
let appDiv: HTMLElement;
49-
5048
beforeEach(() => {
5149
resetServerContext(); // resets react-beautiful-dnd's internal instance counter which affects snapshots
52-
appDiv = document.createElement('div');
53-
document.body.appendChild(appDiv);
54-
});
55-
56-
afterEach(() => {
57-
ReactDOM.unmountComponentAtNode(appDiv);
58-
document.body.removeChild(appDiv);
5950
});
6051

6152
test('is rendered', () => {
6253
const handler = jest.fn();
6354

64-
ReactDOM.render(
55+
const { container, cleanup } = renderTestElement(
6556
<OuiDragDropContext onDragEnd={handler} {...requiredProps}>
6657
<OuiDroppable droppableId="testDroppable">
6758
<OuiDraggable draggableId="testDraggable" index={0}>
6859
{() => <div>Hello</div>}
6960
</OuiDraggable>
7061
</OuiDroppable>
71-
</OuiDragDropContext>,
72-
appDiv
62+
</OuiDragDropContext>
7363
);
7464

75-
expect(takeSnapshot(appDiv)).toMatchSnapshot();
65+
expect(takeSnapshot(container)).toMatchSnapshot();
66+
cleanup();
7667
});
7768

7869
test('can be given ReactElement children', () => {
7970
const handler = jest.fn();
8071

81-
ReactDOM.render(
72+
const { container, cleanup } = renderTestElement(
8273
<OuiDragDropContext onDragEnd={handler} {...requiredProps}>
8374
<OuiDroppable droppableId="testDroppable">
8475
<OuiDraggable draggableId="testDraggable" index={0}>
8576
<div>Hello</div>
8677
</OuiDraggable>
8778
</OuiDroppable>
88-
</OuiDragDropContext>,
89-
appDiv
79+
</OuiDragDropContext>
9080
);
9181

92-
expect(takeSnapshot(appDiv)).toMatchSnapshot();
82+
expect(takeSnapshot(container)).toMatchSnapshot();
83+
cleanup();
9384
});
9485
});

src/components/image/image.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
import React from 'react';
3232
import { render, mount, ReactWrapper } from 'enzyme';
3333
import { requiredProps, findTestSubject } from '../../test';
34-
import { act } from 'react-dom/test-utils';
34+
import { act } from '../../test/react_test_utils';
3535
import { keys } from '../../services';
3636

3737
import { OuiImage } from './image';

src/components/inner_text/inner_text.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@
2929
*/
3030

3131
import React, { useState, useEffect } from 'react';
32-
import { act } from 'react-dom/test-utils';
3332
import { render, mount } from 'enzyme';
33+
import { act } from '../../test/react_test_utils';
3434
import { findTestSubject, requiredProps } from '../../test';
3535

3636
import { useInnerText, OuiInnerText } from './inner_text';

0 commit comments

Comments
 (0)