UNPKG

material-ui

Version:

React Components that Implement Google's Material Design.

244 lines (196 loc) 6.88 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of'); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _TimeDisplay = require('./TimeDisplay'); var _TimeDisplay2 = _interopRequireDefault(_TimeDisplay); var _ClockHours = require('./ClockHours'); var _ClockHours2 = _interopRequireDefault(_ClockHours); var _ClockMinutes = require('./ClockMinutes'); var _ClockMinutes2 = _interopRequireDefault(_ClockMinutes); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var Clock = function (_Component) { (0, _inherits3.default)(Clock, _Component); function Clock() { var _ref; var _temp, _this, _ret; (0, _classCallCheck3.default)(this, Clock); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = Clock.__proto__ || (0, _getPrototypeOf2.default)(Clock)).call.apply(_ref, [this].concat(args))), _this), _this.state = { selectedTime: null, mode: 'hour' }, _this.setMode = function (mode) { setTimeout(function () { _this.setState({ mode: mode }); }, 100); }, _this.handleSelectAffix = function (affix) { if (affix === _this.getAffix()) return; var hours = _this.state.selectedTime.getHours(); if (affix === 'am') { _this.handleChangeHours(hours - 12, affix); return; } _this.handleChangeHours(hours + 12, affix); }, _this.handleChangeHours = function (hours, finished) { var time = new Date(_this.state.selectedTime); var affix = void 0; if (typeof finished === 'string') { affix = finished; finished = undefined; } if (!affix) { affix = _this.getAffix(); } if (affix === 'pm' && hours < 12) { hours += 12; } time.setHours(hours); _this.setState({ selectedTime: time }); if (finished) { setTimeout(function () { _this.setState({ mode: 'minute' }); var onChangeHours = _this.props.onChangeHours; if (onChangeHours) { onChangeHours(time); } }, 100); } }, _this.handleChangeMinutes = function (minutes, finished) { var time = new Date(_this.state.selectedTime); time.setMinutes(minutes); _this.setState({ selectedTime: time }); var onChangeMinutes = _this.props.onChangeMinutes; if (onChangeMinutes && finished) { setTimeout(function () { onChangeMinutes(time); }, 0); } }, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret); } (0, _createClass3.default)(Clock, [{ key: 'componentWillMount', value: function componentWillMount() { var selectedTime = this.props.initialTime || new Date(); var minutes = selectedTime.getMinutes(); selectedTime.setMinutes(minutes - minutes % this.props.minutesStep); this.setState({ selectedTime: selectedTime }); } }, { key: 'getAffix', value: function getAffix() { if (this.props.format !== 'ampm') return ''; var hours = this.state.selectedTime.getHours(); if (hours < 12) { return 'am'; } return 'pm'; } }, { key: 'getSelectedTime', value: function getSelectedTime() { return this.state.selectedTime; } }, { key: 'render', value: function render() { var clock = null; var _context$muiTheme = this.context.muiTheme, prepareStyles = _context$muiTheme.prepareStyles, timePicker = _context$muiTheme.timePicker; var styles = { root: { userSelect: 'none' }, container: { height: 280, padding: 10, position: 'relative', boxSizing: 'content-box' }, circle: { position: 'absolute', top: 20, width: 260, height: 260, borderRadius: '100%', backgroundColor: timePicker.clockCircleColor } }; if (this.state.mode === 'hour') { clock = _react2.default.createElement(_ClockHours2.default, { key: 'hours', format: this.props.format, onChange: this.handleChangeHours, initialHours: this.state.selectedTime.getHours() }); } else { clock = _react2.default.createElement(_ClockMinutes2.default, { key: 'minutes', onChange: this.handleChangeMinutes, initialMinutes: this.state.selectedTime.getMinutes(), step: this.props.minutesStep }); } return _react2.default.createElement( 'div', { style: prepareStyles(styles.root) }, _react2.default.createElement(_TimeDisplay2.default, { selectedTime: this.state.selectedTime, mode: this.state.mode, format: this.props.format, affix: this.getAffix(), onSelectAffix: this.handleSelectAffix, onSelectHour: this.setMode.bind(this, 'hour'), onSelectMin: this.setMode.bind(this, 'minute') }), _react2.default.createElement( 'div', { style: prepareStyles(styles.container) }, _react2.default.createElement('div', { style: prepareStyles(styles.circle) }), clock ) ); } }]); return Clock; }(_react.Component); Clock.defaultProps = { initialTime: new Date() }; Clock.contextTypes = { muiTheme: _propTypes2.default.object.isRequired }; Clock.propTypes = process.env.NODE_ENV !== "production" ? { format: _propTypes2.default.oneOf(['ampm', '24hr']), initialTime: _propTypes2.default.object, minutesStep: _propTypes2.default.number, onChangeHours: _propTypes2.default.func, onChangeMinutes: _propTypes2.default.func } : {}; exports.default = Clock;