UNPKG

choerodon-ui

Version:

An enterprise-class UI design language and React-based implementation

271 lines (223 loc) 7.71 kB
import _extends from "@babel/runtime/helpers/extends"; import _slicedToArray from "@babel/runtime/helpers/slicedToArray"; import _classCallCheck from "@babel/runtime/helpers/classCallCheck"; import _createClass from "@babel/runtime/helpers/createClass"; import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized"; import _inherits from "@babel/runtime/helpers/inherits"; import _createSuper from "@babel/runtime/helpers/createSuper"; import React, { Component } from 'react'; import moment, { isMoment } from 'moment'; import noop from 'lodash/noop'; import LocaleReceiver from '../locale-provider/LocaleReceiver'; import Header from './Header'; import enUS from './locale/en_US'; import FullCalendar from '../rc-components/calendar/FullCalendar'; import ConfigContext from '../config-provider/ConfigContext'; function zerofixed(v) { if (v < 10) { return "0".concat(v); } return "".concat(v); } var Calendar = /*#__PURE__*/function (_Component) { _inherits(Calendar, _Component); var _super = _createSuper(Calendar); function Calendar(props) { var _this; _classCallCheck(this, Calendar); _this = _super.call(this, props); _this.monthCellRender = function (value) { var _this$props$monthCell = _this.props.monthCellRender, monthCellRender = _this$props$monthCell === void 0 ? noop : _this$props$monthCell; var prefixCls = _this.getPrefixCls(); return /*#__PURE__*/React.createElement("div", { className: "".concat(prefixCls, "-month") }, /*#__PURE__*/React.createElement("div", { className: "".concat(prefixCls, "-value") }, value.localeData().monthsShort(value)), /*#__PURE__*/React.createElement("div", { className: "".concat(prefixCls, "-content") }, monthCellRender(value))); }; _this.dateCellRender = function (value) { var _this$props$dateCellR = _this.props.dateCellRender, dateCellRender = _this$props$dateCellR === void 0 ? noop : _this$props$dateCellR; var prefixCls = _this.getPrefixCls(); return /*#__PURE__*/React.createElement("div", { className: "".concat(prefixCls, "-date") }, /*#__PURE__*/React.createElement("div", { className: "".concat(prefixCls, "-value") }, zerofixed(value.date())), /*#__PURE__*/React.createElement("div", { className: "".concat(prefixCls, "-content") }, dateCellRender(value))); }; _this.setValue = function (value, way) { if (!('value' in _this.props)) { _this.setState({ value: value }); } if (way === 'select') { var onSelect = _this.props.onSelect; if (onSelect) { onSelect(value); } } else if (way === 'changePanel') { var mode = _this.state.mode; _this.onPanelChange(value, mode); } }; _this.setType = function (type) { var mode = type === 'date' ? 'month' : 'year'; var _this$state = _this.state, stateMode = _this$state.mode, value = _this$state.value; if (stateMode !== mode) { _this.setState({ mode: mode }); _this.onPanelChange(value, mode); } }; _this.onHeaderValueChange = function (value) { _this.setValue(value, 'changePanel'); }; _this.onHeaderTypeChange = function (type) { _this.setType(type); }; _this.onSelect = function (value) { _this.setValue(value, 'select'); }; _this.getDateRange = function (validRange, disabledDate) { return function (current) { if (!current) { return false; } var _validRange = _slicedToArray(validRange, 2), startDate = _validRange[0], endDate = _validRange[1]; var inRange = !current.isBetween(startDate, endDate, 'days', '[]'); if (disabledDate) { return disabledDate(current) || inRange; } return inRange; }; }; _this.renderCalendar = function (locale, localeCode) { var _assertThisInitialize = _assertThisInitialized(_this), state = _assertThisInitialize.state, props = _assertThisInitialize.props; var value = state.value, mode = state.mode; if (value && localeCode) { value.locale(localeCode); } var style = props.style, className = props.className, fullscreen = props.fullscreen, dateFullCellRender = props.dateFullCellRender, monthFullCellRender = props.monthFullCellRender; var prefixCls = _this.getPrefixCls(); var type = mode === 'year' ? 'month' : 'date'; var cls = className || ''; if (fullscreen) { cls += " ".concat(prefixCls, "-fullscreen"); } var monthCellRender = monthFullCellRender || _this.monthCellRender; var dateCellRender = dateFullCellRender || _this.dateCellRender; var disabledDate = props.disabledDate; if (props.validRange) { disabledDate = _this.getDateRange(props.validRange, disabledDate); } return /*#__PURE__*/React.createElement("div", { className: cls, style: style }, /*#__PURE__*/React.createElement(Header, { fullscreen: fullscreen, type: type, value: value, locale: locale.lang, prefixCls: prefixCls, onTypeChange: _this.onHeaderTypeChange, onValueChange: _this.onHeaderValueChange, validRange: props.validRange, selectProps: props.selectProps, radioProps: props.radioProps }), /*#__PURE__*/React.createElement(FullCalendar, _extends({}, props, { disabledDate: disabledDate, Select: noop, locale: locale.lang, type: type, prefixCls: prefixCls, showHeader: false, value: value, monthCellRender: monthCellRender, dateCellRender: dateCellRender, onSelect: _this.onSelect }))); }; var value = props.value || props.defaultValue || moment(); if (!isMoment(value)) { throw new Error('The value/defaultValue of Calendar must be a moment object'); } _this.state = { value: value, mode: props.mode }; return _this; } _createClass(Calendar, [{ key: "componentWillReceiveProps", value: function componentWillReceiveProps(nextProps) { if ('value' in nextProps) { this.setState({ value: nextProps.value }); } var mode = this.props.mode; if ('mode' in nextProps && nextProps.mode !== mode) { this.setState({ mode: nextProps.mode }); } } }, { key: "getPrefixCls", value: function getPrefixCls() { var prefixCls = this.props.prefixCls; var getPrefixCls = this.context.getPrefixCls; return getPrefixCls('fullcalendar', prefixCls); } }, { key: "onPanelChange", value: function onPanelChange(value, mode) { var onPanelChange = this.props.onPanelChange; if (onPanelChange) { onPanelChange(value, mode); } } }, { key: "render", value: function render() { return /*#__PURE__*/React.createElement(LocaleReceiver, { componentName: "Calendar", defaultLocale: enUS }, this.renderCalendar); } }], [{ key: "contextType", get: function get() { return ConfigContext; } }]); return Calendar; }(Component); export { Calendar as default }; Calendar.displayName = 'Calendar'; Calendar.defaultProps = { locale: {}, fullscreen: true, mode: 'month', onSelect: noop, onPanelChange: noop }; //# sourceMappingURL=index.js.map