choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
1,374 lines (1,169 loc) • 46.9 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _get3 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _tslib = require("tslib");
var _react = _interopRequireWildcard(require("react"));
var _moment = _interopRequireWildcard(require("moment"));
var _classnames = _interopRequireDefault(require("classnames"));
var _raf = _interopRequireDefault(require("raf"));
var _defaultTo = _interopRequireDefault(require("lodash/defaultTo"));
var _isPlainObject = _interopRequireDefault(require("lodash/isPlainObject"));
var _isString = _interopRequireDefault(require("lodash/isString"));
var _isNil = _interopRequireDefault(require("lodash/isNil"));
var _noop = _interopRequireDefault(require("lodash/noop"));
var _mobxReact = require("mobx-react");
var _mobx = require("mobx");
var _KeyCode = _interopRequireDefault(require("../../../lib/_util/KeyCode"));
var _warning = _interopRequireDefault(require("../../../lib/_util/warning"));
var _TriggerField2 = _interopRequireDefault(require("../trigger-field/TriggerField"));
var _DaysView = _interopRequireDefault(require("./DaysView"));
var _DateTimesView = _interopRequireDefault(require("./DateTimesView"));
var _WeeksView = _interopRequireDefault(require("./WeeksView"));
var _TimesView = _interopRequireDefault(require("./TimesView"));
var _MonthsView = _interopRequireDefault(require("./MonthsView"));
var _YearsView = _interopRequireDefault(require("./YearsView"));
var _DecadeYearsView = _interopRequireDefault(require("./DecadeYearsView"));
var _autobind = _interopRequireDefault(require("../_util/autobind"));
var _enum = require("./enum");
var _EventManager = require("../_util/EventManager");
var _localeContext = require("../locale-context");
var _isSame = _interopRequireDefault(require("../_util/isSame"));
var _measureTextWidth = _interopRequireDefault(require("../_util/measureTextWidth"));
var _TextField = _interopRequireDefault(require("../text-field/TextField"));
var _viewComponents;
var viewComponents = (_viewComponents = {}, (0, _defineProperty2["default"])(_viewComponents, _enum.ViewMode.decade, _DecadeYearsView["default"]), (0, _defineProperty2["default"])(_viewComponents, _enum.ViewMode.year, _YearsView["default"]), (0, _defineProperty2["default"])(_viewComponents, _enum.ViewMode.month, _MonthsView["default"]), (0, _defineProperty2["default"])(_viewComponents, _enum.ViewMode.date, _DaysView["default"]), (0, _defineProperty2["default"])(_viewComponents, _enum.ViewMode.dateTime, _DateTimesView["default"]), (0, _defineProperty2["default"])(_viewComponents, _enum.ViewMode.week, _WeeksView["default"]), (0, _defineProperty2["default"])(_viewComponents, _enum.ViewMode.time, _TimesView["default"]), _viewComponents);
function createDefaultTime() {
return (0, _moment["default"])('00:00:00', 'HH:mm:ss');
}
function getInRangeDefaultTime() {
var defaultTime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : createDefaultTime();
var min = arguments.length > 1 ? arguments[1] : undefined;
var max = arguments.length > 2 ? arguments[2] : undefined;
var viewMode = arguments.length > 3 ? arguments[3] : undefined;
if (min && defaultTime.isBefore(min)) {
defaultTime.year(min.year());
defaultTime.month(min.month());
defaultTime.date(min.date());
if (defaultTime.isBefore(min) && viewMode !== _enum.ViewMode.time) {
defaultTime.add(1, 'd');
}
}
if (max && defaultTime.isAfter(max)) {
defaultTime.year(max.year());
defaultTime.month(max.month());
defaultTime.date(max.date());
if (defaultTime.isAfter(max) && viewMode !== _enum.ViewMode.time) {
defaultTime.subtract(1, 'd');
}
}
return defaultTime;
}
var DatePicker = /*#__PURE__*/function (_TriggerField) {
(0, _inherits2["default"])(DatePicker, _TriggerField);
var _super = (0, _createSuper2["default"])(DatePicker);
function DatePicker() {
var _this;
(0, _classCallCheck2["default"])(this, DatePicker);
_this = _super.apply(this, arguments);
_this.handleDateMouseEnter = function (currentDate) {
_this.hoverValue = currentDate;
};
_this.handleDateMouseLeave = function () {
_this.hoverValue = undefined;
};
return _this;
}
(0, _createClass2["default"])(DatePicker, [{
key: "componentWillUnmount",
value: function componentWillUnmount() {
if (this.timeID) {
clearTimeout(this.timeID);
delete this.timeID;
}
}
}, {
key: "value",
get: function get() {
var _this2 = this;
var value = this.observableProps.value;
var range = this.range;
if ((0, _mobx.isArrayLike)(value)) {
return value.map(function (item) {
if ((0, _mobx.isArrayLike)(item)) {
return item.map(_this2.checkMoment, _this2);
}
return _this2.checkMoment(item);
});
}
if ((0, _mobx.isArrayLike)(range)) {
if ((0, _isPlainObject["default"])(value)) {
var _ref;
var _range = (0, _slicedToArray2["default"])(range, 2),
start = _range[0],
end = _range[1];
return _ref = {}, (0, _defineProperty2["default"])(_ref, start, this.checkMoment(value[start])), (0, _defineProperty2["default"])(_ref, end, this.checkMoment(value[end])), _ref;
}
}
return this.checkMoment(value);
},
set: function set(value) {
var _this3 = this;
(0, _mobx.runInAction)(function () {
_this3.observableProps.value = value;
});
}
}, {
key: "defaultValidationMessages",
get: function get() {
var label = this.getProp('label');
return {
valueMissing: (0, _localeContext.$l)('DatePicker', label ? 'value_missing' : 'value_missing_no_label', {
label: label
})
};
}
}, {
key: "min",
get: function get() {
return this.getLimit('min');
}
}, {
key: "max",
get: function get() {
return this.getLimit('max');
}
}, {
key: "savePopupInputEditor",
value: function savePopupInputEditor(node) {
this.popupInputEditor = node;
if (node && this.popup) {
(0, _raf["default"])(function () {
node.focus();
});
}
}
}, {
key: "isEditable",
value: function isEditable() {
return (0, _get3["default"])((0, _getPrototypeOf2["default"])(DatePicker.prototype), "isEditable", this).call(this) && !this.isEditableLike() && this.getViewMode() !== _enum.ViewMode.week;
}
}, {
key: "isEditableLike",
value: function isEditableLike() {
return this.popup && this.observableProps.editorInPopup;
}
}, {
key: "getOmitPropsKeys",
value: function getOmitPropsKeys() {
return (0, _get3["default"])((0, _getPrototypeOf2["default"])(DatePicker.prototype), "getOmitPropsKeys", this).call(this).concat(['mode', 'filter', 'cellRenderer', 'maxLength', 'minLength', 'timeZone', 'editorInPopup', 'defaultTime', 'useInvalidDate']);
}
}, {
key: "getOtherProps",
value: function getOtherProps() {
var otherProps = (0, _get3["default"])((0, _getPrototypeOf2["default"])(DatePicker.prototype), "getOtherProps", this).call(this);
delete otherProps.maxLength;
return otherProps;
}
}, {
key: "getObservableProps",
value: function getObservableProps(props, context) {
return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, (0, _get3["default"])((0, _getPrototypeOf2["default"])(DatePicker.prototype), "getObservableProps", this).call(this, props, context)), {}, {
editorInPopup: props.editorInPopup
});
}
}, {
key: "defaultRenderer",
value: function defaultRenderer(props) {
var renderedText = (0, _get3["default"])((0, _getPrototypeOf2["default"])(DatePicker.prototype), "defaultRenderer", this).call(this, props);
var mode = this.getDefaultViewMode();
var value = props.value;
if (value && [_enum.ViewMode.time, _enum.ViewMode.dateTime].includes(mode)) {
var _this$props$timeZone = this.props.timeZone,
timeZone = _this$props$timeZone === void 0 ? this.getContextConfig('formatter').timeZone : _this$props$timeZone;
if (timeZone) {
var renderedTimeZone = typeof timeZone === 'function' ? timeZone(value) : value.format(timeZone);
if ((0, _isString["default"])(renderedTimeZone)) {
return "".concat(renderedText).concat(renderedTimeZone);
}
return [renderedText, renderedTimeZone];
}
}
return renderedText;
}
}, {
key: "getDefaultTime",
value: function getDefaultTime() {
var _this$props$defaultTi = this.props.defaultTime,
defaultTime = _this$props$defaultTi === void 0 ? createDefaultTime() : _this$props$defaultTi;
var viewMode = this.getDefaultViewMode();
var min = this.min,
max = this.max;
if ((0, _mobx.isArrayLike)(defaultTime)) {
return [getInRangeDefaultTime(defaultTime[0], min, max, viewMode), getInRangeDefaultTime(defaultTime[1], min, max, viewMode)];
}
var inRangeDefaultTime = getInRangeDefaultTime(defaultTime, min, max, viewMode);
return [inRangeDefaultTime, inRangeDefaultTime];
}
}, {
key: "getDefaultViewMode",
value: function getDefaultViewMode() {
var mode = this.getProp('mode', 'dateMode');
if (mode === _enum.ViewMode.decade || mode === undefined) {
return _enum.ViewMode.date;
}
return mode;
}
}, {
key: "getPopupClassName",
value: function getPopupClassName(defaultClassName) {
var viewMode = this.getViewMode();
return (0, _classnames["default"])((0, _get3["default"])((0, _getPrototypeOf2["default"])(DatePicker.prototype), "getPopupClassName", this).call(this, defaultClassName), (0, _defineProperty2["default"])({}, "".concat(this.prefixCls, "-popup-").concat(String(viewMode).toLowerCase()), viewMode));
}
}, {
key: "handlePopupRangeEditorBlur",
value: function handlePopupRangeEditorBlur() {
var text = this.text;
if (text) {
this.syncValueOnBlur(text);
}
}
}, {
key: "getDefaultAction",
value: function getDefaultAction() {
return this.getContextConfig('selectTrigger') || (0, _get3["default"])((0, _getPrototypeOf2["default"])(DatePicker.prototype), "getDefaultAction", this).call(this);
}
}, {
key: "getPopupEditor",
value: function getPopupEditor() {
var editorInPopup = this.observableProps.editorInPopup;
if (editorInPopup) {
var _classNames2;
var prefixCls = this.prefixCls,
range = this.range,
text = this.text,
rangeTarget = this.rangeTarget,
multiple = this.multiple;
var popupHoverValue = this.getHoverValue(true);
var className = (0, _classnames["default"])("".concat(prefixCls, "-popup-editor"), (_classNames2 = {}, (0, _defineProperty2["default"])(_classNames2, "".concat(prefixCls, "-popup-hover-value"), !(0, _isNil["default"])(popupHoverValue) && !range), (0, _defineProperty2["default"])(_classNames2, "".concat(prefixCls, "-popup-hover-value-start"), !(0, _isNil["default"])(popupHoverValue) && range && rangeTarget === 0), (0, _defineProperty2["default"])(_classNames2, "".concat(prefixCls, "-popup-hover-value-end"), !(0, _isNil["default"])(popupHoverValue) && range && rangeTarget === 1), _classNames2));
var _this$getPlaceholders = this.getPlaceholders(),
_this$getPlaceholders2 = (0, _slicedToArray2["default"])(_this$getPlaceholders, 2),
startPlaceholder = _this$getPlaceholders2[0],
_this$getPlaceholders3 = _this$getPlaceholders2[1],
endPlaceHolder = _this$getPlaceholders3 === void 0 ? startPlaceholder : _this$getPlaceholders3;
if (range) {
var _this$processRangeVal = this.processRangeValue(this.rangeValue),
_this$processRangeVal2 = (0, _slicedToArray2["default"])(_this$processRangeVal, 2),
_this$processRangeVal3 = _this$processRangeVal2[0],
startValue = _this$processRangeVal3 === void 0 ? '' : _this$processRangeVal3,
_this$processRangeVal4 = _this$processRangeVal2[1],
endValue = _this$processRangeVal4 === void 0 ? '' : _this$processRangeVal4;
var startText = this.getText(startValue);
var endText = this.getText(endValue);
var splitClassNames = (0, _classnames["default"])("".concat(prefixCls, "-range-split"), (0, _defineProperty2["default"])({}, "".concat(prefixCls, "-range-split-custom"), this.rangeSeparator !== '~'));
return /*#__PURE__*/_react["default"].createElement("span", {
key: "popup-editor",
className: (0, _classnames["default"])(className, "".concat(prefixCls, "-range-text"))
}, /*#__PURE__*/_react["default"].createElement("input", {
className: "".concat(prefixCls, "-range-start"),
onChange: this.handleChange,
onFocus: this.handleRangeStart,
onBlur: this.handlePopupRangeEditorBlur,
value: rangeTarget === 0 ? (0, _defaultTo["default"])((0, _defaultTo["default"])(popupHoverValue, text), startText) : startText,
placeholder: startPlaceholder,
ref: rangeTarget === 0 ? this.savePopupInputEditor : undefined,
onKeyDown: this.handlePopupEditorKeyDown
}), /*#__PURE__*/_react["default"].createElement("span", {
className: splitClassNames
}, this.rangeSeparator), /*#__PURE__*/_react["default"].createElement("input", {
className: "".concat(prefixCls, "-range-end"),
onChange: this.handleChange,
onFocus: this.handleRangeEnd,
onBlur: this.handlePopupRangeEditorBlur,
value: rangeTarget === 1 ? (0, _defaultTo["default"])((0, _defaultTo["default"])(popupHoverValue, text), endText) : endText,
placeholder: endPlaceHolder,
ref: rangeTarget === 1 ? this.savePopupInputEditor : undefined,
onKeyDown: this.handlePopupEditorKeyDown
}));
}
var value = (0, _isNil["default"])(popupHoverValue) ? multiple ? (0, _defaultTo["default"])(text, '') : this.getTextNode() : popupHoverValue;
return /*#__PURE__*/_react["default"].createElement(_TextField["default"], {
key: "popup-editor",
value: value,
onInput: this.handleChange,
border: false,
className: className,
placeholder: startPlaceholder,
onKeyDown: this.handlePopupEditorKeyDown,
ref: this.savePopupInputEditor
});
}
}
}, {
key: "getHoverValue",
value: function getHoverValue(isPopup) {
var editorInPopup = this.props.editorInPopup;
if (isPopup && editorInPopup || !isPopup && !editorInPopup) {
var hoverValue = this.hoverValue;
if (hoverValue) {
return hoverValue.format(this.getDateFormat());
}
}
} // 处理 hover 值显示
}, {
key: "getEditorTextInfo",
value: function getEditorTextInfo(rangeTarget) {
var isFlat = this.props.isFlat;
var hoverValue = this.getHoverValue(false);
if (hoverValue !== undefined) {
if (rangeTarget === undefined || rangeTarget === 0 && this.rangeTarget === 0 || rangeTarget === 1 && this.rangeTarget === 1) {
return {
text: hoverValue,
width: isFlat ? (0, _measureTextWidth["default"])(hoverValue) : 0
};
}
}
return (0, _get3["default"])((0, _getPrototypeOf2["default"])(DatePicker.prototype), "getEditorTextInfo", this).call(this, rangeTarget);
}
}, {
key: "getRangeInputValue",
value: function getRangeInputValue(startText, endText) {
var hoverValue = this.getHoverValue(false);
if (hoverValue === undefined) {
return (0, _get3["default"])((0, _getPrototypeOf2["default"])(DatePicker.prototype), "getRangeInputValue", this).call(this, startText, endText);
}
return hoverValue;
}
}, {
key: "getInputClassString",
value: function getInputClassString(className) {
var prefixCls = this.prefixCls;
var hoverValue = this.getHoverValue(false);
return (0, _classnames["default"])(className, (0, _defineProperty2["default"])({}, "".concat(prefixCls, "-hover-value"), !(0, _isNil["default"])(hoverValue)));
}
}, {
key: "getPopupContent",
value: function getPopupContent() {
var _this4 = this;
var mode = this.getViewMode();
var date = this.getCursorDate();
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, this.getPopupEditor(), /*#__PURE__*/(0, _react.createElement)(viewComponents[mode], {
ref: function ref(node) {
return _this4.view = node;
},
date: date,
mode: this.getDefaultViewMode(),
disabledNow: !this.isValidNowDate(date),
isExistValue: this.isExistValue(),
renderer: this.getCellRenderer(mode),
onSelect: this.handleSelect,
onSelectedDateChange: this.handleSelectedDateChange,
onCursorDateChange: this.handleCursorDateChange,
onViewModeChange: this.handelViewModeChange,
isValidDate: this.isValidDate,
format: this.getDateFormat(),
step: this.getProp('step') || {},
renderExtraFooter: this.getProp('renderExtraFooter'),
extraFooterPlacement: this.getProp('extraFooterPlacement') || 'bottom',
onDateMouseEnter: this.handleDateMouseEnter,
onDateMouseLeave: this.handleDateMouseLeave,
okButton: this.getContextConfig('dateTimePickerOkButton')
}));
}
}, {
key: "getCellRenderer",
value: function getCellRenderer(mode) {
var _this$props$cellRende = this.props.cellRenderer,
cellRenderer = _this$props$cellRende === void 0 ? _noop["default"] : _this$props$cellRende;
return cellRenderer(mode);
}
}, {
key: "getTriggerIconFont",
value: function getTriggerIconFont() {
return 'date_range';
}
}, {
key: "getFieldType",
value: function getFieldType() {
return viewComponents[this.getDefaultViewMode()].type;
}
}, {
key: "getViewMode",
value: function getViewMode() {
var _this$mode = this.mode,
mode = _this$mode === void 0 ? this.getDefaultViewMode() : _this$mode;
return mode;
}
}, {
key: "toMoment",
value: function toMoment(item) {
var field = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.field;
var noCheck = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
if ((0, _isNil["default"])(item)) {
return undefined;
}
if ((0, _moment.isMoment)(item)) {
return item;
}
(0, _warning["default"])(noCheck, "DatePicker: The value of DatePicker is not moment.");
var format = this.getDateFormat(field);
if (item instanceof Date) {
item = (0, _moment["default"])(item).format(format);
}
var range = this.range,
rangeTarget = this.rangeTarget;
var date = (0, _moment["default"])(item, format);
if (date.isValid()) {
var _date$parsingFlags = date.parsingFlags(),
unusedTokens = _date$parsingFlags.unusedTokens;
if (unusedTokens.includes('HH') && unusedTokens.includes('mm') && unusedTokens.includes('ss')) {
var defaultTime = this.getDefaultTime()[range && rangeTarget !== undefined ? rangeTarget : 0];
date.hour(defaultTime.hour());
date.minute(defaultTime.minute());
date.second(defaultTime.second());
}
}
return date;
}
}, {
key: "checkMoment",
value: function checkMoment(item) {
return this.toMoment(item);
}
}, {
key: "compare",
value: function compare(oldValue, newValue) {
return (0, _isSame["default"])(this.momentToTimestamp(oldValue), this.momentToTimestamp(newValue));
}
}, {
key: "setText",
value: function setText(text) {
(0, _get3["default"])((0, _getPrototypeOf2["default"])(DatePicker.prototype), "setText", this).call(this, text);
if (text) {
var date = this.toMoment(text);
if (date && date.isValid()) {
this.changeCursorDate(date);
}
}
}
}, {
key: "afterSetValue",
value: function afterSetValue() {
(0, _get3["default"])((0, _getPrototypeOf2["default"])(DatePicker.prototype), "afterSetValue", this).call(this);
this.setText(undefined);
}
}, {
key: "momentToTimestamp",
value: function momentToTimestamp(value) {
if ((0, _moment.isMoment)(value)) {
return (0, _moment["default"])(value).valueOf();
}
return value;
}
}, {
key: "getSelectedDate",
value: function getSelectedDate() {
return this.getCursorDate();
}
}, {
key: "getCursorDate",
value: function getCursorDate() {
var range = this.range,
multiple = this.multiple,
rangeTarget = this.rangeTarget,
rangeValue = this.rangeValue;
var cursorDate = this.cursorDate || range && rangeTarget !== undefined && rangeValue && rangeValue[rangeTarget] || !multiple && this.getValue();
if (range && !multiple && rangeTarget !== undefined && !(0, _isNil["default"])(cursorDate) && !(0, _moment.isMoment)(cursorDate)) {
cursorDate = (0, _typeof2["default"])(range) === 'object' ? cursorDate[range[rangeTarget]] : cursorDate[rangeTarget];
}
if ((0, _moment.isMoment)(cursorDate) && cursorDate.isValid()) {
return cursorDate.clone();
}
return this.getValidDate(this.getDefaultTime()[range && rangeTarget !== undefined ? rangeTarget : 0]);
}
}, {
key: "getLimit",
value: function getLimit(minOrMax) {
var limit = this.getProp(minOrMax);
if ((0, _isNil["default"])(limit)) {
var configLimit = this.getContextConfig(minOrMax);
if (configLimit) {
limit = configLimit(this.getFieldType());
}
}
if (!(0, _isNil["default"])(limit)) {
var record = this.record;
if (record && (0, _isString["default"])(limit)) {
var field = record.dataSet.getField(limit);
if (field) {
var value = record.get(limit);
if (value) {
var momentValue = this.toMoment(value, field, true);
if (momentValue) {
return this.getLimitWithType(momentValue.clone(), minOrMax);
}
}
return undefined;
}
}
return this.getLimitWithType((0, _moment["default"])(limit), minOrMax);
}
}
}, {
key: "getLimitWithType",
value: function getLimitWithType(limit, minOrMax) {
if (minOrMax === 'min') {
return limit.startOf('d');
}
return limit.endOf('d');
}
}, {
key: "getPopupStyleFromAlign",
value: function getPopupStyleFromAlign() {
return undefined;
}
}, {
key: "handleCursorDateChange",
value: function handleCursorDateChange(cursorDate, selectedDate, mode) {
var nowDate = (0, _moment["default"])();
if (this.getDefaultViewMode() === _enum.ViewMode.time && cursorDate.format('YYYY-MM-DD') !== nowDate.format('YYYY-MM-DD')) {
// 更改为当天的 时间
cursorDate = cursorDate.set({
'year': nowDate.year(),
'month': nowDate.month(),
'date': nowDate.date()
});
}
var min = this.min,
max = this.max;
if (!this.isUnderRange(cursorDate, mode)) {
if (min && cursorDate.isSameOrBefore(min) && selectedDate.isSameOrBefore(cursorDate)) {
// 往后翻页,跳转到 min
cursorDate = min;
} else if (max && cursorDate.isSameOrAfter(max) && selectedDate.isSameOrAfter(cursorDate)) {
// 往前翻页,跳转到 max
cursorDate = max;
}
}
if (this.isUnderRange(cursorDate, mode) && (mode && mode !== _enum.ViewMode.date || this.isDateOutOfFilter(cursorDate, selectedDate, mode))) {
this.changeCursorDate(cursorDate);
}
}
}, {
key: "handleSelectedDateChange",
value: function handleSelectedDateChange(selectedDate, mode) {
if (this.isUnderRange(selectedDate, mode) && this.isDateOutOfFilter(selectedDate, selectedDate, mode)) {
this.setText(selectedDate.format(this.getDateFormat()));
}
}
}, {
key: "handelViewModeChange",
value: function handelViewModeChange(mode) {
var _this5 = this;
(0, _mobx.runInAction)(function () {
_this5.hoverValue = undefined;
_this5.mode = mode;
});
}
}, {
key: "handlePopupAnimateAppear",
value: function handlePopupAnimateAppear() {// noop
}
}, {
key: "handlePopupAnimateEnd",
value: function handlePopupAnimateEnd(key, exists) {
var _this6 = this;
if (key === 'align') {
if (exists) {
var popupInputEditor = this.popupInputEditor;
if (popupInputEditor) {
(0, _raf["default"])(function () {
popupInputEditor.focus();
});
}
} else {
(0, _mobx.runInAction)(function () {
_this6.cursorDate = undefined;
_this6.mode = undefined;
});
}
}
}
}, {
key: "handleSelect",
value: function handleSelect(date, expand) {
var mode = this.getDefaultViewMode();
var formatDate = date;
if (mode !== _enum.ViewMode.week) {
var format = this.getDateFormat();
formatDate = (0, _moment["default"])(date.format(format), format);
}
if (this.multiple && this.isSelected(formatDate)) {
this.unChoose(formatDate);
} else {
this.choose(formatDate, expand);
}
}
}, {
key: "handleKeyDown",
value: function handleKeyDown(e) {
if (!this.disabled && !this.readOnly) {
var el = this.popup ? this.view || this : this;
switch (e.keyCode) {
case _KeyCode["default"].RIGHT:
el.handleKeyDownRight(e);
break;
case _KeyCode["default"].LEFT:
el.handleKeyDownLeft(e);
break;
case _KeyCode["default"].DOWN:
el.handleKeyDownDown(e);
break;
case _KeyCode["default"].UP:
el.handleKeyDownUp(e);
break;
case _KeyCode["default"].END:
el.handleKeyDownEnd(e);
break;
case _KeyCode["default"].HOME:
el.handleKeyDownHome(e);
break;
case _KeyCode["default"].PAGE_UP:
el.handleKeyDownPageUp(e);
break;
case _KeyCode["default"].PAGE_DOWN:
el.handleKeyDownPageDown(e);
break;
case _KeyCode["default"].ENTER:
el.handleKeyDownEnter(e);
break;
case _KeyCode["default"].TAB:
this.handleKeyDownTab();
break;
case _KeyCode["default"].ESC:
this.handleKeyDownEsc(e);
break;
case _KeyCode["default"].SPACE:
this.handleKeyDownSpace(e);
break;
case _KeyCode["default"].BACKSPACE:
this.handleKeyDownBackSpace(e);
break;
case _KeyCode["default"].DELETE:
this.handleKeyDownDelete(e);
break;
default:
}
}
(0, _get3["default"])((0, _getPrototypeOf2["default"])(DatePicker.prototype), "handleKeyDown", this).call(this, e);
}
}, {
key: "handleKeyDownHome",
value: function handleKeyDownHome(e) {
if (!this.multiple && !this.editable) {
(0, _EventManager.stopEvent)(e);
this.choose(this.getCursorDate().startOf('M'));
}
}
}, {
key: "handleKeyDownEnd",
value: function handleKeyDownEnd(e) {
if (!this.multiple && !this.editable) {
(0, _EventManager.stopEvent)(e);
this.choose(this.getCursorDate().endOf('M'));
}
}
}, {
key: "handleKeyDownLeft",
value: function handleKeyDownLeft(e) {
if (!this.multiple && !this.editable) {
(0, _EventManager.stopEvent)(e);
this.choose(this.getCursorDate().subtract(1, 'd'));
}
}
}, {
key: "handleKeyDownRight",
value: function handleKeyDownRight(e) {
if (!this.multiple && !this.editable) {
(0, _EventManager.stopEvent)(e);
this.choose(this.getCursorDate().add(1, 'd'));
}
}
}, {
key: "handleKeyDownUp",
value: function handleKeyDownUp(e) {
if (!this.multiple && !this.editable) {
(0, _EventManager.stopEvent)(e);
this.choose(this.getCursorDate().subtract(1, 'w'));
}
}
}, {
key: "handleKeyDownDown",
value: function handleKeyDownDown(e) {
if (this.multiple) {
this.expand();
} else if (!this.editable) {
(0, _EventManager.stopEvent)(e);
this.choose(this.getCursorDate().add(1, 'w'));
}
}
}, {
key: "handleKeyDownPageUp",
value: function handleKeyDownPageUp(e) {
if (!this.multiple && !this.editable) {
(0, _EventManager.stopEvent)(e);
this.choose(this.getCursorDate().subtract(1, e.altKey ? 'y' : 'M'));
}
}
}, {
key: "handleKeyDownPageDown",
value: function handleKeyDownPageDown(e) {
if (!this.multiple && !this.editable) {
(0, _EventManager.stopEvent)(e);
this.choose(this.getCursorDate().add(1, e.altKey ? 'y' : 'M'));
}
}
}, {
key: "handleKeyDownEnter",
value: function handleKeyDownEnter(_e) {
if (!this.multiple && !this.editable) {
this.choose(this.getCursorDate());
}
}
}, {
key: "handleKeyDownEsc",
value: function handleKeyDownEsc(e) {
if (this.popup) {
e.preventDefault();
this.collapse();
}
}
}, {
key: "handleKeyDownTab",
value: function handleKeyDownTab() {
// this.collapse();
if ((!this.range || this.rangeTarget === 1) && !(0, _isNil["default"])(this.hoverValue)) {
this.hoverValue = undefined;
}
}
}, {
key: "handleKeyDownSpace",
value: function handleKeyDownSpace(e) {
if (!this.isEditable()) {
e.preventDefault();
}
if (!this.popup) {
this.expand();
}
}
}, {
key: "handleKeyDownBackSpace",
value: function handleKeyDownBackSpace(e) {
var _this7 = this;
if (!this.isEditable() && !this.popup) {
e.preventDefault();
}
if (this.cursorDate && this.afterKeyDownInputIsClear(e)) {
(0, _mobx.runInAction)(function () {
_this7.cursorDate = undefined;
});
}
}
}, {
key: "handleKeyDownDelete",
value: function handleKeyDownDelete(e) {
this.handleKeyDownBackSpace(e);
}
}, {
key: "afterKeyDownInputIsClear",
value: function afterKeyDownInputIsClear(event) {
var keyCode = event.keyCode,
_event$target = event.target,
value = _event$target.value,
selectionStart = _event$target.selectionStart,
selectionEnd = _event$target.selectionEnd;
if ((0, _isNil["default"])(value)) {
return true;
}
var length = String(value).length;
var selectedLength = Math.abs(selectionEnd - selectionStart);
if (length === selectedLength) {
return true;
}
if (selectedLength !== 0) {
return false;
}
if (keyCode === _KeyCode["default"].BACKSPACE && length === 1 && selectionStart === 1 || keyCode === _KeyCode["default"].DELETE && length === 1 && selectionStart === 0) {
return true;
}
return false;
}
}, {
key: "handlePopupEditorKeyDown",
value: function handlePopupEditorKeyDown(e) {
if (!this.disabled && !this.readOnly) {
switch (e.keyCode) {
case _KeyCode["default"].BACKSPACE:
this.handleKeyDownBackSpace(e);
break;
case _KeyCode["default"].DELETE:
this.handleKeyDownDelete(e);
break;
default:
}
}
}
}, {
key: "handleEnterDown",
value: function handleEnterDown(e) {
(0, _get3["default"])((0, _getPrototypeOf2["default"])(DatePicker.prototype), "handleEnterDown", this).call(this, e);
if (this.multiple && this.range) {
this.setRangeTarget(0);
this.beginRange();
this.expand();
}
}
}, {
key: "prepareSetValue",
value: function prepareSetValue() {
var _get2,
_this8 = this;
var cursorDate;
var useInvalidDate = this.props.useInvalidDate;
for (var _len = arguments.length, value = new Array(_len), _key = 0; _key < _len; _key++) {
value[_key] = arguments[_key];
}
(_get2 = (0, _get3["default"])((0, _getPrototypeOf2["default"])(DatePicker.prototype), "prepareSetValue", this)).call.apply(_get2, [this].concat((0, _toConsumableArray2["default"])(value.reduce(function (values, v) {
if (v === null) {
values.push(null);
} else {
var m = _this8.checkMoment(v);
if (m) {
if (useInvalidDate || m.isValid()) {
cursorDate = cursorDate || _this8.getCursorDate();
if (_this8.isDateOutOfFilter(m, cursorDate)) {
values.push(m);
}
} else {
_this8.setText();
}
} else {
values.push(m);
}
}
return values;
}, []))));
}
}, {
key: "syncValueOnBlur",
value: function syncValueOnBlur(value) {
if (value) {
this.prepareSetValue(value);
} else if (!this.multiple) {
this.prepareSetValue(this.emptyValue);
} else if (this.getProp('required')) {
var oldValues = this.getValues();
this.validate(oldValues, false);
}
}
}, {
key: "getValueKey",
value: function getValueKey(v) {
if ((0, _mobx.isArrayLike)(v)) {
return v.map(this.getValueKey, this).join(',');
}
if ((0, _moment.isMoment)(v)) {
return v.format();
}
return v;
}
}, {
key: "exchangeRangeValue",
value: function exchangeRangeValue(start, end) {
this.rangeValueExchange = true;
var defaultTime = this.props.defaultTime;
if (defaultTime) {
var _this$getDefaultTime = this.getDefaultTime(),
_this$getDefaultTime2 = (0, _slicedToArray2["default"])(_this$getDefaultTime, 2),
startDefaultTime = _this$getDefaultTime2[0],
endDefaultTime = _this$getDefaultTime2[1];
var startHour = start.hour();
var startMinute = start.minute();
var startSecond = start.second();
var startDefaultHour = startDefaultTime.hour();
var startDefaultMinute = startDefaultTime.minute();
var startDefaultSecond = startDefaultTime.second();
var endHour = end.hour();
var endMinute = end.minute();
var endSecond = end.second();
var endDefaultHour = endDefaultTime.hour();
var endDefaultMinute = endDefaultTime.minute();
var endDefaultSecond = endDefaultTime.second();
if (startHour === startDefaultHour && startMinute === startDefaultMinute && startSecond === startDefaultSecond) {
end.hour(startHour);
end.minute(startMinute);
end.second(startSecond);
}
if (endHour === endDefaultHour && endMinute === endDefaultMinute && endSecond === endDefaultSecond) {
start.hour(endHour);
start.minute(endMinute);
start.second(endSecond);
}
}
(0, _get3["default"])((0, _getPrototypeOf2["default"])(DatePicker.prototype), "exchangeRangeValue", this).call(this, start, end);
}
}, {
key: "changeCursorDate",
value: function changeCursorDate(cursorDate) {
if (this.rangeValueExchange) {
if (this.range && !(0, _isNil["default"])(this.rangeTarget) && this.rangeValue) {
var _ref2 = (0, _toConsumableArray2["default"])(this.rangeValue),
start = _ref2[0],
end = _ref2[1];
cursorDate = this.rangeTarget === 0 ? start : end;
}
this.setText(undefined);
}
this.rangeValueExchange = false;
this.cursorDate = cursorDate && this.getValidDate(cursorDate);
}
}, {
key: "isSelected",
value: function isSelected(date) {
return this.getValues().some(function (value) {
return date.isSame(value);
});
}
}, {
key: "unChoose",
value: function unChoose(date) {
this.removeValue(date, -1);
}
/**
*
* @param date 返回的时间
* @param expand 是否保持时间选择器的展开
*/
}, {
key: "choose",
value: function choose(date, expand) {
var _this9 = this;
date = this.getValidDate(date);
if (this.isDateOutOfFilter(date, date)) {
this.prepareSetValue(date);
this.changeCursorDate(date);
var range = this.range,
rangeTarget = this.rangeTarget;
if (range ? rangeTarget === 1 : !this.multiple) {
if (!expand) {
(0, _mobx.runInAction)(function () {
_this9.hoverValue = undefined;
});
this.collapse();
}
}
if (range && rangeTarget === 0 && this.popup && !expand) {
this.setRangeTarget(1);
}
}
}
}, {
key: "setRangeTarget",
value: function setRangeTarget(target) {
var _this10 = this;
if (this.isFocused && target !== undefined && target !== this.rangeTarget) {
this.expand();
}
if (!(0, _isNil["default"])(target)) {
this.cursorDate = undefined;
} else {
if ((0, _isNil["default"])(this.cursorDate)) {
this.cursorDate = this.getCursorDate();
}
this.timeID = window.setTimeout((0, _mobx.action)(function () {
_this10.cursorDate = undefined;
}), (this.props.triggerHiddenDelay || 50) + 20);
}
(0, _get3["default"])((0, _getPrototypeOf2["default"])(DatePicker.prototype), "setRangeTarget", this).call(this, target);
}
}, {
key: "getValidDate",
value: function getValidDate(date) {
var min = this.min,
max = this.max;
if (min && date.isSameOrBefore(min)) {
date = min;
} else if (max && date.isSameOrAfter(max)) {
date = max;
}
return date;
}
}, {
key: "isLowerRange",
value: function isLowerRange(m1, m2) {
var moment1 = this.toMoment(m1);
if (moment1) {
return moment1.isBefore(this.toMoment(m2));
}
return false;
}
}, {
key: "isUnderRange",
value: function isUnderRange(date, mode) {
var min = this.min,
max = this.max;
if (min || max) {
var start = (min || date).clone();
var end = (max || date).clone();
switch (mode || this.getViewMode()) {
case _enum.ViewMode.month:
start = start.startOf('M');
end = end.endOf('M');
break;
case _enum.ViewMode.year:
start = start.startOf('y');
end = end.endOf('y');
break;
case _enum.ViewMode.decade:
start = start.startOf('y').subtract(start.year() % 10, 'y').startOf('d');
end = end.endOf('y').add(9 - end.year() % 10, 'y').endOf('d');
break;
case _enum.ViewMode.dateTime:
start = start.startOf('d');
end = end.endOf('d');
break;
default:
}
return date.isBetween(start, end, undefined, '[]');
}
return true;
}
}, {
key: "isDateOutOfFilter",
value: function isDateOutOfFilter(currentDate, selected, mode) {
var filter = this.props.filter;
if (filter) {
return filter(currentDate, selected, mode || this.getViewMode(), this.rangeTarget, (0, _mobx.toJS)(this.rangeValue));
}
return true;
}
}, {
key: "isValidDate",
value: function isValidDate(currentDate, selected, mode) {
return this.isUnderRange(currentDate, mode) && this.isDateOutOfFilter(currentDate, selected, mode);
}
}, {
key: "isValidNowDate",
value: function isValidNowDate(selected) {
var filter = this.props.filter;
var isValid = this.isUnderRange((0, _moment["default"])());
if (isValid && filter) {
return filter((0, _moment["default"])(), selected, this.getViewMode(), this.rangeTarget, (0, _mobx.toJS)(this.rangeValue));
}
return isValid;
}
}, {
key: "isExistValue",
value: function isExistValue() {
var value = this.value,
multiple = this.multiple,
range = this.range;
var exist = false;
if (multiple && (0, _mobx.isArrayLike)(value) && !range) {
var mode = this.getDefaultViewMode();
var format = this.getDateFormat();
var now = (0, _moment["default"])().format(format);
switch (mode) {
case _enum.ViewMode.date:
exist = value.some(function (x) {
return x && x.isSame(now);
});
break;
case _enum.ViewMode.week:
exist = value.some(function (x) {
return x && x.format(format) === now;
});
break;
default:
break;
}
}
return exist;
}
}, {
key: "getValidatorProp",
value: function getValidatorProp(key) {
if (['maxLength', 'minLength'].includes(key)) {
return;
}
switch (key) {
case 'min':
case 'max':
return this[key];
case 'format':
return this.getDateFormat();
default:
return (0, _get3["default"])((0, _getPrototypeOf2["default"])(DatePicker.prototype), "getValidatorProp", this).call(this, key);
}
}
}, {
key: "renderLengthInfo",
value: function renderLengthInfo() {
return undefined;
}
}]);
return DatePicker;
}(_TriggerField2["default"]);
DatePicker.displayName = 'DatePicker';
DatePicker.defaultProps = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, _TriggerField2["default"].defaultProps), {}, {
suffixCls: 'calendar-picker',
mode: _enum.ViewMode.date,
useInvalidDate: true
});
(0, _tslib.__decorate)([_mobx.computed], DatePicker.prototype, "value", null);
(0, _tslib.__decorate)([_mobx.computed], DatePicker.prototype, "min", null);
(0, _tslib.__decorate)([_mobx.computed], DatePicker.prototype, "max", null);
(0, _tslib.__decorate)([_mobx.observable], DatePicker.prototype, "cursorDate", void 0);
(0, _tslib.__decorate)([_mobx.observable], DatePicker.prototype, "mode", void 0);
(0, _tslib.__decorate)([_mobx.observable], DatePicker.prototype, "hoverValue", void 0);
(0, _tslib.__decorate)([_autobind["default"]], DatePicker.prototype, "savePopupInputEditor", null);
(0, _tslib.__decorate)([_autobind["default"]], DatePicker.prototype, "defaultRenderer", null);
(0, _tslib.__decorate)([_autobind["default"], _mobx.action], DatePicker.prototype, "handlePopupRangeEditorBlur", null);
(0, _tslib.__decorate)([_mobx.action], DatePicker.prototype, "handleDateMouseEnter", void 0);
(0, _tslib.__decorate)([_mobx.action], DatePicker.prototype, "handleDateMouseLeave", void 0);
(0, _tslib.__decorate)([_autobind["default"]], DatePicker.prototype, "compare", null);
(0, _tslib.__decorate)([_autobind["default"]], DatePicker.prototype, "handleCursorDateChange", null);
(0, _tslib.__decorate)([_autobind["default"]], DatePicker.prototype, "handleSelectedDateChange", null);
(0, _tslib.__decorate)([_autobind["default"]], DatePicker.prototype, "handelViewModeChange", null);
(0, _tslib.__decorate)([_autobind["default"]], DatePicker.prototype, "handlePopupAnimateEnd", null);
(0, _tslib.__decorate)([_autobind["default"]], DatePicker.prototype, "handleSelect", null);
(0, _tslib.__decorate)([_autobind["default"]], DatePicker.prototype, "handleKeyDown", null);
(0, _tslib.__decorate)([_mobx.action], DatePicker.prototype, "handleKeyDownTab", null);
(0, _tslib.__decorate)([_autobind["default"]], DatePicker.prototype, "handlePopupEditorKeyDown", null);
(0, _tslib.__decorate)([_mobx.action], DatePicker.prototype, "handleEnterDown", null);
(0, _tslib.__decorate)([_mobx.action], DatePicker.prototype, "prepareSetValue", null);
(0, _tslib.__decorate)([_autobind["default"]], DatePicker.prototype, "getValueKey", null);
(0, _tslib.__decorate)([_mobx.action], DatePicker.prototype, "changeCursorDate", null);
(0, _tslib.__decorate)([_mobx.action], DatePicker.prototype, "setRangeTarget", null);
(0, _tslib.__decorate)([_autobind["default"]], DatePicker.prototype, "isUnderRange", null);
(0, _tslib.__decorate)([_autobind["default"]], DatePicker.prototype, "isValidDate", null);
(0, _tslib.__decorate)([_autobind["default"]], DatePicker.prototype, "isValidNowDate", null);
(0, _tslib.__decorate)([_autobind["default"]], DatePicker.prototype, "isExistValue", null);
DatePicker = (0, _tslib.__decorate)([_mobxReact.observer], DatePicker);
var _default = DatePicker;
exports["default"] = _default;
//# sourceMappingURL=DatePicker.js.map