]> git.immae.eu Git - github/fretlink/time-picker.git/commitdiff
fix react createClass and PropTypes warning fix-react-15.5-warning
authorafc163 <afc163@gmail.com>
Fri, 14 Apr 2017 09:13:04 +0000 (17:13 +0800)
committerafc163 <afc163@gmail.com>
Fri, 14 Apr 2017 09:13:04 +0000 (17:13 +0800)
12 files changed:
examples/format.js
examples/open.js
examples/value-and-defaultValue.js
package.json
src/Combobox.jsx
src/Header.jsx
src/Panel.jsx
src/Select.jsx
src/TimePicker.jsx
tests/Header.spec.jsx
tests/Select.spec.jsx
tests/TimePicker.spec.jsx

index c9a9539ab288c8fb89c759c945ce0740e3ebdcf1..e9a2614a3702dfb1ab599a76a53407d026e6a2d4 100644 (file)
@@ -4,23 +4,14 @@ import ReactDom from 'react-dom';
 import moment from 'moment';
 import TimePicker from 'rc-time-picker';
 
-const App = React.createClass({
-  render() {
-    return (
-      <div>
-        <TimePicker defaultValue={moment()} showHour={false} />
-        <TimePicker defaultValue={moment()} showMinute={false} />
-        <TimePicker defaultValue={moment()} showSecond={false} />
-
-        <TimePicker defaultValue={moment()} showMinute={false} showSecond={false} />
-        <TimePicker defaultValue={moment()} showHour={false} showSecond={false}/>
-        <TimePicker defaultValue={moment()} showHour={false} showMinute={false} />
-      </div>
-    );
-  },
-});
-
 ReactDom.render(
-  <App />,
-  document.getElementById('__react-content')
-);
+  <div>
+    <TimePicker defaultValue={moment()} showHour={false} />
+    <TimePicker defaultValue={moment()} showMinute={false} />
+    <TimePicker defaultValue={moment()} showSecond={false} />
+
+    <TimePicker defaultValue={moment()} showMinute={false} showSecond={false} />
+    <TimePicker defaultValue={moment()} showHour={false} showSecond={false}/>
+    <TimePicker defaultValue={moment()} showHour={false} showMinute={false} />
+  </div>
+, document.getElementById('__react-content'));
index 100bf352d368e64d64756a64a9a27aa84024ab0e..8e4f5de7865410da4496fa707832abb4a9c28e6a 100644 (file)
@@ -6,20 +6,18 @@ import React from 'react';
 import ReactDom from 'react-dom';
 import TimePicker from 'rc-time-picker';
 
