Skip to content

Commit c81f699

Browse files
committed
Check if WrapperComponent supports forwardedRef prop
1 parent d5670fd commit c81f699

File tree

9 files changed

+41
-16
lines changed

9 files changed

+41
-16
lines changed

packages/enzyme-adapter-react-13/src/ReactThirteenAdapter.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,13 +125,16 @@ class ReactThirteenAdapter extends EnzymeAdapter {
125125
render(el, context, callback) {
126126
if (instance === null) {
127127
const { ref, type, props } = el;
128+
const ReactWrapperComponent = createMountWrapper(el, { ...options, adapter });
129+
const refProp = ReactWrapperComponent.supportsForwardedRef === true
130+
? 'forwardedRef'
131+
: 'ref';
128132
const wrapperProps = {
129133
Component: type,
130134
props,
131135
context,
132-
...(ref && { forwardedRef: ref }),
136+
...(ref && { [refProp]: ref }),
133137
};
134-
const ReactWrapperComponent = createMountWrapper(el, { ...options, adapter });
135138
const wrappedEl = React.createElement(ReactWrapperComponent, wrapperProps);
136139
instance = React.render(wrappedEl, domNode);
137140
if (typeof callback === 'function') {

packages/enzyme-adapter-react-14/src/ReactFourteenAdapter.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,14 +105,17 @@ class ReactFourteenAdapter extends EnzymeAdapter {
105105
render(el, context, callback) {
106106
if (instance === null) {
107107
const { type, props, ref } = el;
108+
const ReactWrapperComponent = createMountWrapper(el, { ...options, adapter });
109+
const refProp = ReactWrapperComponent.supportsForwardedRef === true
110+
? 'forwardedRef'
111+
: 'ref';
108112
const wrapperProps = {
109113
Component: type,
110114
wrappingComponentProps: options.wrappingComponentProps,
111115
props,
112116
context,
113-
...(ref && { forwardedRef: ref }),
117+
...(ref && { [refProp]: ref }),
114118
};
115-
const ReactWrapperComponent = createMountWrapper(el, { ...options, adapter });
116119
const wrappedEl = React.createElement(ReactWrapperComponent, wrapperProps);
117120
instance = ReactDOM.render(wrappedEl, domNode);
118121
if (typeof callback === 'function') {

packages/enzyme-adapter-react-15.4/src/ReactFifteenFourAdapter.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,14 +140,17 @@ class ReactFifteenFourAdapter extends EnzymeAdapter {
140140
render(el, context, callback) {
141141
if (instance === null) {
142142
const { type, props, ref } = el;
143+
const ReactWrapperComponent = createMountWrapper(el, { ...options, adapter });
144+
const refProp = ReactWrapperComponent.supportsForwardedRef === true
145+
? 'forwardedRef'
146+
: 'ref';
143147
const wrapperProps = {
144148
Component: type,
145149
wrappingComponentProps: options.wrappingComponentProps,
146150
props,
147151
context,
148-
...(ref && { forwardedRef: ref }),
152+
...(ref && { [refProp]: ref }),
149153
};
150-
const ReactWrapperComponent = createMountWrapper(el, { ...options, adapter });
151154
const wrappedEl = React.createElement(ReactWrapperComponent, wrapperProps);
152155
instance = ReactDOM.render(wrappedEl, domNode);
153156
if (typeof callback === 'function') {

packages/enzyme-adapter-react-15/src/ReactFifteenAdapter.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,14 +140,17 @@ class ReactFifteenAdapter extends EnzymeAdapter {
140140
render(el, context, callback) {
141141
if (instance === null) {
142142
const { type, props, ref } = el;
143+
const ReactWrapperComponent = createMountWrapper(el, { ...options, adapter });
144+
const refProp = ReactWrapperComponent.supportsForwardedRef === true
145+
? 'forwardedRef'
146+
: 'ref';
143147
const wrapperProps = {
144148
Component: type,
145149
wrappingComponentProps: options.wrappingComponentProps,
146150
props,
147151
context,
148-
...(ref && { forwardedRef: ref }),
152+
...(ref && { [refProp]: ref }),
149153
};
150-
const ReactWrapperComponent = createMountWrapper(el, { ...options, adapter });
151154
const wrappedEl = React.createElement(ReactWrapperComponent, wrapperProps);
152155
instance = ReactDOM.render(wrappedEl, domNode);
153156
if (typeof callback === 'function') {

packages/enzyme-adapter-react-16.1/src/ReactSixteenOneAdapter.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -273,14 +273,17 @@ class ReactSixteenOneAdapter extends EnzymeAdapter {
273273
render(el, context, callback) {
274274
if (instance === null) {
275275
const { type, props, ref } = el;
276+
const ReactWrapperComponent = createMountWrapper(el, { ...options, adapter });
277+
const refProp = ReactWrapperComponent.supportsForwardedRef === true
278+
? 'forwardedRef'
279+
: 'ref';
276280
const wrapperProps = {
277281
Component: type,
278282
props,
279283
wrappingComponentProps,
280284
context,
281-
...(ref && { forwardedRef: ref }),
285+
...(ref && { [refProp]: ref }),
282286
};
283-
const ReactWrapperComponent = createMountWrapper(el, { ...options, adapter });
284287
const wrappedEl = React.createElement(ReactWrapperComponent, wrapperProps);
285288
instance = hydrateIn
286289
? ReactDOM.hydrate(wrappedEl, domNode)

packages/enzyme-adapter-react-16.2/src/ReactSixteenTwoAdapter.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -275,14 +275,17 @@ class ReactSixteenTwoAdapter extends EnzymeAdapter {
275275
render(el, context, callback) {
276276
if (instance === null) {
277277
const { type, props, ref } = el;
278+
const ReactWrapperComponent = createMountWrapper(el, { ...options, adapter });
279+
const refProp = ReactWrapperComponent.supportsForwardedRef === true
280+
? 'forwardedRef'
281+
: 'ref';
278282
const wrapperProps = {
279283
Component: type,
280284
props,
281285
wrappingComponentProps,
282286
context,
283-
...(ref && { forwardedRef: ref }),
287+
...(ref && { [refProp]: ref }),
284288
};
285-
const ReactWrapperComponent = createMountWrapper(el, { ...options, adapter });
286289
const wrappedEl = React.createElement(ReactWrapperComponent, wrapperProps);
287290
instance = hydrateIn
288291
? ReactDOM.hydrate(wrappedEl, domNode)

packages/enzyme-adapter-react-16.3/src/ReactSixteenThreeAdapter.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -294,14 +294,17 @@ class ReactSixteenThreeAdapter extends EnzymeAdapter {
294294
render(el, context, callback) {
295295
if (instance === null) {
296296
const { type, props, ref } = el;
297+
const ReactWrapperComponent = createMountWrapper(el, { ...options, adapter });
298+
const refProp = ReactWrapperComponent.supportsForwardedRef === true
299+
? 'forwardedRef'
300+
: 'ref';
297301
const wrapperProps = {
298302
Component: type,
299303
props,
300304
wrappingComponentProps,
301305
context,
302-
...(ref && { forwardedRef: ref }),
306+
...(ref && { [refProp]: ref }),
303307
};
304-
const ReactWrapperComponent = createMountWrapper(el, { ...options, adapter });
305308
const wrappedEl = React.createElement(ReactWrapperComponent, wrapperProps);
306309
instance = hydrateIn
307310
? ReactDOM.hydrate(wrappedEl, domNode)

packages/enzyme-adapter-react-16/src/ReactSixteenAdapter.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -404,14 +404,17 @@ class ReactSixteenAdapter extends EnzymeAdapter {
404404
return wrapAct(() => {
405405
if (instance === null) {
406406
const { type, props, ref } = el;
407+
const ReactWrapperComponent = createMountWrapper(el, { ...options, adapter });
408+
const refProp = ReactWrapperComponent.supportsForwardedRef === true
409+
? 'forwardedRef'
410+
: 'ref';
407411
const wrapperProps = {
408412
Component: type,
409413
props,
410414
wrappingComponentProps,
411415
context,
412-
...(ref && { forwardedRef: ref }),
416+
...(ref && { [refProp]: ref }),
413417
};
414-
const ReactWrapperComponent = createMountWrapper(el, { ...options, adapter });
415418
const wrappedEl = React.createElement(ReactWrapperComponent, wrapperProps);
416419
instance = hydrateIn
417420
? ReactDOM.hydrate(wrappedEl, domNode)

packages/enzyme-adapter-utils/src/createMountWrapper.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ export default function createMountWrapper(node, options = {}) {
106106
return component;
107107
}
108108
}
109+
WrapperComponent.supportsForwardedRef = true;
109110
WrapperComponent.propTypes = {
110111
Component: makeValidElementType(adapter).isRequired,
111112
props: PropTypes.object.isRequired,

0 commit comments

Comments
 (0)