Skip to content
This repository was archived by the owner on May 15, 2019. It is now read-only.

Commit 024a865

Browse files
committed
Update react-components with support for React 16.3.0
Summary: As part of upgrading to React 16 in webapp, we need to update these components. Specifically, changing `React.PropTypes` use cases to require `prop-types` library, and utilizing `createReactClass` instead of `React.createClass`. Test Plan: - Run `make test`, `make all` Reviewers: emily, john, scottgrant Reviewed By: scottgrant Subscribers: tom Differential Revision: https://phabricator.khanacademy.org/D45539
1 parent 201ff43 commit 024a865

23 files changed

+5765
-3719
lines changed

js/blur-input.jsx

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
const React = require("react");
2+
const createReactClass = require("create-react-class");
3+
const PropTypes = require("prop-types");
24

35
/* You know when you want to propagate input to a parent...
46
* but then that parent does something with the input...
@@ -12,12 +14,12 @@ const React = require("react");
1214
* Enough melodrama. Its an input that only sends changes
1315
* to its parent on blur.
1416
*/
15-
const BlurInput = React.createClass({
17+
const BlurInput = createReactClass({
1618
propTypes: {
17-
className: React.PropTypes.string,
18-
style: React.PropTypes.any,
19-
value: React.PropTypes.string.isRequired,
20-
onChange: React.PropTypes.func.isRequired,
19+
className: PropTypes.string,
20+
style: PropTypes.any,
21+
value: PropTypes.string.isRequired,
22+
onChange: PropTypes.func.isRequired,
2123
},
2224
getInitialState: function() {
2325
return {value: this.props.value};

js/button-group.jsx

+10-8
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,21 @@
1919

2020
const React = require('react');
2121
const ReactDOM = require("react-dom");
22+
const createReactClass = require("create-react-class");
23+
const PropTypes = require("prop-types");
2224
const styles = require('./styles.js');
2325
const css = require("aphrodite").css;
2426

25-
const ButtonGroup = React.createClass({
27+
const ButtonGroup = createReactClass({
2628
propTypes: {
27-
value: React.PropTypes.any,
28-
buttons: React.PropTypes.arrayOf(React.PropTypes.shape({
29-
value: React.PropTypes.any.isRequired,
30-
content: React.PropTypes.node,
31-
title: React.PropTypes.string,
29+
value: PropTypes.any,
30+
buttons: PropTypes.arrayOf(PropTypes.shape({
31+
value: PropTypes.any.isRequired,
32+
content: PropTypes.node,
33+
title: PropTypes.string,
3234
})).isRequired,
33-
onChange: React.PropTypes.func.isRequired,
34-
allowEmpty: React.PropTypes.bool,
35+
onChange: PropTypes.func.isRequired,
36+
allowEmpty: PropTypes.bool,
3537
},
3638

3739
getDefaultProps: function() {

js/drag-target.jsx

+7-5
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,17 @@
2323
// * only respond to certain types of drags (only images for instance)!
2424

2525
const React = require('react');
26+
const createReactClass = require('create-react-class');
27+
const PropTypes = require('prop-types');
2628

27-
const DragTarget = React.createClass({
29+
const DragTarget = createReactClass({
2830
propTypes: {
2931
// All props not listed here are forwarded to the root element without
3032
// modification.
31-
onDrop: React.PropTypes.func.isRequired,
32-
component: React.PropTypes.any, // component type
33-
shouldDragHighlight: React.PropTypes.func,
34-
style: React.PropTypes.any,
33+
onDrop: PropTypes.func.isRequired,
34+
component: PropTypes.any, // component type
35+
shouldDragHighlight: PropTypes.func,
36+
style: PropTypes.any,
3537
},
3638
getDefaultProps: function() {
3739
return {

js/info-tip.jsx

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
const {StyleSheet, css} = require("aphrodite");
22
const React = require('react');
3+
const createReactClass = require('create-react-class');
4+
const PropTypes = require('prop-types');
35

46
const colors = {
57
grayLight: '#aaa',
@@ -89,9 +91,9 @@ const questionMark = 'data:image/png;base64,' +
8991
'gx99kue5GRp/gIOZuZGvNpTNwjD8oliANU+qqqKu6/TQBdymN57AHjzBT+B6Jx79BRgA' +
9092
'vc49kQA4yxgAAAAASUVORK5CYII=';
9193

92-
const InfoTip = React.createClass({
94+
const InfoTip = createReactClass({
9395
propTypes: {
94-
children: React.PropTypes.node,
96+
children: PropTypes.node,
9597
},
9698

9799
getInitialState: function() {

js/modal.jsx

+10-8
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121

2222
const aphrodite = require("aphrodite");
2323
const React = require("react");
24+
const createReactClass = require("create-react-class");
25+
const PropTypes = require("prop-types");
2426

2527
const css = aphrodite.css;
2628
const StyleSheet = aphrodite.StyleSheet;
@@ -50,24 +52,24 @@ const styles = StyleSheet.create({
5052
},
5153
});
5254

53-
const Modal = React.createClass({
55+
const Modal = createReactClass({
5456
propTypes: {
55-
children: React.PropTypes.node,
57+
children: PropTypes.node,
5658

57-
className: React.PropTypes.string,
59+
className: PropTypes.string,
5860

5961
// Close the modal when esc is pressed? Defaults to true.
60-
keyboard: React.PropTypes.bool,
62+
keyboard: PropTypes.bool,
6163

62-
onClose: React.PropTypes.func,
64+
onClose: PropTypes.func,
6365

6466
// TODO(joel) reimplement
6567
// Bootstrap modal's backdrop argument: Includes a modal-backdrop
6668
// element. Alternatively, specify static for a backdrop which doesn't
6769
// close the modal on click. Defaults to true.
68-
backdrop: React.PropTypes.oneOfType([
69-
React.PropTypes.bool,
70-
React.PropTypes.string,
70+
backdrop: PropTypes.oneOfType([
71+
PropTypes.bool,
72+
PropTypes.string,
7173
]),
7274
},
7375

js/multi-button-group.jsx

+10-8
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,21 @@
1818

1919
const React = require('react');
2020
const ReactDOM = require("react-dom");
21+
const createReactClass = require("create-react-class");
22+
const PropTypes = require("prop-types");
2123
const styles = require('./styles.js');
2224
const css = require("aphrodite").css;
2325

24-
const MultiButtonGroup = React.createClass({
26+
const MultiButtonGroup = createReactClass({
2527
propTypes: {
26-
values: React.PropTypes.arrayOf(React.PropTypes.any),
27-
buttons: React.PropTypes.arrayOf(React.PropTypes.shape({
28-
value: React.PropTypes.any.isRequired,
29-
content: React.PropTypes.node,
30-
title: React.PropTypes.string,
28+
values: PropTypes.arrayOf(PropTypes.any),
29+
buttons: PropTypes.arrayOf(PropTypes.shape({
30+
value: PropTypes.any.isRequired,
31+
content: PropTypes.node,
32+
title: PropTypes.string,
3133
})).isRequired,
32-
onChange: React.PropTypes.func.isRequired,
33-
allowEmpty: React.PropTypes.bool,
34+
onChange: PropTypes.func.isRequired,
35+
allowEmpty: PropTypes.bool,
3436
},
3537

3638
getDefaultProps: function() {

js/sortable.jsx

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
const React = require('react');
22
const ReactDOM = require("react-dom");
3+
const createReactClass = require("create-react-class");
4+
const PropTypes = require("prop-types");
35

4-
const PT = React.PropTypes;
6+
const PT = PropTypes;
57

68
// Takes an array of components to sort
7-
const SortableArea = React.createClass({
9+
const SortableArea = createReactClass({
810
propTypes: {
911
className: PT.string,
1012
components: PT.arrayOf(PT.node).isRequired,
@@ -125,7 +127,7 @@ const SortableArea = React.createClass({
125127
});
126128

127129
// An individual sortable item
128-
const SortableItem = React.createClass({
130+
const SortableItem = createReactClass({
129131
propTypes: {
130132
area: PT.shape({
131133
onDragEnter: PT.func.isRequired,

js/tex.jsx

+8-6
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
const PureRenderMixin = require("react-addons-pure-render-mixin");
99
const React = require("react");
1010
const ReactDOM = require("react-dom");
11+
const createReactClass = require("create-react-class");
12+
const PropTypes = require("prop-types");
1113

1214
const katexA11y = require("./katex-a11y.js");
1315

@@ -84,13 +86,13 @@ const srOnly = {
8486
width: "1px",
8587
};
8688

87-
const TeX = React.createClass({
89+
const TeX = createReactClass({
8890
propTypes: {
89-
children: React.PropTypes.node,
90-
katexOptions: React.PropTypes.any,
91-
onClick: React.PropTypes.func,
92-
onRender: React.PropTypes.func,
93-
style: React.PropTypes.any,
91+
children: PropTypes.node,
92+
katexOptions: PropTypes.any,
93+
onClick: PropTypes.func,
94+
onRender: PropTypes.func,
95+
style: PropTypes.any,
9496
},
9597

9698
mixins: [PureRenderMixin],

js/timeago.jsx

+5-3
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,16 @@
1313
*/
1414

1515
const React = require("react");
16+
const createReactClass = require("create-react-class");
17+
const PropTypes = require("prop-types");
1618
const SetIntervalMixin = require("./set-interval-mixin.jsx");
1719
const moment = require("moment");
1820

1921
// TODO(joel) i18n
20-
const TimeAgo = React.createClass({
22+
const TimeAgo = createReactClass({
2123
propTypes: {
22-
refreshMillis: React.PropTypes.number,
23-
time: React.PropTypes.any.isRequired,
24+
refreshMillis: PropTypes.number,
25+
time: PropTypes.any.isRequired,
2426
},
2527
mixins: [SetIntervalMixin],
2628
componentDidMount: function() {

js/timeout-transition-group.jsx

+17-18
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616

1717
const React = require('react');
1818
const ReactDOM = require('react-dom');
19-
const ReactTransitionGroup = require('react-addons-transition-group');
19+
const createReactClass = require("create-react-class");
20+
const PropTypes = require("prop-types");
21+
const TransitionGroup = require('react-transition-group').TransitionGroup;
2022

2123
const TICK = 17;
2224

@@ -116,14 +118,14 @@ function hasClass(element, className) {
116118
}
117119
}
118120

119-
const TimeoutTransitionGroupChild = React.createClass({
121+
const TimeoutTransitionGroupChild = createReactClass({
120122
propTypes: {
121-
children: React.PropTypes.node,
122-
enter: React.PropTypes.bool,
123-
enterTimeout: React.PropTypes.number.isRequired,
124-
name: React.PropTypes.string.isRequired,
125-
leave: React.PropTypes.bool,
126-
leaveTimeout: React.PropTypes.number.isRequired,
123+
children: PropTypes.node,
124+
enter: PropTypes.bool,
125+
enterTimeout: PropTypes.number.isRequired,
126+
name: PropTypes.string.isRequired,
127+
leave: PropTypes.bool,
128+
leaveTimeout: PropTypes.number.isRequired,
127129
},
128130

129131
componentWillMount: function() {
@@ -210,13 +212,13 @@ const TimeoutTransitionGroupChild = React.createClass({
210212
},
211213
});
212214

213-
const TimeoutTransitionGroup = React.createClass({
215+
const TimeoutTransitionGroup = createReactClass({
214216
propTypes: {
215-
enterTimeout: React.PropTypes.number.isRequired,
216-
leaveTimeout: React.PropTypes.number.isRequired,
217-
transitionName: React.PropTypes.string.isRequired,
218-
transitionEnter: React.PropTypes.bool,
219-
transitionLeave: React.PropTypes.bool,
217+
enterTimeout: PropTypes.number.isRequired,
218+
leaveTimeout: PropTypes.number.isRequired,
219+
transitionName: PropTypes.string.isRequired,
220+
transitionEnter: PropTypes.bool,
221+
transitionLeave: PropTypes.bool,
220222
},
221223

222224
getDefaultProps: function() {
@@ -242,10 +244,7 @@ const TimeoutTransitionGroup = React.createClass({
242244

243245
render: function() {
244246
return (
245-
<ReactTransitionGroup
246-
transitionName={this.props.transitionName}
247-
transitionEnter={this.props.transitionEnter}
248-
transitionLeave={this.props.transitionLeave}
247+
<TransitionGroup
249248
childFactory={this._wrapChild}
250249
/>
251250
);

0 commit comments

Comments
 (0)