-const App = React.createClass({
-  getInitialState() {
-    return {
-      open: false,
-    };
-  },
-  setOpen({ open }) {
+class App extends React.Component {
+  state = {
+    open: false,
+  };
+  setOpen = ({ open }) => {
     this.setState({ open });
-  },
-  toggleOpen() {
+  }
+  toggleOpen = () => {
     this.setState({
       open: !this.state.open,
     });
-  },
+  }
   render() {
     return (
       <div>
@@ -27,8 +25,8 @@ const App = React.createClass({
         <TimePicker open={this.state.open} onOpen={this.setOpen} onClose={this.setOpen} />
       </div>
     );
-  },
-});
+  }
+}
 
 ReactDom.render(
   <App />,
index 0e1aa146286621fb12cc0456212fb6585ce44073..1e1baf8f726c913253d15d02154df76a01d9c26b 100644 (file)
@@ -7,21 +7,19 @@ import ReactDom from 'react-dom';
 import moment from 'moment';
 import TimePicker from 'rc-time-picker';
 
-const App = React.createClass({
-  getInitialState() {
-    return {
-      value: moment(),
-    };
-  },
-  handleValueChange(value) {
+class App extends React.Component {
+  state = {
+    value: moment(),
+  };
+  handleValueChange = (value) => {
     console.log(value && value.format('HH:mm:ss'));
     this.setState({ value });
-  },
-  clear() {
+  }
+  clear = () => {
     this.setState({
       value: undefined,
     });
-  },
+  }
   render() {
     return (
       <div>
@@ -36,8 +34,8 @@ const App = React.createClass({
         <button onClick={this.clear}>clear</button>
       </div>
     );
-  },
-});
+  }
+}
 
 ReactDom.render(
   <App />,
index 10b1df24c6ffe85982669dfd81deca41d73ea930..da78772aaa14ddb4b9d6a0defc01e132adb9180b 100644 (file)
@@ -51,7 +51,6 @@
     "rc-tools": "5.x",
     "rc-util": "^4.0.2",
     "react": "15.x",
-    "react-addons-test-utils": "15.x",
     "react-dom": "15.x"
   },
   "pre-commit": [
@@ -61,6 +60,7 @@
     "babel-runtime": "6.x",
     "classnames": "2.x",
     "moment": "2.x",
+    "prop-types": "^15.5.8",
     "rc-trigger": "1.x"
   }
 }
index 477c5eea5aa9e2a1d5f869f21047840f9d427139..1eed4d295e90efabb1400cb869ec19aa8db4f87f 100644 (file)
@@ -1,4 +1,5 @@
-import React, { PropTypes } from 'react';
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
 import Select from './Select';
 
 const formatOption = (option, disabledOptions) => {
@@ -18,8 +19,8 @@ const formatOption = (option, disabledOptions) => {
   };
 };
 
-const Combobox = React.createClass({
-  propTypes: {
+class Combobox extends Component {
+  static propTypes = {
     format: PropTypes.string,
     defaultOpenValue: PropTypes.object,
     prefixCls: PropTypes.string,
@@ -36,9 +37,9 @@ const Combobox = React.createClass({
     disabledSeconds: PropTypes.func,
     onCurrentSelectPanelChange: PropTypes.func,
     use12Hours: PropTypes.bool,
-  },
+  };
 
-  onItemChange(type, itemValue) {
+  onItemChange = (type, itemValue) => {
     const { onChange, defaultOpenValue, use12Hours } = this.props;
     const value = (this.props.value || defaultOpenValue).clone();
 
@@ -71,11 +72,11 @@ const Combobox = React.createClass({
       value.second(+itemValue);
     }
     onChange(value);
-  },
+  }
 
-  onEnterSelectPanel(range) {
+  onEnterSelectPanel = (range) => {
     this.props.onCurrentSelectPanelChange(range);
-  },
+  }
 
   getHourSelect(hour) {
     const { prefixCls, hourOptions, disabledHours, showHour, use12Hours } = this.props;
@@ -103,7 +104,7 @@ const Combobox = React.createClass({
         onMouseEnter={this.onEnterSelectPanel.bind(this, 'hour')}
       />
     );
-  },
+  }
 
   getMinuteSelect(minute) {
     const { prefixCls, minuteOptions, disabledMinutes, defaultOpenValue, showMinute } = this.props;
@@ -123,7 +124,7 @@ const Combobox = React.createClass({
         onMouseEnter={this.onEnterSelectPanel.bind(this, 'minute')}
       />
     );
-  },
+  }
 
   getSecondSelect(second) {
     const { prefixCls, secondOptions, disabledSeconds, showSecond, defaultOpenValue } = this.props;
@@ -143,7 +144,7 @@ const Combobox = React.createClass({
         onMouseEnter={this.onEnterSelectPanel.bind(this, 'second')}
       />
     );
-  },
+  }
 
   getAMPMSelect() {
     const { prefixCls, use12Hours, format } = this.props;
@@ -167,12 +168,12 @@ const Combobox = React.createClass({
         onMouseEnter={this.onEnterSelectPanel.bind(this, 'ampm')}
       />
     );
-  },
+  }
 
   isAM() {
     const value = (this.props.value || this.props.defaultOpenValue);
     return value.hour() >= 0 && value.hour() < 12;
-  },
+  }
 
   render() {
     const { prefixCls, defaultOpenValue } = this.props;
@@ -185,7 +186,7 @@ const Combobox = React.createClass({
         {this.getAMPMSelect(value.hour())}
       </div>
     );
-  },
-});
+  }
+}
 
 export default Combobox;
index 2ef982776cbe71343e2478e79080ebe3b83debfc..91e8549e14664555290a905a8b0102cddd27f808 100644 (file)
@@ -1,8 +1,9 @@
-import React, { PropTypes } from 'react';
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
 import moment from 'moment';
 
-const Header = React.createClass({
-  propTypes: {
+class Header extends Component {
+  static propTypes = {
     format: PropTypes.string,
     prefixCls: PropTypes.string,
     disabledDate: PropTypes.func,
@@ -21,15 +22,16 @@ const Header = React.createClass({
     allowEmpty: PropTypes.bool,
     defaultOpenValue: PropTypes.object,
     currentSelectPanel: PropTypes.string,
-  },
+  };
 
-  getInitialState() {
-    const { value, format } = this.props;
-    return {
+  constructor(props) {
+    super(props);
+    const { value, format } = props;
+    this.state = {
       str: value && value.format(format) || '',
       invalid: false,
     };
-  },
+  }
 
   componentWillReceiveProps(nextProps) {
     const { value, format } = nextProps;
@@ -37,9 +39,9 @@ const Header = React.createClass({
       str: value && value.format(format) || '',
       invalid: false,
     });
-  },
+  }
 
-  onInputChange(event) {
+  onInputChange = (event) => {
     const str = event.target.value;
     this.setState({
       str,
@@ -117,18 +119,18 @@ const Header = React.createClass({
     this.setState({
       invalid: false,
     });
-  },
+  }
 
-  onKeyDown(e) {
+  onKeyDown = (e) => {
     if (e.keyCode === 27) {
       this.props.onEsc();
     }
-  },
+  }
 
-  onClear() {
+  onClear = () => {
     this.setState({ str: '' });
     this.props.onClear();
-  },
+  }
 
   getClearButton() {
     const { prefixCls, allowEmpty } = this.props;
@@ -141,11 +143,11 @@ const Header = React.createClass({
       title={this.props.clearText}
       onMouseDown={this.onClear}
     />);
-  },
+  }
 
   getProtoValue() {
     return this.props.value || this.props.defaultOpenValue;
-  },
+  }
 
   getInput() {
     const { prefixCls, placeholder } = this.props;
@@ -161,7 +163,7 @@ const Header = React.createClass({
         onChange={this.onInputChange}
       />
     );
-  },
+  }
 
   render() {
     const { prefixCls } = this.props;
@@ -171,7 +173,7 @@ const Header = React.createClass({
         {this.getClearButton()}
       </div>
     );
-  },
-});
+  }
+}
 
 export default Header;
index df128ff67d75741216952588899a005c570bb30f..65832eabaabade0a522b5926d5f1c158a1ce6468 100644 (file)
@@ -1,4 +1,5 @@
-import React, { PropTypes } from 'react';
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
 import Header from './Header';
 import Combobox from './Combobox';
 import moment from 'moment';
@@ -17,8 +18,8 @@ function generateOptions(length, disabledOptions, hideDisabledOptions) {
   return arr;
 }
 
-const Panel = React.createClass({
-  propTypes: {
+class Panel extends Component {
+  static propTypes = {
     clearText: PropTypes.string,
     prefixCls: PropTypes.string,
     className: PropTypes.string,
@@ -39,28 +40,27 @@ const Panel = React.createClass({
     onClear: PropTypes.func,
     use12Hours: PropTypes.bool,
     addon: PropTypes.func,
-  },
+  };
 
-  getDefaultProps() {
-    return {
-      prefixCls: 'rc-time-picker-panel',
-      onChange: noop,
-      onClear: noop,
-      disabledHours: noop,
-      disabledMinutes: noop,
-      disabledSeconds: noop,
-      defaultOpenValue: moment(),
-      use12Hours: false,
-      addon: noop,
-    };
-  },
+  static defaultProps = {
+    prefixCls: 'rc-time-picker-panel',
+    onChange: noop,
+    onClear: noop,
+    disabledHours: noop,
+    disabledMinutes: noop,
+    disabledSeconds: noop,
+    defaultOpenValue: moment(),
+    use12Hours: false,
+    addon: noop,
+  };
 
-  getInitialState() {
-    return {
-      value: this.props.value,
+  constructor(props) {
+    super(props);
+    this.state = {
+      value: props.value,
       selectionRange: [],
     };
-  },
+  }
 
   componentWillReceiveProps(nextProps) {
     const value = nextProps.value;
@@ -69,30 +69,22 @@ const Panel = React.createClass({
         value,
       });
     }
-  },
+  }
 
-  onChange(newValue) {
+  onChange = (newValue) => {
     this.setState({ value: newValue });
     this.props.onChange(newValue);
-  },
-
-  onClear() {
-    this.props.onClear();
-  },
+  }
 
-  onCurrentSelectPanelChange(currentSelectPanel) {
+  onCurrentSelectPanelChange = (currentSelectPanel) => {
     this.setState({ currentSelectPanel });
-  },
-
-  close() {
-    this.props.onEsc();
-  },
+  }
 
   render() {
     const {
       prefixCls, className, placeholder, disabledHours, disabledMinutes,
       disabledSeconds, hideDisabledOptions, allowEmpty, showHour, showMinute, showSecond,
-      format, defaultOpenValue, clearText, onEsc, addon, use12Hours,
+      format, defaultOpenValue, clearText, onEsc, addon, use12Hours, onClear,
     } = this.props;
     const {
       value, currentSelectPanel,
@@ -123,7 +115,7 @@ const Panel = React.createClass({
           disabledMinutes={disabledMinutes}
           disabledSeconds={disabledSeconds}
           onChange={this.onChange}
-          onClear={this.onClear}
+          onClear={onClear}
           allowEmpty={allowEmpty}
         />
         <Combobox
@@ -147,7 +139,7 @@ const Panel = React.createClass({
         {addon(this)}
       </div>
     );
-  },
-});
+  }
+}
 
 export default Panel;
index deb155ddbae5c7884c4efe6cd63c5076c415b5cd..49fed5b83c6911767c60d2156d7dd552ffedc5d3 100644 (file)
@@ -1,4 +1,5 @@
-import React, { PropTypes } from 'react';
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
 import ReactDom from 'react-dom';
 import classnames from 'classnames';
 
@@ -22,38 +23,36 @@ const scrollTo = (element, to, duration) => {
   });
 };
 
-const Select = React.createClass({
-  propTypes: {
+class Select extends Component {
+  static propTypes = {
     prefixCls: PropTypes.string,
     options: PropTypes.array,
     selectedIndex: PropTypes.number,
     type: PropTypes.string,
     onSelect: PropTypes.func,
     onMouseEnter: PropTypes.func,
-  },
+  };
 
-  getInitialState() {
-    return {
-      active: false,
-    };
-  },
+  state = {
+    active: false,
+  };
 
   componentDidMount() {
     // jump to selected option
     this.scrollToSelected(0);
-  },
+  }
 
   componentDidUpdate(prevProps) {
     // smooth scroll to selected option
     if (prevProps.selectedIndex !== this.props.selectedIndex) {
       this.scrollToSelected(120);
     }
-  },
+  }
 
-  onSelect(value) {
+  onSelect = (value) => {
     const { onSelect, type } = this.props;
     onSelect(type, value);
-  },
+  }
 
   getOptions() {
     const { options, selectedIndex, prefixCls } = this.props;
@@ -75,7 +74,7 @@ const Select = React.createClass({
         {item.value}
       </li>);
     });
-  },
+  }
 
   scrollToSelected(duration) {
     // move to selected item
@@ -91,16 +90,16 @@ const Select = React.createClass({
     const topOption = list.children[index];
     const to = topOption.offsetTop;
     scrollTo(select, to, duration);
-  },
+  }
 
-  handleMouseEnter(e) {
+  handleMouseEnter = (e) => {
     this.setState({ active: true });
     this.props.onMouseEnter(e);
-  },
+  }
 
-  handleMouseLeave() {
+  handleMouseLeave = () => {
     this.setState({ active: false });
-  },
+  }
 
   render() {
     if (this.props.options.length === 0) {
@@ -122,7 +121,7 @@ const Select = React.createClass({
         <ul ref="list">{this.getOptions()}</ul>
       </div>
     );
-  },
-});
+  }
+}
 
 export default Select;
index d94ed940baffa48ff9868ad9ce659509639e79f6..1a3516e974ebdff4d2c3c191531783d3fd81cbed 100644 (file)
@@ -1,4 +1,5 @@
-import React, { PropTypes } from 'react';
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
 import Trigger from 'rc-trigger';
 import Panel from './Panel';
 import placements from './placements';
@@ -11,8 +12,8 @@ function refFn(field, component) {
   this[field] = component;
 }
 
-const Picker = React.createClass({
-  propTypes: {
+class Picker extends Component {
+  static propTypes = {
     prefixCls: PropTypes.string,
     clearText: PropTypes.string,
     value: PropTypes.object,
@@ -44,43 +45,42 @@ const Picker = React.createClass({
     name: PropTypes.string,
     autoComplete: PropTypes.string,
     use12Hours: PropTypes.bool,
-  },
-
-  getDefaultProps() {
-    return {
-      clearText: 'clear',
-      prefixCls: 'rc-time-picker',
-      defaultOpen: false,
-      style: {},
-      className: '',
-      align: {},
-      defaultOpenValue: moment(),
-      allowEmpty: true,
-      showHour: true,
-      showMinute: true,
-      showSecond: true,
-      disabledHours: noop,
-      disabledMinutes: noop,
-      disabledSeconds: noop,
-      hideDisabledOptions: false,
-      placement: 'bottomLeft',
-      onChange: noop,
-      onOpen: noop,
-      onClose: noop,
-      addon: noop,
-      use12Hours: false,
-    };
-  },
-
-  getInitialState() {
+  };
+
+  static defaultProps = {
+    clearText: 'clear',
+    prefixCls: 'rc-time-picker',
+    defaultOpen: false,
+    style: {},
+    className: '',
+    align: {},
+    defaultOpenValue: moment(),
+    allowEmpty: true,
+    showHour: true,
+    showMinute: true,
+    showSecond: true,
+    disabledHours: noop,
+    disabledMinutes: noop,
+    disabledSeconds: noop,
+    hideDisabledOptions: false,
+    placement: 'bottomLeft',
+    onChange: noop,
+    onOpen: noop,
+    onClose: noop,
+    addon: noop,
+    use12Hours: false,
+  };
+
+  constructor(props) {
+    super(props);
     this.saveInputRef = refFn.bind(this, 'picker');
     this.savePanelRef = refFn.bind(this, 'panelInstance');
-    const { defaultOpen, defaultValue, open = defaultOpen, value = defaultValue } = this.props;
-    return {
+    const { defaultOpen, defaultValue, open = defaultOpen, value = defaultValue } = props;
+    this.state = {
       open,
       value,
     };
-  },
+  }
 
   componentWillReceiveProps(nextProps) {
     const { value, open } = nextProps;
@@ -92,31 +92,31 @@ const Picker = React.createClass({
     if (open !== undefined) {
       this.setState({ open });
     }
-  },
+  }
 
-  onPanelChange(value) {
+  onPanelChange = (value) => {
     this.setValue(value);
-  },
+  }
 
-  onPanelClear() {
+  onPanelClear = () => {
     this.setValue(null);
     this.setOpen(false);
-  },
+  }
 
-  onVisibleChange(open) {
+  onVisibleChange = (open) => {
     this.setOpen(open);
-  },
+  }
 
-  onEsc() {
+  onEsc = () => {
     this.setOpen(false);
     this.focus();
-  },
+  }
 
-  onKeyDown(e) {
+  onKeyDown = (e) => {
     if (e.keyCode === 40) {
       this.setOpen(true);
     }
-  },
+  }
 
   setValue(value) {
     if (!('value' in this.props)) {
@@ -125,7 +125,7 @@ const Picker = React.createClass({
       });
     }
     this.props.onChange(value);
-  },
+  }
 
   getFormat() {
     const { format, showHour, showMinute, showSecond, use12Hours } = this.props;
@@ -148,7 +148,7 @@ const Picker = React.createClass({
       showMinute ? 'mm' : '',
       showSecond ? 'ss' : '',
     ].filter(item => !!item).join(':');
-  },
+  }
 
   getPanelElement() {
     const {
@@ -181,7 +181,7 @@ const Picker = React.createClass({
         addon={addon}
       />
     );
-  },
+  }
 
   setOpen(open) {
     const { onOpen, onClose } = this.props;
@@ -195,11 +195,11 @@ const Picker = React.createClass({
         onClose({ open });
       }
     }
-  },
+  }
 
   focus() {
     this.picker.focus();
-  },
+  }
 
   render() {
     const {
@@ -244,7 +244,7 @@ const Picker = React.createClass({
         </span>
       </Trigger>
     );
-  },
-});
+  }
+}
 
 export default Picker;
index 682852d9e3fa49182c2dfc237791b08e30b11583..5ab0ba004e3a4d68516fe9d913c0bb7bc9de4b4f 100644 (file)
@@ -2,7 +2,7 @@ import ReactDOM from 'react-dom';
 import React from 'react';
 import TimePicker from '../src/TimePicker';
 
-import TestUtils from 'react-addons-test-utils';
+import TestUtils from 'react-dom/test-utils';
 const Simulate = TestUtils.Simulate;
 import expect from 'expect.js';
 import async from 'async';
index 2d300987fe2175c60ecfbae6ea642a6f7d53ccb9..b2c111d842f7468ca8dcb7f621021eb7c310da5f 100644 (file)
@@ -1,7 +1,7 @@
 import ReactDOM from 'react-dom';
 import React from 'react';
 import TimePicker from '../src/TimePicker';
-import TestUtils from 'react-addons-test-utils';
+import TestUtils from 'react-dom/test-utils';
 const Simulate = TestUtils.Simulate;
 import expect from 'expect.js';
 import async from 'async';
index 6f9ac2de1f75d635df2069a49ec40a0cf93787b3..0dd6c101ccaf9643c01c24f4b53e2bcd1905fe8c 100644 (file)
@@ -2,7 +2,7 @@ import ReactDOM from 'react-dom';
 import React from 'react';
 import TimePicker from '../src/TimePicker';
 
-import TestUtils from 'react-addons-test-utils';
+import TestUtils from 'react-dom/test-utils';
 const Simulate = TestUtils.Simulate;
 import expect from 'expect.js';
 import async from 'async';