Skip to content

Commit 744b619

Browse files
committed
[change] React 17 peer dependency
React 17 changed how blur/focus events are implemented, which requires a small change to several unit tests to ensure the relevant DOM events are dispatched.
1 parent f5c9f63 commit 744b619

File tree

9 files changed

+83
-32
lines changed

9 files changed

+83
-32
lines changed

package.json

+3-3
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,9 @@
5858
"metro-react-native-babel-preset": "^0.56.0",
5959
"npm-run-all": "^4.1.3",
6060
"prettier": "^1.18.2",
61-
"react": "^16.10.2",
62-
"react-dom": "^16.10.2",
63-
"react-test-renderer": "^16.10.2"
61+
"react": "^17.0.1",
62+
"react-dom": "^17.0.1",
63+
"react-test-renderer": "^17.0.1"
6464
},
6565
"workspaces": [
6666
"packages/*"

packages/react-native-web/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727
"react-timer-mixin": "^0.13.4"
2828
},
2929
"peerDependencies": {
30-
"react": ">=16.5.1",
31-
"react-dom": ">=16.5.1"
30+
"react": ">=17.0.1",
31+
"react-dom": ">=17.0.1"
3232
},
3333
"author": "Nicolas Gallagher",
3434
"license": "MIT",

packages/react-native-web/src/exports/ActivityIndicator/__tests__/index-test.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,10 @@ describe('components/ActivityIndicator', () => {
7575
render(<ActivityIndicator onBlur={onBlur} ref={ref} />);
7676
});
7777
const target = createEventTarget(ref.current);
78+
const body = createEventTarget(document.body);
7879
act(() => {
7980
target.focus();
80-
target.blur();
81+
body.focus({ relatedTarget: target.node });
8182
});
8283
expect(onBlur).toBeCalled();
8384
});

packages/react-native-web/src/exports/CheckBox/__tests__/index-test.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,10 @@ describe('CheckBox', () => {
5959
render(<CheckBox onBlur={onBlur} ref={ref} />);
6060
});
6161
const target = createEventTarget(ref.current);
62+
const body = createEventTarget(document.body);
6263
act(() => {
6364
target.focus();
64-
target.blur();
65+
body.focus({ relatedTarget: target.node });
6566
});
6667
expect(onBlur).toBeCalled();
6768
});

packages/react-native-web/src/exports/Pressable/__tests__/index-test.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,15 @@ describe('components/Pressable', () => {
7272
));
7373
});
7474
const target = createEventTarget(ref.current);
75+
const body = createEventTarget(document.body);
7576
expect(container.firstChild).toMatchSnapshot();
7677
act(() => {
7778
target.focus();
7879
});
7980
expect(onFocus).toBeCalled();
8081
expect(container.firstChild).toMatchSnapshot();
8182
act(() => {
82-
target.blur();
83+
body.focus({ relatedTarget: target.node });
8384
});
8485
expect(onBlur).toBeCalled();
8586
expect(container.firstChild).toMatchSnapshot();

packages/react-native-web/src/exports/Text/__tests__/index-test.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,10 @@ describe('components/Text', () => {
7676
render(<Text onBlur={onBlur} ref={ref} />);
7777
});
7878
const target = createEventTarget(ref.current);
79+
const body = createEventTarget(document.body);
7980
act(() => {
8081
target.focus();
81-
target.blur();
82+
body.focus({ relatedTarget: target.node });
8283
});
8384
expect(onBlur).toBeCalled();
8485
});
@@ -94,7 +95,6 @@ describe('components/Text', () => {
9495
const target = createEventTarget(ref.current);
9596
act(() => {
9697
target.focus();
97-
target.blur();
9898
});
9999
expect(onFocus).toBeCalled();
100100
});

packages/react-native-web/src/exports/TextInput/__tests__/index-test.js

+21-7
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import React from 'react';
44
import TextInput from '..';
5+
import { act } from 'react-dom/test-utils';
6+
import { createEventTarget } from 'dom-event-testing-library';
57
import { render } from '@testing-library/react';
68

