You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

244 lines
6.7 KiB

  1. 'use strict';
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
  6. var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
  7. var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
  8. var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
  9. var _createClass2 = require('babel-runtime/helpers/createClass');
  10. var _createClass3 = _interopRequireDefault(_createClass2);
  11. var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
  12. var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
  13. var _inherits2 = require('babel-runtime/helpers/inherits');
  14. var _inherits3 = _interopRequireDefault(_inherits2);
  15. var _react = require('react');
  16. var _react2 = _interopRequireDefault(_react);
  17. var _propTypes = require('prop-types');
  18. var _propTypes2 = _interopRequireDefault(_propTypes);
  19. var _TimeDisplay = require('./TimeDisplay');
  20. var _TimeDisplay2 = _interopRequireDefault(_TimeDisplay);
  21. var _ClockHours = require('./ClockHours');
  22. var _ClockHours2 = _interopRequireDefault(_ClockHours);
  23. var _ClockMinutes = require('./ClockMinutes');
  24. var _ClockMinutes2 = _interopRequireDefault(_ClockMinutes);
  25. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  26. var Clock = function (_Component) {
  27. (0, _inherits3.default)(Clock, _Component);
  28. function Clock() {
  29. var _ref;
  30. var _temp, _this, _ret;
  31. (0, _classCallCheck3.default)(this, Clock);
  32. for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
  33. args[_key] = arguments[_key];
  34. }
  35. return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = Clock.__proto__ || (0, _getPrototypeOf2.default)(Clock)).call.apply(_ref, [this].concat(args))), _this), _this.state = {
  36. selectedTime: null,
  37. mode: 'hour'
  38. }, _this.setMode = function (mode) {
  39. setTimeout(function () {
  40. _this.setState({
  41. mode: mode
  42. });
  43. }, 100);
  44. }, _this.handleSelectAffix = function (affix) {
  45. if (affix === _this.getAffix()) return;
  46. var hours = _this.state.selectedTime.getHours();
  47. if (affix === 'am') {
  48. _this.handleChangeHours(hours - 12, affix);
  49. return;
  50. }
  51. _this.handleChangeHours(hours + 12, affix);
  52. }, _this.handleChangeHours = function (hours, finished) {
  53. var time = new Date(_this.state.selectedTime);
  54. var affix = void 0;
  55. if (typeof finished === 'string') {
  56. affix = finished;
  57. finished = undefined;
  58. }
  59. if (!affix) {
  60. affix = _this.getAffix();
  61. }
  62. if (affix === 'pm' && hours < 12) {
  63. hours += 12;
  64. }
  65. time.setHours(hours);
  66. _this.setState({
  67. selectedTime: time
  68. });
  69. if (finished) {
  70. setTimeout(function () {
  71. _this.setState({
  72. mode: 'minute'
  73. });
  74. var onChangeHours = _this.props.onChangeHours;
  75. if (onChangeHours) {
  76. onChangeHours(time);
  77. }
  78. }, 100);
  79. }
  80. }, _this.handleChangeMinutes = function (minutes, finished) {
  81. var time = new Date(_this.state.selectedTime);
  82. time.setMinutes(minutes);
  83. _this.setState({
  84. selectedTime: time
  85. });
  86. var onChangeMinutes = _this.props.onChangeMinutes;
  87. if (onChangeMinutes && finished) {
  88. setTimeout(function () {
  89. onChangeMinutes(time);
  90. }, 0);
  91. }
  92. }, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret);
  93. }
  94. (0, _createClass3.default)(Clock, [{
  95. key: 'componentWillMount',
  96. value: function componentWillMount() {
  97. var selectedTime = this.props.initialTime || new Date();
  98. var minutes = selectedTime.getMinutes();
  99. selectedTime.setMinutes(minutes - minutes % this.props.minutesStep);
  100. this.setState({
  101. selectedTime: selectedTime
  102. });
  103. }
  104. }, {
  105. key: 'getAffix',
  106. value: function getAffix() {
  107. if (this.props.format !== 'ampm') return '';
  108. var hours = this.state.selectedTime.getHours();
  109. if (hours < 12) {
  110. return 'am';
  111. }
  112. return 'pm';
  113. }
  114. }, {
  115. key: 'getSelectedTime',
  116. value: function getSelectedTime() {
  117. return this.state.selectedTime;
  118. }
  119. }, {
  120. key: 'render',
  121. value: function render() {
  122. var clock = null;
  123. var _context$muiTheme = this.context.muiTheme,
  124. prepareStyles = _context$muiTheme.prepareStyles,
  125. timePicker = _context$muiTheme.timePicker;
  126. var styles = {
  127. root: {
  128. userSelect: 'none'
  129. },
  130. container: {
  131. height: 280,
  132. padding: 10,
  133. position: 'relative',
  134. boxSizing: 'content-box'
  135. },
  136. circle: {
  137. position: 'absolute',
  138. top: 20,
  139. width: 260,
  140. height: 260,
  141. borderRadius: '100%',
  142. backgroundColor: timePicker.clockCircleColor
  143. }
  144. };
  145. if (this.state.mode === 'hour') {
  146. clock = _react2.default.createElement(_ClockHours2.default, {
  147. key: 'hours',
  148. format: this.props.format,
  149. onChange: this.handleChangeHours,
  150. initialHours: this.state.selectedTime.getHours()
  151. });
  152. } else {
  153. clock = _react2.default.createElement(_ClockMinutes2.default, {
  154. key: 'minutes',
  155. onChange: this.handleChangeMinutes,
  156. initialMinutes: this.state.selectedTime.getMinutes(),
  157. step: this.props.minutesStep
  158. });
  159. }
  160. return _react2.default.createElement(
  161. 'div',
  162. { style: prepareStyles(styles.root) },
  163. _react2.default.createElement(_TimeDisplay2.default, {
  164. selectedTime: this.state.selectedTime,
  165. mode: this.state.mode,
  166. format: this.props.format,
  167. affix: this.getAffix(),
  168. onSelectAffix: this.handleSelectAffix,
  169. onSelectHour: this.setMode.bind(this, 'hour'),
  170. onSelectMin: this.setMode.bind(this, 'minute')
  171. }),
  172. _react2.default.createElement(
  173. 'div',
  174. { style: prepareStyles(styles.container) },
  175. _react2.default.createElement('div', { style: prepareStyles(styles.circle) }),
  176. clock
  177. )
  178. );
  179. }
  180. }]);
  181. return Clock;
  182. }(_react.Component);
  183. Clock.defaultProps = {
  184. initialTime: new Date()
  185. };
  186. Clock.contextTypes = {
  187. muiTheme: _propTypes2.default.object.isRequired
  188. };
  189. Clock.propTypes = process.env.NODE_ENV !== "production" ? {
  190. format: _propTypes2.default.oneOf(['ampm', '24hr']),
  191. initialTime: _propTypes2.default.object,
  192. minutesStep: _propTypes2.default.number,
  193. onChangeHours: _propTypes2.default.func,
  194. onChangeMinutes: _propTypes2.default.func
  195. } : {};
  196. exports.default = Clock;