Skip to content

Commit 2b8dc5f

Browse files
committed
Fix the subtle bug with deprecation warning.
When deprecated `Collaps_a_bleNav` is imported it also tags `Collaps_i_bleNav` element as deprecated, because it is done by using pointers which points to the same object. ```js let CollapsableNav = CollapsibleNav; CollapsableNav.__deprecated__ = true; ``` https://github.com/react-bootstrap/react-bootstrap/blob/92c57ef7ee/src/CollapsableNav.js#L5 The right and simplest way to make deprecation in the case of component renaming `CollapsableNav => CollapsibleNav` by using general for both components part - `classSpecifications`. Like this: ```js // NewNameComponent.js const classSpecificationsFor_NewNameComponent = { /* existing code */ }; const NewNameComponent = React.createClass( classSpecificationsFor_NewNameComponent ); export {classSpecificationsFor_NewNameComponent}; // for old component export default NewNameComponent; // OldNameComponent.js import {classSpecificationsFor_NewNameComponent} from 'NewNameComponent'; const classSpecsFor_OldNameComponent = assign({}, classSpecificationsFor_NewNameComponent, { // here we add deprecation warning }); const OldNameComponent = React.createClass( classSpecsFor_OldNameComponent ); export default OldNameComponent; ```
1 parent f77c955 commit 2b8dc5f

File tree

2 files changed

+19
-16
lines changed

2 files changed

+19
-16
lines changed

src/CollapsableNav.js

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,18 @@
1-
import CollapsibleNav from './CollapsibleNav';
1+
import React from 'react';
2+
import deprecationWarning from './utils/deprecationWarning';
3+
import assign from './utils/Object.assign';
4+
import {specCollapsibleNav} from './CollapsibleNav';
25

3-
let CollapsableNav = CollapsibleNav;
6+
const specCollapsableNav = assign({}, specCollapsibleNav, {
7+
componentDidMount() {
8+
deprecationWarning(
9+
'CollapsableNav',
10+
'CollapsibleNav',
11+
'https://github.com/react-bootstrap/react-bootstrap/issues/425#issuecomment-97110963'
12+
);
13+
}
14+
});
415

5-
CollapsableNav.__deprecated__ = true;
16+
const CollapsableNav = React.createClass(specCollapsableNav);
617

718
export default CollapsableNav;

src/CollapsibleNav.js

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,11 @@ import BootstrapMixin from './BootstrapMixin';
33
import CollapsibleMixin from './CollapsibleMixin';
44
import classNames from 'classnames';
55
import domUtils from './utils/domUtils';
6-
import deprecationWarning from './utils/deprecationWarning';
76

87
import ValidComponentChildren from './utils/ValidComponentChildren';
98
import createChainedFunction from './utils/createChainedFunction';
109

11-
const CollapsibleNav = React.createClass({
10+
const specCollapsibleNav = {
1211
mixins: [BootstrapMixin, CollapsibleMixin],
1312

1413
propTypes: {
@@ -43,16 +42,6 @@ const CollapsibleNav = React.createClass({
4342
return height;
4443
},
4544

46-
componentDidMount() {
47-
if (this.constructor.__deprecated__) {
48-
deprecationWarning(
49-
'CollapsableNav',
50-
'CollapsibleNav',
51-
'https://github.com/react-bootstrap/react-bootstrap/issues/425#issuecomment-97110963'
52-
);
53-
}
54-
},
55-
5645
render() {
5746
/*
5847
* this.props.collapsable is set in NavBar when a eventKey is supplied.
@@ -127,6 +116,9 @@ const CollapsibleNav = React.createClass({
127116
}
128117
);
129118
}
130-
});
119+
};
120+
121+
const CollapsibleNav = React.createClass(specCollapsibleNav);
131122

123+
export {specCollapsibleNav};
132124
export default CollapsibleNav;

0 commit comments

Comments
 (0)