content: import _classCallCheck from 'babel-runtime/helpers/classCallCheck';
  import _createClass from 'babel-runtime/helpers/createClass';
  import _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';
  import _inherits from 'babel-runtime/helpers/inherits';
  import React, { Component } from 'react';
  import PropTypes from 'prop-types';
  import { getMonthName } from '../util';
  
  function noop() {}
  
  var CalendarHeader = function (_Component) {
    _inherits(CalendarHeader, _Component);
  
    function CalendarHeader() {
      _classCallCheck(this, CalendarHeader);
  
      return _possibleConstructorReturn(this, (CalendarHeader.__proto__ || Object.getPrototypeOf(CalendarHeader)).apply(this, arguments));
    }
  
    _createClass(CalendarHeader, [{
      key: 'onYearChange',
      value: function onYearChange(year) {
        var newValue = this.props.value.clone();
        newValue.year(parseInt(year, 10));
        this.props.onValueChange(newValue);
      }
    }, {
      key: 'onMonthChange',
      value: function onMonthChange(month) {
        var newValue = this.props.value.clone();
        newValue.month(parseInt(month, 10));
        this.props.onValueChange(newValue);
      }
    }, {
      key: 'yearSelectElement',
      value: function yearSelectElement(year) {
        var _props = this.props,
            yearSelectOffset = _props.yearSelectOffset,
            yearSelectTotal = _props.yearSelectTotal,
            prefixCls = _props.prefixCls,
            Select = _props.Select;
  
        var start = year - yearSelectOffset;
        var end = start + yearSelectTotal;
  
        var options = [];
        for (var index = start; index < end; index++) {
          options.push(React.createElement(
            Select.Option,
            { key: '' + index },
            index
          ));
        }
        return React.createElement(
          Select,
          {
            className: prefixCls + '-header-year-select',
            onChange: this.onYearChange.bind(this),
            dropdownStyle: { zIndex: 2000 },
            dropdownMenuStyle: { maxHeight: 250, overflow: 'auto', fontSize: 12 },
            optionLabelProp: 'children',
            value: String(year),
            showSearch: false
          },
          options
        );
      }
    }, {
      key: 'monthSelectElement',
      value: function monthSelectElement(month) {
        var props = this.props;
        var t = props.value.clone();
        var prefixCls = props.prefixCls;
  
        var options = [];
        var Select = props.Select;
  
        for (var index = 0; index < 12; index++) {
          t.month(index);
          options.push(React.createElement(
            Select.Option,
            { key: '' + index },
            getMonthName(t)
          ));
        }
  
        return React.createElement(
          Select,
          {
            className: prefixCls + '-header-month-select',
            dropdownStyle: { zIndex: 2000 },
            dropdownMenuStyle: { maxHeight: 250, overflow: 'auto', overflowX: 'hidden', fontSize: 12 },
            optionLabelProp: 'children',
            value: String(month),
            showSearch: false,
            onChange: this.onMonthChange.bind(this)
          },
          options
        );
      }
    }, {
      key: 'changeTypeToDate',
      value: function changeTypeToDate() {
        this.props.onTypeChange('date');
      }
    }, {
      key: 'changeTypeToMonth',
      value: function changeTypeToMonth() {
        this.props.onTypeChange('month');
      }
    }, {
      key: 'render',
      value: function render() {
        var _props2 = this.props,
            value = _props2.value,
            locale = _props2.locale,
            prefixCls = _props2.prefixCls,
            type = _props2.type,
            showTypeSwitch = _props2.showTypeSwitch,
            headerComponents = _props2.headerComponents;
  
        var year = value.year();
        var month = value.month();
        var yearSelect = this.yearSelectElement(year);
        var monthSelect = type === 'month' ? null : this.monthSelectElement(month);
        var switchCls = prefixCls + '-header-switcher';
        var typeSwitcher = showTypeSwitch ? React.createElement(
          'span',
          { className: switchCls },
          type === 'date' ? React.createElement(
            'span',
            { className: switchCls + '-focus' },
            locale.month
          ) : React.createElement(
            'span',
            {
              onClick: this.changeTypeToDate.bind(this),
              className: switchCls + '-normal'
            },
            locale.month
          ),
          type === 'month' ? React.createElement(
            'span',
            { className: switchCls + '-focus' },
            locale.year
          ) : React.createElement(
            'span',
            {
              onClick: this.changeTypeToMonth.bind(this),
              className: switchCls + '-normal'
            },
            locale.year
          )
        ) : null;
  
        return React.createElement(
          'div',
          { className: prefixCls + '-header' },
          typeSwitcher,
          monthSelect,
          yearSelect,
          headerComponents
        );
      }
    }]);
  
    return CalendarHeader;
  }(Component);
  
  CalendarHeader.propTypes = {
    value: PropTypes.object,
    locale: PropTypes.object,
    yearSelectOffset: PropTypes.number,
    yearSelectTotal: PropTypes.number,
    onValueChange: PropTypes.func,
    onTypeChange: PropTypes.func,
    Select: PropTypes.func,
    prefixCls: PropTypes.string,
    type: PropTypes.string,
    showTypeSwitch: PropTypes.bool,
    headerComponents: PropTypes.array
  };
  CalendarHeader.defaultProps = {
    yearSelectOffset: 10,
    yearSelectTotal: 20,
    onValueChange: noop,
    onTypeChange: noop
  };
  
  export default CalendarHeader;