choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
271 lines (223 loc) • 7.71 kB
JavaScript
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