Skip to content

Commit c9c298f

Browse files
nortonwongtaion
authored andcommitted
Fix(Bs3): Remove unsafe lifecycles by upgrading uncontrollable… (react-bootstrap#4597)
Fix tests broken by using ReactTestUtils on forwardRef components. (See facebook/react#13455)
1 parent d6c41ff commit c9c298f

16 files changed

+382
-566
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@
125125
"react-overlays": "^0.8.0",
126126
"react-prop-types": "^0.4.0",
127127
"react-transition-group": "^2.0.0",
128-
"uncontrollable": "^5.0.0",
128+
"uncontrollable": "^7.0.2",
129129
"warning": "^3.0.0"
130130
},
131131
"release-script": {

src/Dropdown.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import ReactDOM from 'react-dom';
88
import all from 'prop-types-extra/lib/all';
99
import elementType from 'prop-types-extra/lib/elementType';
1010
import isRequiredForA11y from 'prop-types-extra/lib/isRequiredForA11y';
11-
import uncontrollable from 'uncontrollable';
11+
import { uncontrollable } from 'uncontrollable';
1212
import warning from 'warning';
1313

1414
import ButtonGroup from './ButtonGroup';

src/Navbar.js

+2-4
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import classNames from 'classnames';
55
import React from 'react';
66
import PropTypes from 'prop-types';
77
import elementType from 'prop-types-extra/lib/elementType';
8-
import uncontrollable from 'uncontrollable';
8+
import { uncontrollable } from 'uncontrollable';
99

1010
import Grid from './Grid';
1111
import NavbarBrand from './NavbarBrand';
@@ -259,8 +259,6 @@ UncontrollableNavbar.Text = createSimpleWrapper('p', 'text', 'NavbarText');
259259
UncontrollableNavbar.Link = createSimpleWrapper('a', 'link', 'NavbarLink');
260260

261261
// Set bsStyles here so they can be overridden.
262-
export default bsStyles(
263-
[Style.DEFAULT, Style.INVERSE],
264-
Style.DEFAULT,
262+
export default bsStyles([Style.DEFAULT, Style.INVERSE], Style.DEFAULT)(
265263
UncontrollableNavbar
266264
);

src/Panel.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import classNames from 'classnames';
22
import PropTypes from 'prop-types';
33
import React from 'react';
4-
import uncontrollable from 'uncontrollable';
4+
import { uncontrollable } from 'uncontrollable';
55
import warning from 'warning';
66

77
import {

src/PanelGroup.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import classNames from 'classnames';
22
import PropTypes from 'prop-types';
33
import React, { cloneElement } from 'react';
4-
import uncontrollable from 'uncontrollable';
4+
import { uncontrollable } from 'uncontrollable';
55

66
import {
77
bsClass,

src/TabContainer.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React from 'react';
22
import PropTypes from 'prop-types';
3-
import uncontrollable from 'uncontrollable';
3+
import { uncontrollable } from 'uncontrollable';
44

55
const TAB = 'tab';
66
const PANE = 'pane';

src/Tabs.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React from 'react';
22
import PropTypes from 'prop-types';
33
import requiredForA11y from 'prop-types-extra/lib/isRequiredForA11y';
4-
import uncontrollable from 'uncontrollable';
4+
import { uncontrollable } from 'uncontrollable';
55
import elementType from 'prop-types-extra/lib/elementType';
66

77
import Nav from './Nav';

src/ToggleButtonGroup.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import PropTypes from 'prop-types';
22
import React from 'react';
33
import invariant from 'invariant';
4-
import uncontrollable from 'uncontrollable';
4+
import { uncontrollable } from 'uncontrollable';
55

66
import chainFunction from './utils/createChainedFunction';
77
import ValidChildren from './utils/ValidComponentChildren';

src/utils/bootstrapUtils.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ export function splitBsPropsAndOmit(props, omittedPropNames) {
178178
* in order to validate the new variant.
179179
*/
180180
export function addStyle(Component, ...styleVariant) {
181-
bsStyles(styleVariant, Component);
181+
bsStyles(styleVariant)(Component);
182182
}
183183

184184
export const _curry = curry;

test/DropdownButtonSpec.js

+13-24
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import React from 'react';
22
import ReactDOM from 'react-dom';
33
import ReactTestUtils from 'react-dom/test-utils';
4+
import { mount } from 'enzyme';
45

56
import Dropdown from '../src/Dropdown';
67
import DropdownButton from '../src/DropdownButton';
@@ -224,30 +225,24 @@ describe('<DropdownButton>', () => {
224225
});
225226

226227
it('should pass defaultOpen to `<Dropdown>`', () => {
227-
const instance = ReactTestUtils.renderIntoDocument(
228+
const wrapper = mount(
228229
<DropdownButton id="test-id" title="title" defaultOpen>
229230
<MenuItem eventKey="1">MenuItem 1 content</MenuItem>
230231
</DropdownButton>
231232
);
232233

233-
const dropdown = ReactTestUtils.findRenderedComponentWithType(
234-
instance,
235-
Dropdown
236-
);
237-
const toggle = ReactTestUtils.findRenderedComponentWithType(
238-
instance,
239-
DropdownToggle
240-
);
234+
const dropdown = wrapper.find(Dropdown).first();
235+
const toggle = wrapper.find(DropdownToggle).first();
241236

242-
expect(dropdown.props.defaultOpen).to.equal(true);
243-
expect(toggle.props.defaultOpen).to.not.exist;
237+
expect(dropdown.props().defaultOpen).to.equal(true);
238+
expect(toggle.props().defaultOpen).to.not.exist;
244239
});
245240

246241
it('should pass onMouseEnter and onMouseLeave to `<Dropdown>`', () => {
247242
const onMouseEnter = () => {};
248243
const onMouseLeave = () => {};
249244

250-
const instance = ReactTestUtils.renderIntoDocument(
245+
const wrapper = mount(
251246
<DropdownButton
252247
id="test-id"
253248
title="title"
@@ -258,19 +253,13 @@ describe('<DropdownButton>', () => {
258253
</DropdownButton>
259254
);
260255

261-
const dropdown = ReactTestUtils.findRenderedComponentWithType(
262-
instance,
263-
Dropdown
264-
);
265-
const toggle = ReactTestUtils.findRenderedComponentWithType(
266-
instance,
267-
DropdownToggle
268-
);
256+
const dropdown = wrapper.find(Dropdown).first();
257+
const toggle = wrapper.find(DropdownToggle).first();
269258

270-
expect(dropdown.props.onMouseEnter).to.equal(onMouseEnter);
271-
expect(dropdown.props.onMouseLeave).to.equal(onMouseLeave);
259+
expect(dropdown.props().onMouseEnter).to.equal(onMouseEnter);
260+
expect(dropdown.props().onMouseLeave).to.equal(onMouseLeave);
272261

273-
expect(toggle.props.onMouseEnter).to.not.exist;
274-
expect(toggle.props.onMouseLeave).to.not.exist;
262+
expect(toggle.props().onMouseEnter).to.not.exist;
263+
expect(toggle.props().onMouseLeave).to.not.exist;
275264
});
276265
});

0 commit comments

Comments
 (0)