UNPKG

17.4 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports["default"] = void 0;
7
8var _react = _interopRequireWildcard(require("react"));
9
10var _propTypes = _interopRequireDefault(require("prop-types"));
11
12var _moment = _interopRequireDefault(require("moment"));
13
14var _classnames2 = _interopRequireDefault(require("classnames"));
15
16var _zhCn = _interopRequireDefault(require("../locale/zh-cn"));
17
18var _util = require("../util");
19
20var _cardHeader = _interopRequireDefault(require("./head/card-header"));
21
22var _datePanelHeader = _interopRequireDefault(require("./head/date-panel-header"));
23
24var _monthPanelHeader = _interopRequireDefault(require("./head/month-panel-header"));
25
26var _yearPanelHeader = _interopRequireDefault(require("./head/year-panel-header"));
27
28var _dateTable = _interopRequireDefault(require("./table/date-table"));
29
30var _monthTable = _interopRequireDefault(require("./table/month-table"));
31
32var _yearTable = _interopRequireDefault(require("./table/year-table"));
33
34var _utils = require("./utils");
35
36function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
37
38function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
39
40function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
41
42function _typeof(obj) { "@babel/helpers - typeof"; 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); }
43
44function _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); }
45
46function _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; }
47
48function _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; }
49
50function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
51
52function _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); } }
53
54function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
55
56function _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); }
57
58function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
59
60function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function () { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
61
62function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
63
64function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
65
66function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
67
68function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
69
70function _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; }
71
72/** Calendar */
73var Calendar = /*#__PURE__*/function (_Component) {
74 _inherits(Calendar, _Component);
75
76 var _super = _createSuper(Calendar);
77
78 function Calendar(props, context) {
79 var _this;
80
81 _classCallCheck(this, Calendar);
82
83 _this = _super.call(this, props, context);
84
85 _defineProperty(_assertThisInitialized(_this), "onSelectCell", function (date, nextMode) {
86 var shape = _this.props.shape;
87
88 _this.changeVisibleMonth(date, 'cellClick'); // 当用户所在的面板为初始化面板时,则选择动作为触发 onSelect 回调
89
90
91 if (_this.state.mode === _this.MODES[0]) {
92 _this.props.onSelect(date);
93 }
94
95 if (shape === 'panel') {
96 _this.changeMode(nextMode);
97 }
98 });
99
100 _defineProperty(_assertThisInitialized(_this), "changeMode", function (nextMode) {
101 if (nextMode && _this.MODES.indexOf(nextMode) > -1 && nextMode !== _this.state.mode) {
102 _this.setState({
103 mode: nextMode
104 });
105
106 _this.props.onModeChange(nextMode);
107 }
108 });
109
110 _defineProperty(_assertThisInitialized(_this), "changeVisibleMonth", function (date, reason) {
111 if (!(0, _utils.isSameYearMonth)(date, _this.state.visibleMonth)) {
112 _this.setState({
113 visibleMonth: date
114 });
115
116 _this.props.onVisibleMonthChange(date, reason);
117 }
118 });
119
120 _defineProperty(_assertThisInitialized(_this), "goPrevDecade", function () {
121 _this.changeVisibleMonthByOffset(-12, 'years');
122 });
123
124 _defineProperty(_assertThisInitialized(_this), "goNextDecade", function () {
125 _this.changeVisibleMonthByOffset(12, 'years');
126 });
127
128 _defineProperty(_assertThisInitialized(_this), "goPrevYear", function () {
129 _this.changeVisibleMonthByOffset(-1, 'years');
130 });
131
132 _defineProperty(_assertThisInitialized(_this), "goNextYear", function () {
133 _this.changeVisibleMonthByOffset(1, 'years');
134 });
135
136 _defineProperty(_assertThisInitialized(_this), "goPrevMonth", function () {
137 _this.changeVisibleMonthByOffset(-1, 'months');
138 });
139
140 _defineProperty(_assertThisInitialized(_this), "goNextMonth", function () {
141 _this.changeVisibleMonthByOffset(1, 'months');
142 });
143
144 var value = (0, _utils.formatDateValue)(props.value || props.defaultValue);
145 var visibleMonth = (0, _utils.getVisibleMonth)(props.defaultVisibleMonth, value);
146 _this.MODES = props.modes;
147 _this.today = (0, _moment["default"])();
148 _this.state = {
149 value: value,
150 mode: props.mode || _this.MODES[0],
151 visibleMonth: visibleMonth
152 };
153 return _this;
154 }
155
156 _createClass(Calendar, [{
157 key: "UNSAFE_componentWillReceiveProps",
158 value: function UNSAFE_componentWillReceiveProps(nextProps) {
159 if ('value' in nextProps && nextProps.value !== this.props.value) {
160 var value = (0, _utils.formatDateValue)(nextProps.value);
161 this.setState({
162 value: value
163 });
164
165 if (value) {
166 this.setState({
167 visibleMonth: value
168 });
169 }
170 }
171
172 if (nextProps.mode && this.MODES.indexOf(nextProps.mode) > -1) {
173 this.setState({
174 mode: nextProps.mode
175 });
176 }
177 }
178 }, {
179 key: "changeVisibleMonthByOffset",
180
181 /**
182 * 根据日期偏移量设置当前展示的月份
183 * @param {Number} offset 日期偏移的数量
184 * @param {String} type 日期偏移的类型 days, months, years
185 */
186 value: function changeVisibleMonthByOffset(offset, type) {
187 var cloneValue = this.state.visibleMonth.clone();
188 cloneValue.add(offset, type);
189 this.changeVisibleMonth(cloneValue, 'buttonClick');
190 }
191 }, {
192 key: "render",
193 value: function render() {
194 var _classnames, _tables, _panelHeaders;
195
196 var _this$props = this.props,
197 prefix = _this$props.prefix,
198 rtl = _this$props.rtl,
199 className = _this$props.className,
200 shape = _this$props.shape,
201 showOtherMonth = _this$props.showOtherMonth,
202 format = _this$props.format,
203 locale = _this$props.locale,
204 dateCellRender = _this$props.dateCellRender,
205 monthCellRender = _this$props.monthCellRender,
206 yearCellRender = _this$props.yearCellRender,
207 disabledDate = _this$props.disabledDate,
208 yearRange = _this$props.yearRange,
209 others = _objectWithoutProperties(_this$props, ["prefix", "rtl", "className", "shape", "showOtherMonth", "format", "locale", "dateCellRender", "monthCellRender", "yearCellRender", "disabledDate", "yearRange"]);
210
211 var state = this.state;
212 var classNames = (0, _classnames2["default"])((_classnames = {}, _defineProperty(_classnames, "".concat(prefix, "calendar"), true), _defineProperty(_classnames, "".concat(prefix, "calendar-").concat(shape), shape), _classnames), className);
213
214 if (rtl) {
215 others.dir = 'rtl';
216 }
217
218 var visibleMonth = state.visibleMonth; // reset moment locale
219
220 if (_zhCn["default"].momentLocale) {
221 state.value && state.value.locale(_zhCn["default"].momentLocale);
222 visibleMonth.locale(_zhCn["default"].momentLocale);
223 }
224
225 var localeData = (0, _utils.getLocaleData)(locale.format || {}, visibleMonth.localeData());
226 var headerProps = {
227 prefix: prefix,
228 lang: _zhCn["default"].momentLocale,
229 value: state.value,
230 mode: state.mode,
231 modes: this.MODES,
232 locale: locale,
233 rtl: rtl,
234 visibleMonth: visibleMonth,
235 momentLocale: localeData,
236 changeMode: this.changeMode,
237 changeVisibleMonth: this.changeVisibleMonth,
238 goNextDecade: this.goNextDecade,
239 goNextYear: this.goNextYear,
240 goNextMonth: this.goNextMonth,
241 goPrevDecade: this.goPrevDecade,
242 goPrevYear: this.goPrevYear,
243 goPrevMonth: this.goPrevMonth
244 };
245 var tableProps = {
246 prefix: prefix,
247 visibleMonth: visibleMonth,
248 showOtherMonth: showOtherMonth,
249 value: state.value,
250 mode: state.mode,
251 locale: locale,
252 dateCellRender: dateCellRender,
253 monthCellRender: monthCellRender,
254 yearCellRender: yearCellRender,
255 disabledDate: disabledDate,
256 momentLocale: localeData,
257 today: this.today,
258 goPrevDecade: this.goPrevDecade,
259 goNextDecade: this.goNextDecade
260 };
261 var tables = (_tables = {}, _defineProperty(_tables, _utils.CALENDAR_MODE_DATE, /*#__PURE__*/_react["default"].createElement(_dateTable["default"], _extends({
262 format: format
263 }, tableProps, {
264 onSelectDate: this.onSelectCell
265 }))), _defineProperty(_tables, _utils.CALENDAR_MODE_MONTH, /*#__PURE__*/_react["default"].createElement(_monthTable["default"], _extends({}, tableProps, {
266 onSelectMonth: this.onSelectCell
267 }))), _defineProperty(_tables, _utils.CALENDAR_MODE_YEAR, /*#__PURE__*/_react["default"].createElement(_yearTable["default"], _extends({}, tableProps, {
268 rtl: rtl,
269 onSelectYear: this.onSelectCell
270 }))), _tables);
271 var panelHeaders = (_panelHeaders = {}, _defineProperty(_panelHeaders, _utils.CALENDAR_MODE_DATE, /*#__PURE__*/_react["default"].createElement(_datePanelHeader["default"], headerProps)), _defineProperty(_panelHeaders, _utils.CALENDAR_MODE_MONTH, /*#__PURE__*/_react["default"].createElement(_monthPanelHeader["default"], headerProps)), _defineProperty(_panelHeaders, _utils.CALENDAR_MODE_YEAR, /*#__PURE__*/_react["default"].createElement(_yearPanelHeader["default"], headerProps)), _panelHeaders);
272 return /*#__PURE__*/_react["default"].createElement("div", _extends({}, _util.obj.pickOthers(Calendar.propTypes, others), {
273 className: classNames
274 }), shape === 'panel' ? panelHeaders[state.mode] : /*#__PURE__*/_react["default"].createElement(_cardHeader["default"], _extends({}, headerProps, {
275 yearRange: yearRange
276 })), tables[state.mode]);
277 }
278 }]);
279
280 return Calendar;
281}(_react.Component);
282
283_defineProperty(Calendar, "propTypes", {
284 prefix: _propTypes["default"].string,
285 rtl: _propTypes["default"].bool,
286
287 /**
288 * 默认选中的日期(moment 对象)
289 */
290 defaultValue: _utils.checkMomentObj,
291
292 /**
293 * 选中的日期值 (moment 对象)
294 */
295 value: _utils.checkMomentObj,
296
297 /**
298 * 面板模式
299 */
300 mode: _propTypes["default"].oneOf(_utils.CALENDAR_MODES),
301 // 生成 API 文档需要手动改回 ['date', 'month', 'year']
302 // 面板可变化的模式列表,仅初始化时接收一次
303 modes: _propTypes["default"].array,
304 // 日期值的格式(用于日期title显示的格式)
305 format: _propTypes["default"].string,
306
307 /**
308 * 是否展示非本月的日期
309 */
310 showOtherMonth: _propTypes["default"].bool,
311
312 /**
313 * 默认展示的月份
314 */
315 defaultVisibleMonth: _propTypes["default"].func,
316
317 /**
318 * 展现形态
319 */
320 shape: _propTypes["default"].oneOf(['card', 'fullscreen', 'panel']),
321
322 /**
323 * 选择日期单元格时的回调
324 * @param {Object} value 对应的日期值 (moment 对象)
325 */
326 onSelect: _propTypes["default"].func,
327
328 /**
329 * 面板模式变化时的回调
330 * @param {String} mode 对应面板模式 date month year
331 */
332 onModeChange: _propTypes["default"].func,
333
334 /**
335 * 展现的月份变化时的回调
336 * @param {Object} value 显示的月份 (moment 对象)
337 * @param {String} reason 触发月份改变原因
338 */
339 onVisibleMonthChange: _propTypes["default"].func,
340
341 /**
342 * 自定义样式类
343 */
344 className: _propTypes["default"].string,
345
346 /**
347 * 自定义日期渲染函数
348 * @param {Object} value 日期值(moment对象)
349 * @returns {ReactNode}
350 */
351 dateCellRender: _propTypes["default"].func,
352
353 /**
354 * 自定义月份渲染函数
355 * @param {Object} calendarDate 对应 Calendar 返回的自定义日期对象
356 * @returns {ReactNode}
357 */
358 monthCellRender: _propTypes["default"].func,
359 yearCellRender: _propTypes["default"].func,
360 // 兼容 0.x yearCellRender
361
362 /**
363 * 年份范围,[START_YEAR, END_YEAR] (只在shape 为 ‘card’, 'fullscreen' 下生效)
364 */
365 yearRange: _propTypes["default"].arrayOf(_propTypes["default"].number),
366
367 /**
368 * 不可选择的日期
369 * @param {Object} calendarDate 对应 Calendar 返回的自定义日期对象
370 * @param {String} view 当前视图类型,year: 年, month: 月, date: 日
371 * @returns {Boolean}
372 */
373 disabledDate: _propTypes["default"].func,
374
375 /**
376 * 国际化配置
377 */
378 locale: _propTypes["default"].object
379});
380
381_defineProperty(Calendar, "defaultProps", {
382 prefix: 'next-',
383 rtl: false,
384 shape: 'fullscreen',
385 modes: _utils.CALENDAR_MODES,
386 format: 'YYYY-MM-DD',
387 onSelect: _util.func.noop,
388 onVisibleMonthChange: _util.func.noop,
389 onModeChange: _util.func.noop,
390 dateCellRender: function dateCellRender(value) {
391 return value.date() < 10 ? "0".concat(value.date()) : value.date();
392 },
393 locale: _zhCn["default"].Calendar,
394 showOtherMonth: true
395});
396
397var _default = Calendar;
398exports["default"] = _default;
\No newline at end of file