79
function findInput(container) {
@@ -238,9 +240,16 @@ describe('components/TextInput', () => {
238240

239241
test('prop "onBlur"', () => {
240242
const onBlur = jest.fn();
241-
const { container } = render(<TextInput onBlur={onBlur} />);
242-
const input = findInput(container);
243-
input.dispatchEvent(new window.FocusEvent('blur', {}));
243+
const ref = React.createRef();
244+
act(() => {
245+
render(<TextInput onBlur={onBlur} ref={ref} />);
246+
});
247+
const target = createEventTarget(ref.current);
248+
const body = createEventTarget(document.body);
249+
act(() => {
250+
target.focus();
251+
body.focus({ relatedTarget: target.node });
252+
});
244253
expect(onBlur).toHaveBeenCalledTimes(1);
245254
expect(TextInput.State.currentlyFocusedField()).toBe(null);
246255
});
@@ -267,11 +276,16 @@ describe('components/TextInput', () => {
267276

268277
test('prop "onFocus"', () => {
269278
const onFocus = jest.fn();
270-
const { container } = render(<TextInput onFocus={onFocus} />);
271-
const input = findInput(container);
272-
input.focus();
279+
const ref = React.createRef();
280+
act(() => {
281+
render(<TextInput onFocus={onFocus} ref={ref} />);
282+
});
283+
const target = createEventTarget(ref.current);
284+
act(() => {
285+
target.focus();
286+
});
273287
expect(onFocus).toHaveBeenCalledTimes(1);
274-
expect(TextInput.State.currentlyFocusedField()).toBe(input);
288+
expect(TextInput.State.currentlyFocusedField()).toBe(target.node);
275289
});
276290

277291
describe('prop "onKeyPress"', () => {

packages/react-native-web/src/exports/View/__tests__/index-test.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,10 @@ describe('components/View', () => {
9696
render(<View onBlur={onBlur} ref={ref} />);
9797
});
9898
const target = createEventTarget(ref.current);
99+
const body = createEventTarget(document.body);
99100
act(() => {
100101
target.focus();
101-
target.blur();
102+
body.focus({ relatedTarget: target.node });
102103
});
103104
expect(onBlur).toBeCalled();
104105
});

yarn.lock

+47-14
Original file line numberDiff line numberDiff line change
@@ -12743,7 +12743,7 @@ react-docgen@^5.0.0:
1274312743
node-dir "^0.1.10"
1274412744
strip-indent "^3.0.0"
1274512745

12746-
react-dom@^16.10.2, react-dom@^16.8.3:
12746+
react-dom@^16.8.3:
1274712747
version "16.10.2"
1274812748
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.10.2.tgz#4840bce5409176bc3a1f2bd8cb10b92db452fda6"
1274912749
integrity sha512-kWGDcH3ItJK4+6Pl9DZB16BXYAZyrYQItU4OMy0jAkv5aNqc+mAKb4TpFtAteI6TJZu+9ZlNhaeNQSVQDHJzkw==
@@ -12753,6 +12753,15 @@ react-dom@^16.10.2, react-dom@^16.8.3:
1275312753
prop-types "^15.6.2"
1275412754
scheduler "^0.16.2"
1275512755

12756+
react-dom@^17.0.1:
12757+
version "17.0.1"
12758+
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.1.tgz#1de2560474ec9f0e334285662ede52dbc5426fc6"
12759+
integrity sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug==
12760+
dependencies:
12761+
loose-envify "^1.1.0"
12762+
object-assign "^4.1.1"
12763+
scheduler "^0.20.1"
12764+
1275612765
react-draggable@^4.0.3:
1275712766
version "4.0.3"
1275812767
resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.0.3.tgz#6b9f76f66431c47b9070e9b805bbc520df8ca481"
@@ -12813,6 +12822,11 @@ react-is@^16.12.0:
1281312822
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c"
1281412823
integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==
1281512824

12825+
"react-is@^16.12.0 || ^17.0.0", react-is@^17.0.1:
12826+
version "17.0.1"
12827+
resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339"
12828+
integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==
12829+
1281612830
react-is@^16.7.0:
1281712831
version "16.7.0"
1281812832
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.7.0.tgz#c1bd21c64f1f1364c6f70695ec02d69392f41bfa"
@@ -12827,11 +12841,6 @@ react-is@^16.8.4:
1282712841
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16"
1282812842
integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==
1282912843

12830-
react-is@^16.8.6:
12831-
version "16.10.2"
12832-
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.10.2.tgz#984120fd4d16800e9a738208ab1fba422d23b5ab"
12833-
integrity sha512-INBT1QEgtcCCgvccr5/86CfD71fw9EPmDxgiJX4I2Ddr6ZsV6iFXsuby+qWJPtmNuMY0zByTsG4468P7nHuNWA==
12834-
1283512844
react-jss@^10.5.0:
1283612845
version "10.5.0"
1283712846
resolved "https://registry.yarnpkg.com/react-jss/-/react-jss-10.5.0.tgz#a3e47e5f024d85e2f59fbf691bf276e1849dfd7f"
@@ -12878,6 +12887,14 @@ react-refresh@^0.4.0:
1287812887
resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.2.tgz#54a277a6caaac2803d88f1d6f13c1dcfbd81e334"
1287912888
integrity sha512-kv5QlFFSZWo7OlJFNYbxRtY66JImuP2LcrFgyJfQaf85gSP+byzG21UbDQEYjU7f//ny8rwiEkO6py2Y+fEgAQ==
1288012889

12890+
react-shallow-renderer@^16.13.1:
12891+
version "16.14.1"
12892+
resolved "https://registry.yarnpkg.com/react-shallow-renderer/-/react-shallow-renderer-16.14.1.tgz#bf0d02df8a519a558fd9b8215442efa5c840e124"
12893+
integrity sha512-rkIMcQi01/+kxiTE9D3fdS959U1g7gs+/rborw++42m1O9FAQiNI/UNRZExVUoAOprn4umcXf+pFRou8i4zuBg==
12894+
dependencies:
12895+
object-assign "^4.1.1"
12896+
react-is "^16.12.0 || ^17.0.0"
12897+
1288112898
react-sizeme@^2.6.7:
1288212899
version "2.6.7"
1288312900
resolved "https://registry.yarnpkg.com/react-sizeme/-/react-sizeme-2.6.7.tgz#231339ce8821ac2c26424c791e0027f89dae3e90"
@@ -12899,15 +12916,15 @@ react-syntax-highlighter@^11.0.2:
1289912916
prismjs "^1.8.4"
1290012917
refractor "^2.4.1"
1290112918

12902-
react-test-renderer@^16.10.2:
12903-
version "16.10.2"
12904-
resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.10.2.tgz#4d8492f8678c9b43b721a7d79ed0840fdae7c518"
12905-
integrity sha512-k9Qzyev6cTIcIfrhgrFlYQAFxh5EEDO6ALNqYqmKsWVA7Q/rUMTay5nD3nthi6COmYsd4ghVYyi8U86aoeMqYQ==
12919+
react-test-renderer@^17.0.1:
12920+
version "17.0.1"
12921+
resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-17.0.1.tgz#3187e636c3063e6ae498aedf21ecf972721574c7"
12922+
integrity sha512-/dRae3mj6aObwkjCcxZPlxDFh73XZLgvwhhyON2haZGUEhiaY5EjfAdw+d/rQmlcFwdTpMXCSGVk374QbCTlrA==
1290612923
dependencies:
1290712924
object-assign "^4.1.1"
12908-
prop-types "^15.6.2"
12909-
react-is "^16.8.6"
12910-
scheduler "^0.16.2"
12925+
react-is "^17.0.1"
12926+
react-shallow-renderer "^16.13.1"
12927+
scheduler "^0.20.1"
1291112928

1291212929
react-textarea-autosize@^7.1.0:
1291312930
version "7.1.0"
@@ -12921,7 +12938,7 @@ react-timer-mixin@^0.13.4:
1292112938
version "0.13.4"
1292212939
resolved "https://registry.yarnpkg.com/react-timer-mixin/-/react-timer-mixin-0.13.4.tgz#75a00c3c94c13abe29b43d63b4c65a88fc8264d3"
1292312940

12924-
react@^16.10.2, react@^16.8.3:
12941+
react@^16.8.3:
1292512942
version "16.10.2"
1292612943
resolved "https://registry.yarnpkg.com/react/-/react-16.10.2.tgz#a5ede5cdd5c536f745173c8da47bda64797a4cf0"
1292712944
integrity sha512-MFVIq0DpIhrHFyqLU0S3+4dIcBhhOvBE8bJ/5kHPVOVaGdo0KuiQzpcjCPsf585WvhypqtrMILyoE2th6dT+Lw==
@@ -12930,6 +12947,14 @@ react@^16.10.2, react@^16.8.3:
1293012947
object-assign "^4.1.1"
1293112948
prop-types "^15.6.2"
1293212949

12950+
react@^17.0.1:
12951+
version "17.0.1"
12952+
resolved "https://registry.yarnpkg.com/react/-/react-17.0.1.tgz#6e0600416bd57574e3f86d92edba3d9008726127"
12953+
integrity sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w==
12954+
dependencies:
12955+
loose-envify "^1.1.0"
12956+
object-assign "^4.1.1"
12957+
1293312958
read-cmd-shim@^1.0.1:
1293412959
version "1.0.5"
1293512960
resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16"
@@ -13643,6 +13668,14 @@ scheduler@^0.16.2:
1364313668
loose-envify "^1.1.0"
1364413669
object-assign "^4.1.1"
1364513670

13671+
scheduler@^0.20.1:
13672+
version "0.20.1"
13673+
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.1.tgz#da0b907e24026b01181ecbc75efdc7f27b5a000c"
13674+
integrity sha512-LKTe+2xNJBNxu/QhHvDR14wUXHRQbVY5ZOYpOGWRzhydZUqrLb2JBvLPY7cAqFmqrWuDED0Mjk7013SZiOz6Bw==
13675+
dependencies:
13676+
loose-envify "^1.1.0"
13677+
object-assign "^4.1.1"
13678+
1364613679
schema-utils@^1.0.0:
1364713680
version "1.0.0"
1364813681
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"

0 commit comments

Comments
 (0)