function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }

function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }

function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

import React, { Component } from 'react';
import PropTypes from 'prop-types';
import classnames from 'classnames';
import moment from 'moment';
import nextLocale from '../locale/zh-cn';
import { func } from '../util';
import TimeMenu from './module/time-menu';
import { checkMomentObj } from './utils';
var noop = func.noop;

var TimePickerPanel =
/*#__PURE__*/
function (_Component) {
  _inherits(TimePickerPanel, _Component);

  function TimePickerPanel() {
    var _getPrototypeOf2;

    var _this;

    _classCallCheck(this, TimePickerPanel);

    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
      args[_key] = arguments[_key];
    }

    _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(TimePickerPanel)).call.apply(_getPrototypeOf2, [this].concat(args)));

    _defineProperty(_assertThisInitialized(_this), "onSelectMenuItem", function (index, type) {
      var value = _this.props.value;
      var clonedValue = value ? value.clone() : moment('00:00:00', 'HH:mm:ss', true);

      switch (type) {
        case 'hour':
          clonedValue.hour(index);
          break;

        case 'minute':
          clonedValue.minute(index);
          break;

        case 'second':
          clonedValue.second(index);
          break;
      }

      _this.props.onSelect(clonedValue);
    });

    return _this;
  }

  _createClass(TimePickerPanel, [{
    key: "render",
    value: function render() {
      var _classnames;

      var _this$props = this.props,
          prefix = _this$props.prefix,
          value = _this$props.value,
          locale = _this$props.locale,
          className = _this$props.className,
          disabled = _this$props.disabled,
          showHour = _this$props.showHour,
          showSecond = _this$props.showSecond,
          hourStep = _this$props.hourStep,
          minuteStep = _this$props.minuteStep,
          secondStep = _this$props.secondStep,
          disabledHours = _this$props.disabledHours,
          disabledMinutes = _this$props.disabledMinutes,
          disabledSeconds = _this$props.disabledSeconds,
          others = _objectWithoutProperties(_this$props, ["prefix", "value", "locale", "className", "disabled", "showHour", "showSecond", "hourStep", "minuteStep", "secondStep", "disabledHours", "disabledMinutes", "disabledSeconds"]);

      var classNames = classnames((_classnames = {}, _defineProperty(_classnames, "".concat(prefix, "time-picker-panel"), true), _defineProperty(_classnames, "".concat(prefix, "time-picker-panel-col-3"), showHour && showSecond), _defineProperty(_classnames, "".concat(prefix, "time-picker-panel-col-2"), !showHour || !showSecond), _classnames), className);
      var commonProps = {
        prefix: prefix,
        disabled: disabled,
        onSelect: this.onSelectMenuItem
      };
      var activeHour;
      var activeMinute;
      var activeSecond;

      if (value && moment.isMoment(value)) {
        activeHour = value.hour();
        activeMinute = value.minute();
        activeSecond = value.second();
      }

      return React.createElement("div", _extends({}, others, {
        className: classNames
      }), showHour ? React.createElement(TimeMenu, _extends({}, commonProps, {
        activeIndex: activeHour,
        title: locale.hour,
        mode: "hour",
        step: hourStep,
        disabledItems: disabledHours
      })) : null, React.createElement(TimeMenu, _extends({}, commonProps, {
        activeIndex: activeMinute,
        title: locale.minute,
        mode: "minute",
        step: minuteStep,
        disabledItems: disabledMinutes
      })), showSecond ? React.createElement(TimeMenu, _extends({}, commonProps, {
        activeIndex: activeSecond,
        title: locale.second,
        step: secondStep,
        mode: "second",
        disabledItems: disabledSeconds
      })) : null);
    }
  }]);

  return TimePickerPanel;
}(Component);

_defineProperty(TimePickerPanel, "propTypes", {
  prefix: PropTypes.string,

  /**
   * 时间值（moment 对象）
   */
  value: checkMomentObj,

  /**
   * 是否显示小时
   */
  showHour: PropTypes.bool,

  /**
   * 是否显示秒
   */
  showSecond: PropTypes.bool,

  /**
   * 小时选项步长
   */
  hourStep: PropTypes.number,

  /**
   * 分钟选项步长
   */
  minuteStep: PropTypes.number,

  /**
   * 秒钟选项步长
   */
  secondStep: PropTypes.number,

  /**
   * 禁用小时函数
   * @param {Number} index 时 0 - 23
   * @return {Boolean} 是否禁用
   */
  disabledHours: PropTypes.func,

  /**
   * 禁用分钟函数
   * @param {Number} index 分 0 - 59
   * @return {Boolean} 是否禁用
   */
  disabledMinutes: PropTypes.func,

  /**
   * 禁用秒函数
   * @param {Number} index 秒 0 - 59
   * @return {Boolean} 是否禁用
   */
  disabledSeconds: PropTypes.func,

  /**
   * 选择某个日期值时的回调
   * @param {Object} 选中后的日期值
   */
  onSelect: PropTypes.func,
  locale: PropTypes.object,
  disabled: PropTypes.bool,
  className: PropTypes.string
});

_defineProperty(TimePickerPanel, "defaultProps", {
  prefix: 'next-',
  showHour: true,
  showSecond: true,
  disabledHours: noop,
  disabledMinutes: noop,
  disabledSeconds: noop,
  onSelect: noop,
  disabled: false,
  locale: nextLocale.TimePicker
});

export default TimePickerPanel;