1 | 'use strict';
|
2 |
|
3 | exports.__esModule = true;
|
4 |
|
5 | var _extends2 = require('babel-runtime/helpers/extends');
|
6 |
|
7 | var _extends3 = _interopRequireDefault(_extends2);
|
8 |
|
9 | var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
|
10 |
|
11 | var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
|
12 |
|
13 | var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
|
14 |
|
15 | var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
|
16 |
|
17 | var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
|
18 |
|
19 | var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
|
20 |
|
21 | var _inherits2 = require('babel-runtime/helpers/inherits');
|
22 |
|
23 | var _inherits3 = _interopRequireDefault(_inherits2);
|
24 |
|
25 | var _class, _temp;
|
26 |
|
27 | var _react = require('react');
|
28 |
|
29 | var _react2 = _interopRequireDefault(_react);
|
30 |
|
31 | var _propTypes = require('prop-types');
|
32 |
|
33 | var _propTypes2 = _interopRequireDefault(_propTypes);
|
34 |
|
35 | var _reactLifecyclesCompat = require('react-lifecycles-compat');
|
36 |
|
37 | var _classnames2 = require('classnames');
|
38 |
|
39 | var _classnames3 = _interopRequireDefault(_classnames2);
|
40 |
|
41 | var _moment = require('moment');
|
42 |
|
43 | var _moment2 = _interopRequireDefault(_moment);
|
44 |
|
45 | var _configProvider = require('../config-provider');
|
46 |
|
47 | var _configProvider2 = _interopRequireDefault(_configProvider);
|
48 |
|
49 | var _zhCn = require('../locale/zh-cn');
|
50 |
|
51 | var _zhCn2 = _interopRequireDefault(_zhCn);
|
52 |
|
53 | var _util = require('../util');
|
54 |
|
55 | var _rangePanelHeader = require('./head/range-panel-header');
|
56 |
|
57 | var _rangePanelHeader2 = _interopRequireDefault(_rangePanelHeader);
|
58 |
|
59 | var _monthPanelHeader = require('./head/month-panel-header');
|
60 |
|
61 | var _monthPanelHeader2 = _interopRequireDefault(_monthPanelHeader);
|
62 |
|
63 | var _yearPanelHeader = require('./head/year-panel-header');
|
64 |
|
65 | var _yearPanelHeader2 = _interopRequireDefault(_yearPanelHeader);
|
66 |
|
67 | var _dateTable = require('./table/date-table');
|
68 |
|
69 | var _dateTable2 = _interopRequireDefault(_dateTable);
|
70 |
|
71 | var _monthTable = require('./table/month-table');
|
72 |
|
73 | var _monthTable2 = _interopRequireDefault(_monthTable);
|
74 |
|
75 | var _yearTable = require('./table/year-table');
|
76 |
|
77 | var _yearTable2 = _interopRequireDefault(_yearTable);
|
78 |
|
79 | var _utils = require('./utils');
|
80 |
|
81 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
82 |
|
83 | var RangeCalendar = (_temp = _class = function (_React$Component) {
|
84 | (0, _inherits3.default)(RangeCalendar, _React$Component);
|
85 |
|
86 | function RangeCalendar(props, context) {
|
87 | (0, _classCallCheck3.default)(this, RangeCalendar);
|
88 |
|
89 | var _this = (0, _possibleConstructorReturn3.default)(this, _React$Component.call(this, props, context));
|
90 |
|
91 | _this.onSelectCell = function (date, nextMode) {
|
92 | if (_this.state.mode === _utils.CALENDAR_MODE_DATE) {
|
93 | _this.props.onSelect(date);
|
94 | } else {
|
95 | _this.changeVisibleMonth(date, 'cellClick');
|
96 | }
|
97 |
|
98 | _this.changeMode(nextMode);
|
99 | };
|
100 |
|
101 | _this.changeMode = function (mode, activePanel) {
|
102 | var _this$state = _this.state,
|
103 | lastMode = _this$state.lastMode,
|
104 | lastPanelType = _this$state.lastPanelType;
|
105 |
|
106 |
|
107 | var state = {
|
108 | lastMode: mode,
|
109 |
|
110 | lastPanelType: lastMode === 'year' ? lastPanelType : activePanel
|
111 | };
|
112 | if (typeof mode === 'string' && mode !== _this.state.mode) {
|
113 | state.mode = mode;
|
114 | }
|
115 | if (activePanel && activePanel !== _this.state.activePanel) {
|
116 | state.activePanel = activePanel;
|
117 | }
|
118 |
|
119 | _this.setState(state);
|
120 | };
|
121 |
|
122 | _this.changeVisibleMonth = function (date, reason) {
|
123 | var lastPanelType = _this.state.lastPanelType;
|
124 |
|
125 | if (!(0, _utils.isSameYearMonth)(date, _this.state.startVisibleMonth)) {
|
126 | var startVisibleMonth = lastPanelType === 'end' ? date.clone().add(-1, 'month') : date;
|
127 | _this.setState({ startVisibleMonth: startVisibleMonth });
|
128 | _this.props.onVisibleMonthChange(startVisibleMonth, reason);
|
129 | }
|
130 | };
|
131 |
|
132 | _this.changeVisibleMonthByOffset = function (offset, type) {
|
133 | var offsetDate = _this.state.startVisibleMonth.clone().add(offset, type);
|
134 | _this.changeVisibleMonth(offsetDate, 'buttonClick');
|
135 | };
|
136 |
|
137 | _this.goPrevDecade = function () {
|
138 | _this.changeVisibleMonthByOffset(-10, 'years');
|
139 | };
|
140 |
|
141 | _this.goNextDecade = function () {
|
142 | _this.changeVisibleMonthByOffset(10, 'years');
|
143 | };
|
144 |
|
145 | _this.goPrevYear = function () {
|
146 | _this.changeVisibleMonthByOffset(-1, 'years');
|
147 | };
|
148 |
|
149 | _this.goNextYear = function () {
|
150 | _this.changeVisibleMonthByOffset(1, 'years');
|
151 | };
|
152 |
|
153 | _this.goPrevMonth = function () {
|
154 | _this.changeVisibleMonthByOffset(-1, 'months');
|
155 | };
|
156 |
|
157 | _this.goNextMonth = function () {
|
158 | _this.changeVisibleMonthByOffset(1, 'months');
|
159 | };
|
160 |
|
161 | var startValue = (0, _utils.formatDateValue)(props.startValue || props.defaultStartValue);
|
162 | var endValue = (0, _utils.formatDateValue)(props.endValue || props.defaultEndValue);
|
163 | var visibleMonth = (0, _utils.getVisibleMonth)(props.defaultVisibleMonth, startValue);
|
164 |
|
165 | _this.state = {
|
166 | startValue: startValue,
|
167 | endValue: endValue,
|
168 | mode: props.mode,
|
169 | prevMode: props.mode,
|
170 | startVisibleMonth: visibleMonth,
|
171 | activePanel: undefined,
|
172 | lastMode: undefined,
|
173 | lastPanelType: 'start'
|
174 | };
|
175 | _this.today = (0, _moment2.default)();
|
176 | return _this;
|
177 | }
|
178 |
|
179 | RangeCalendar.getDerivedStateFromProps = function getDerivedStateFromProps(props, state) {
|
180 | var st = {};
|
181 | if ('startValue' in props) {
|
182 | var startValue = (0, _utils.formatDateValue)(props.startValue);
|
183 | st.startValue = startValue;
|
184 | if (startValue && !startValue.isSame(state.startValue, 'day')) {
|
185 | st.startVisibleMonth = startValue;
|
186 | }
|
187 | }
|
188 |
|
189 | if ('endValue' in props) {
|
190 | st.endValue = (0, _utils.formatDateValue)(props.endValue);
|
191 | }
|
192 |
|
193 | if ('mode' in props && state.prevMode !== props.mode) {
|
194 | st.prevMode = props.mode;
|
195 | st.mode = props.mode;
|
196 | }
|
197 |
|
198 | return st;
|
199 | };
|
200 |
|
201 | |
202 |
|
203 |
|
204 |
|
205 |
|
206 |
|
207 |
|
208 | RangeCalendar.prototype.render = function render() {
|
209 | var _classnames;
|
210 |
|
211 | var _props = this.props,
|
212 | prefix = _props.prefix,
|
213 | rtl = _props.rtl,
|
214 | dateCellRender = _props.dateCellRender,
|
215 | monthCellRender = _props.monthCellRender,
|
216 | yearCellRender = _props.yearCellRender,
|
217 | className = _props.className,
|
218 | format = _props.format,
|
219 | locale = _props.locale,
|
220 | showOtherMonth = _props.showOtherMonth,
|
221 | disabledDate = _props.disabledDate,
|
222 | disableChangeMode = _props.disableChangeMode,
|
223 | yearRange = _props.yearRange,
|
224 | others = (0, _objectWithoutProperties3.default)(_props, ['prefix', 'rtl', 'dateCellRender', 'monthCellRender', 'yearCellRender', 'className', 'format', 'locale', 'showOtherMonth', 'disabledDate', 'disableChangeMode', 'yearRange']);
|
225 | var _state = this.state,
|
226 | startValue = _state.startValue,
|
227 | endValue = _state.endValue,
|
228 | mode = _state.mode,
|
229 | startVisibleMonth = _state.startVisibleMonth,
|
230 | activePanel = _state.activePanel;
|
231 |
|
232 |
|
233 |
|
234 | if (locale.momentLocale) {
|
235 | startValue && startValue.locale(locale.momentLocale);
|
236 | endValue && endValue.locale(locale.momentLocale);
|
237 | startVisibleMonth.locale(locale.momentLocale);
|
238 | }
|
239 |
|
240 | if (rtl) {
|
241 | others.dir = 'rtl';
|
242 | }
|
243 | var localeData = (0, _utils.getLocaleData)(locale.format || {}, startVisibleMonth.localeData());
|
244 |
|
245 | var endVisibleMonth = startVisibleMonth.clone().add(1, 'months');
|
246 |
|
247 | var headerProps = {
|
248 | prefix: prefix,
|
249 | rtl: rtl,
|
250 | mode: mode,
|
251 | locale: locale,
|
252 | momentLocale: localeData,
|
253 | startVisibleMonth: startVisibleMonth,
|
254 | endVisibleMonth: endVisibleMonth,
|
255 | changeVisibleMonth: this.changeVisibleMonth,
|
256 | changeMode: this.changeMode,
|
257 | yearRange: yearRange,
|
258 | disableChangeMode: disableChangeMode
|
259 | };
|
260 |
|
261 | var tableProps = {
|
262 | prefix: prefix,
|
263 | value: startValue,
|
264 | startValue: startValue,
|
265 | endValue: endValue,
|
266 | mode: mode,
|
267 | locale: locale,
|
268 | momentLocale: localeData,
|
269 | showOtherMonth: showOtherMonth,
|
270 | today: this.today,
|
271 | disabledDate: disabledDate,
|
272 | dateCellRender: dateCellRender,
|
273 | monthCellRender: monthCellRender,
|
274 | yearCellRender: yearCellRender,
|
275 | changeMode: this.changeMode,
|
276 | changeVisibleMonth: this.changeVisibleMonth
|
277 | };
|
278 |
|
279 | var visibleMonths = {
|
280 | start: startVisibleMonth,
|
281 | end: endVisibleMonth
|
282 | };
|
283 |
|
284 | var visibleMonth = visibleMonths[activePanel];
|
285 |
|
286 | var header = void 0;
|
287 | var table = void 0;
|
288 |
|
289 | switch (mode) {
|
290 | case _utils.CALENDAR_MODE_DATE:
|
291 | {
|
292 | table = [_react2.default.createElement(
|
293 | 'div',
|
294 | { className: prefix + 'calendar-body-left', key: 'left-panel' },
|
295 | _react2.default.createElement(_dateTable2.default, (0, _extends3.default)({
|
296 | format: format
|
297 | }, tableProps, {
|
298 | visibleMonth: startVisibleMonth,
|
299 | onSelectDate: this.onSelectCell
|
300 | }))
|
301 | ), _react2.default.createElement(
|
302 | 'div',
|
303 | { className: prefix + 'calendar-body-right', key: 'right-panel' },
|
304 | _react2.default.createElement(_dateTable2.default, (0, _extends3.default)({
|
305 | format: format
|
306 | }, tableProps, {
|
307 | visibleMonth: endVisibleMonth,
|
308 | onSelectDate: this.onSelectCell
|
309 | }))
|
310 | )];
|
311 | header = _react2.default.createElement(_rangePanelHeader2.default, (0, _extends3.default)({}, headerProps, {
|
312 | goPrevYear: this.goPrevYear,
|
313 | goPrevMonth: this.goPrevMonth,
|
314 | goNextYear: this.goNextYear,
|
315 | goNextMonth: this.goNextMonth
|
316 | }));
|
317 | break;
|
318 | }
|
319 | case _utils.CALENDAR_MODE_MONTH:
|
320 | {
|
321 | table = _react2.default.createElement(_monthTable2.default, (0, _extends3.default)({}, tableProps, { visibleMonth: visibleMonth, onSelectMonth: this.onSelectCell }));
|
322 | header = _react2.default.createElement(_monthPanelHeader2.default, (0, _extends3.default)({}, headerProps, {
|
323 | visibleMonth: visibleMonth,
|
324 | goPrevYear: this.goPrevYear,
|
325 | goNextYear: this.goNextYear
|
326 | }));
|
327 | break;
|
328 | }
|
329 | case _utils.CALENDAR_MODE_YEAR:
|
330 | {
|
331 | table = _react2.default.createElement(_yearTable2.default, (0, _extends3.default)({}, tableProps, {
|
332 | rtl: rtl,
|
333 | visibleMonth: visibleMonth,
|
334 | onSelectYear: this.onSelectCell,
|
335 | goPrevDecade: this.goPrevDecade,
|
336 | goNextDecade: this.goNextDecade
|
337 | }));
|
338 | header = _react2.default.createElement(_yearPanelHeader2.default, (0, _extends3.default)({}, headerProps, {
|
339 | visibleMonth: visibleMonth,
|
340 | goPrevDecade: this.goPrevDecade,
|
341 | goNextDecade: this.goNextDecade
|
342 | }));
|
343 | break;
|
344 | }
|
345 | }
|
346 |
|
347 | var classNames = (0, _classnames3.default)((_classnames = {}, _classnames[prefix + 'calendar'] = true, _classnames[prefix + 'calendar-range'] = true, _classnames), className);
|
348 |
|
349 | return _react2.default.createElement(
|
350 | 'div',
|
351 | (0, _extends3.default)({}, _util.obj.pickOthers(RangeCalendar.propTypes, others), { className: classNames }),
|
352 | header,
|
353 | _react2.default.createElement(
|
354 | 'div',
|
355 | { className: prefix + 'calendar-body' },
|
356 | table
|
357 | )
|
358 | );
|
359 | };
|
360 |
|
361 | return RangeCalendar;
|
362 | }(_react2.default.Component), _class.propTypes = (0, _extends3.default)({}, _configProvider2.default.propTypes, {
|
363 | |
364 |
|
365 |
|
366 | prefix: _propTypes2.default.string,
|
367 | rtl: _propTypes2.default.bool,
|
368 | |
369 |
|
370 |
|
371 | defaultStartValue: _utils.checkMomentObj,
|
372 | |
373 |
|
374 |
|
375 | defaultEndValue: _utils.checkMomentObj,
|
376 | |
377 |
|
378 |
|
379 | startValue: _utils.checkMomentObj,
|
380 | |
381 |
|
382 |
|
383 | endValue: _utils.checkMomentObj,
|
384 |
|
385 | mode: _propTypes2.default.oneOf(_utils.CALENDAR_MODES),
|
386 |
|
387 | disableChangeMode: _propTypes2.default.bool,
|
388 |
|
389 | format: _propTypes2.default.string,
|
390 | yearRange: _propTypes2.default.arrayOf(_propTypes2.default.number),
|
391 | |
392 |
|
393 |
|
394 | showOtherMonth: _propTypes2.default.bool,
|
395 | |
396 |
|
397 |
|
398 | defaultVisibleMonth: _propTypes2.default.func,
|
399 | |
400 |
|
401 |
|
402 |
|
403 |
|
404 | onVisibleMonthChange: _propTypes2.default.func,
|
405 | |
406 |
|
407 |
|
408 |
|
409 |
|
410 |
|
411 | disabledDate: _propTypes2.default.func,
|
412 | |
413 |
|
414 |
|
415 |
|
416 | onSelect: _propTypes2.default.func,
|
417 | |
418 |
|
419 |
|
420 | dateCellRender: _propTypes2.default.func,
|
421 | |
422 |
|
423 |
|
424 |
|
425 |
|
426 | monthCellRender: _propTypes2.default.func,
|
427 | yearCellRender: _propTypes2.default.func,
|
428 | locale: _propTypes2.default.object,
|
429 | className: _propTypes2.default.string
|
430 | }), _class.defaultProps = {
|
431 | prefix: 'next-',
|
432 | rtl: false,
|
433 | mode: _utils.CALENDAR_MODE_DATE,
|
434 | disableChangeMode: false,
|
435 | format: 'YYYY-MM-DD',
|
436 | dateCellRender: function dateCellRender(value) {
|
437 | return value.date();
|
438 | },
|
439 | onSelect: _util.func.noop,
|
440 | onVisibleMonthChange: _util.func.noop,
|
441 | locale: _zhCn2.default.Calendar,
|
442 | showOtherMonth: false
|
443 | }, _temp);
|
444 | RangeCalendar.displayName = 'RangeCalendar';
|
445 | exports.default = _configProvider2.default.config((0, _reactLifecyclesCompat.polyfill)(RangeCalendar), {
|
446 | componentName: 'Calendar'
|
447 | });
|
448 | module.exports = exports['default']; |
\ | No newline at end of file |