UNPKG

4.25 kBJavaScriptView Raw
1import _extends from 'babel-runtime/helpers/extends';
2import _classCallCheck from 'babel-runtime/helpers/classCallCheck';
3import _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';
4import _inherits from 'babel-runtime/helpers/inherits';
5import React from 'react';
6import PropTypes from 'prop-types';
7import KeyCode from 'rc-util/es/KeyCode';
8import CalendarHeader from './calendar/CalendarHeader';
9import CalendarFooter from './calendar/CalendarFooter';
10import { calendarMixinWrapper, calendarMixinPropTypes, calendarMixinDefaultProps } from './mixin/CalendarMixin';
11import { commonMixinWrapper, propType, defaultProp } from './mixin/CommonMixin';
12import moment from 'moment';
13
14var MonthCalendar = function (_React$Component) {
15 _inherits(MonthCalendar, _React$Component);
16
17 function MonthCalendar(props) {
18 _classCallCheck(this, MonthCalendar);
19
20 var _this = _possibleConstructorReturn(this, _React$Component.call(this, props));
21
22 _this.onKeyDown = function (event) {
23 var keyCode = event.keyCode;
24 var ctrlKey = event.ctrlKey || event.metaKey;
25 var stateValue = _this.state.value;
26 var disabledDate = _this.props.disabledDate;
27
28 var value = stateValue;
29 switch (keyCode) {
30 case KeyCode.DOWN:
31 value = stateValue.clone();
32 value.add(3, 'months');
33 break;
34 case KeyCode.UP:
35 value = stateValue.clone();
36 value.add(-3, 'months');
37 break;
38 case KeyCode.LEFT:
39 value = stateValue.clone();
40 if (ctrlKey) {
41 value.add(-1, 'years');
42 } else {
43 value.add(-1, 'months');
44 }
45 break;
46 case KeyCode.RIGHT:
47 value = stateValue.clone();
48 if (ctrlKey) {
49 value.add(1, 'years');
50 } else {
51 value.add(1, 'months');
52 }
53 break;
54 case KeyCode.ENTER:
55 if (!disabledDate || !disabledDate(stateValue)) {
56 _this.onSelect(stateValue);
57 }
58 event.preventDefault();
59 return 1;
60 default:
61 return undefined;
62 }
63 if (value !== stateValue) {
64 _this.setValue(value);
65 event.preventDefault();
66 return 1;
67 }
68 };
69
70 _this.handlePanelChange = function (_, mode) {
71 if (mode !== 'date') {
72 _this.setState({ mode: mode });
73 }
74 };
75
76 _this.state = {
77 mode: 'month',
78 value: props.value || props.defaultValue || moment(),
79 selectedValue: props.selectedValue || props.defaultSelectedValue
80 };
81 return _this;
82 }
83
84 MonthCalendar.prototype.render = function render() {
85 var props = this.props,
86 state = this.state;
87 var mode = state.mode,
88 value = state.value;
89
90 var children = React.createElement(
91 'div',
92 { className: props.prefixCls + '-month-calendar-content' },
93 React.createElement(
94 'div',
95 { className: props.prefixCls + '-month-header-wrap' },
96 React.createElement(CalendarHeader, {
97 prefixCls: props.prefixCls,
98 mode: mode,
99 value: value,
100 locale: props.locale,
101 disabledMonth: props.disabledDate,
102 monthCellRender: props.monthCellRender,
103 monthCellContentRender: props.monthCellContentRender,
104 onMonthSelect: this.onSelect,
105 onValueChange: this.setValue,
106 onPanelChange: this.handlePanelChange
107 })
108 ),
109 React.createElement(CalendarFooter, {
110 prefixCls: props.prefixCls,
111 renderFooter: props.renderFooter
112 })
113 );
114 return this.renderRoot({
115 className: props.prefixCls + '-month-calendar',
116 children: children
117 });
118 };
119
120 return MonthCalendar;
121}(React.Component);
122
123MonthCalendar.propTypes = _extends({}, calendarMixinPropTypes, propType, {
124 monthCellRender: PropTypes.func,
125 dateCellRender: PropTypes.func,
126 value: PropTypes.object,
127 defaultValue: PropTypes.object,
128 selectedValue: PropTypes.object,
129 defaultSelectedValue: PropTypes.object,
130 disabledDate: PropTypes.func
131});
132MonthCalendar.defaultProps = _extends({}, defaultProp, calendarMixinDefaultProps);
133
134
135export default calendarMixinWrapper(commonMixinWrapper(MonthCalendar));
\No newline at end of file