text: import _extends from 'babel-runtime/helpers/extends';
  import React from 'react';
  import createReactClass from 'create-react-class';
  import PropTypes from 'prop-types';
  import DateTable from './date/DateTable';
  import MonthTable from './month/MonthTable';
  import CalendarMixin from './mixin/CalendarMixin';
  import CommonMixin from './mixin/CommonMixin';
  import CalendarHeader from './full-calendar/CalendarHeader';
  
  var FullCalendar = createReactClass({
    displayName: 'FullCalendar',
  
    propTypes: {
      defaultType: PropTypes.string,
      type: PropTypes.string,
      prefixCls: PropTypes.string,
      locale: PropTypes.object,
      onTypeChange: PropTypes.func,
      fullscreen: PropTypes.bool,
      monthCellRender: PropTypes.func,
      dateCellRender: PropTypes.func,
      showTypeSwitch: PropTypes.bool,
      Select: PropTypes.func.isRequired,
      headerComponents: PropTypes.array,
      headerComponent: PropTypes.object, // The whole header component
      headerRender: PropTypes.func,
      showHeader: PropTypes.bool,
      disabledDate: PropTypes.func
    },
    mixins: [CommonMixin, CalendarMixin],
    getDefaultProps: function getDefaultProps() {
      return {
        defaultType: 'date',
        fullscreen: false,
        showTypeSwitch: true,
        showHeader: true,
        onTypeChange: function onTypeChange() {}
      };
    },
    getInitialState: function getInitialState() {
      var type = void 0;
      if ('type' in this.props) {
        type = this.props.type;
      } else {
        type = this.props.defaultType;
      }
      return {
        type: type
      };
    },
    componentWillReceiveProps: function componentWillReceiveProps(nextProps) {
      if ('type' in nextProps) {
        this.setState({
          type: nextProps.type
        });
      }
    },
    onMonthSelect: function onMonthSelect(value) {
      this.onSelect(value, {
        target: 'month'
      });
    },
    setType: function setType(type) {
      if (!('type' in this.props)) {
        this.setState({
          type: type
        });
      }
      this.props.onTypeChange(type);
    },
    render: function render() {
      var props = this.props;
      var locale = props.locale,
          prefixCls = props.prefixCls,
          fullscreen = props.fullscreen,
          showHeader = props.showHeader,
          headerComponent = props.headerComponent,
          headerRender = props.headerRender,
          disabledDate = props.disabledDate;
      var _state = this.state,
          value = _state.value,
          type = _state.type;
  
  
      var header = null;
      if (showHeader) {
        if (headerRender) {
          header = headerRender(value, type, locale);
        } else {
          var TheHeader = headerComponent || CalendarHeader;
          header = React.createElement(TheHeader, _extends({
            key: 'calendar-header'
          }, props, {
            prefixCls: prefixCls + '-full',
            type: type,
            value: value,
            onTypeChange: this.setType,
            onValueChange: this.setValue
          }));
        }
      }
  
      var table = type === 'date' ? React.createElement(DateTable, {
        dateRender: props.dateCellRender,
        contentRender: props.dateCellContentRender,
        locale: locale,
        prefixCls: prefixCls,
        onSelect: this.onSelect,
        value: value,
        disabledDate: disabledDate
      }) : React.createElement(MonthTable, {
        cellRender: props.monthCellRender,
        contentRender: props.monthCellContentRender,
        locale: locale,
        onSelect: this.onMonthSelect,
        prefixCls: prefixCls + '-month-panel',
        value: value,
        disabledDate: disabledDate
      });
  
      var children = [header, React.createElement(
        'div',
        { key: 'calendar-body', className: prefixCls + '-calendar-body' },
        table
      )];
  
      var className = [prefixCls + '-full'];
  
      if (fullscreen) {
        className.push(prefixCls + '-fullscreen');
      }
  
      return this.renderRoot({
        children: children,
        className: className.join(' ')
      });
    }
  });
  
  export default FullCalendar;