choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
807 lines (684 loc) • 24.6 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _tslib = require("tslib");
var _react = require("react");
var _propTypes = _interopRequireDefault(require("prop-types"));
var _moment = _interopRequireWildcard(require("moment"));
var _isPlainObject = _interopRequireDefault(require("lodash/isPlainObject"));
var _isString = _interopRequireDefault(require("lodash/isString"));
var _isNil = _interopRequireDefault(require("lodash/isNil"));
var _omit = _interopRequireDefault(require("lodash/omit"));
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 _viewComponents;
function _createSuper(Derived) {
function 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;
}
}
return function () {
var Super = (0, _getPrototypeOf2["default"])(Derived),
result;
if (isNativeReflectConstruct()) {
var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor;
result = Reflect.construct(Super, arguments, NewTarget);
} else {
result = Super.apply(this, arguments);
}
return (0, _possibleConstructorReturn2["default"])(this, result);
};
}
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);
var DatePicker =
/*#__PURE__*/
function (_TriggerField) {
(0, _inherits2["default"])(DatePicker, _TriggerField);
var _super = _createSuper(DatePicker);
function DatePicker() {
(0, _classCallCheck2["default"])(this, DatePicker);
return _super.apply(this, arguments);
}
(0, _createClass2["default"])(DatePicker, [{
key: "getOtherProps",
value: function getOtherProps() {
return (0, _omit["default"])((0, _get2["default"])((0, _getPrototypeOf2["default"])(DatePicker.prototype), "getOtherProps", this).call(this), ['mode', 'filter', 'cellRenderer', 'maxLength', 'minLength']);
}
}, {
key: "getDefaultViewMode",
value: function getDefaultViewMode() {
var mode = this.props.mode;
if (mode === _enum.ViewMode.decade || mode === undefined) {
return _enum.ViewMode.date;
}
return mode;
}
}, {
key: "getPopupContent",
value: function getPopupContent() {
var _this = this;
var mode = this.getViewMode();
return (0, _react.createElement)(viewComponents[mode], {
ref: function ref(node) {
return _this.view = node;
},
date: this.getSelectedDate(),
mode: this.getDefaultViewMode(),
disabledNow: !this.isValidNowDate(this.getSelectedDate()),
renderer: this.getCellRenderer(mode),
onSelect: this.handleSelect,
onSelectedDateChange: this.handleSelectedDateChange,
onViewModeChange: this.handelViewModeChange,
isValidDate: this.isValidDate,
format: this.getDateFormat(),
step: this.getProp('step') || {},
renderExtraFooter: this.getProp('renderExtraFooter'),
extraFooterPlacement: this.getProp('extraFooterPlacement') || 'bottom'
});
}
}, {
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);
}
return (0, _moment["default"])(item, format);
}
}, {
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: "afterSetValue",
value: function afterSetValue() {
(0, _get2["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;
} // processValue(value: any): ReactNode {
// return super.processValue(this.checkMoment(value));
// }
}, {
key: "getSelectedDate",
value: function getSelectedDate() {
var range = this.range,
multiple = this.multiple,
rangeTarget = this.rangeTarget,
rangeValue = this.rangeValue;
var selectedDate = this.selectedDate || range && !multiple && rangeTarget !== undefined && rangeValue && rangeValue[rangeTarget] || !multiple && this.getValue();
if ((0, _moment.isMoment)(selectedDate) && selectedDate.isValid()) {
return selectedDate.clone();
}
return this.getValidDate((0, _moment["default"])().startOf('d'));
}
}, {
key: "getLimit",
value: function getLimit(minOrMax) {
var limit = this.getProp(minOrMax);
if (!(0, _isNil["default"])(limit)) {
var record = this.record;
if (record && (0, _isString["default"])(limit)) {
var field = record.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: "handleSelectedDateChange",
value: function handleSelectedDateChange(selectedDate, mode) {
if (this.isUnderRange(selectedDate, mode)) {
this.changeSelectedDate(selectedDate);
}
}
}, {
key: "handelViewModeChange",
value: function handelViewModeChange(mode) {
var _this2 = this;
(0, _mobx.runInAction)(function () {
_this2.mode = mode;
});
}
}, {
key: "handlePopupAnimateAppear",
value: function handlePopupAnimateAppear() {}
}, {
key: "handlePopupAnimateEnd",
value: function handlePopupAnimateEnd(key, exists) {
var _this3 = this;
if (!exists && key === 'align') {
(0, _mobx.runInAction)(function () {
_this3.selectedDate = undefined;
_this3.mode = undefined;
});
}
}
}, {
key: "handleSelect",
value: function handleSelect(date, expand) {
if (this.multiple && this.isSelected(date)) {
this.unChoose(date);
} else {
this.choose(date, expand);
}
}
}, {
key: "handleKeyDown",
value: function handleKeyDown(e) {
if (!this.isDisabled() && !this.isReadOnly()) {
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;
default:
}
}
(0, _get2["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.getSelectedDate().startOf('M'));
}
}
}, {
key: "handleKeyDownEnd",
value: function handleKeyDownEnd(e) {
if (!this.multiple && !this.editable) {
(0, _EventManager.stopEvent)(e);
this.choose(this.getSelectedDate().endOf('M'));
}
}
}, {
key: "handleKeyDownLeft",
value: function handleKeyDownLeft(e) {
if (!this.multiple && !this.editable) {
(0, _EventManager.stopEvent)(e);
this.choose(this.getSelectedDate().subtract(1, 'd'));
}
}
}, {
key: "handleKeyDownRight",
value: function handleKeyDownRight(e) {
if (!this.multiple && !this.editable) {
(0, _EventManager.stopEvent)(e);
this.choose(this.getSelectedDate().add(1, 'd'));
}
}
}, {
key: "handleKeyDownUp",
value: function handleKeyDownUp(e) {
if (!this.multiple && !this.editable) {
(0, _EventManager.stopEvent)(e);
this.choose(this.getSelectedDate().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.getSelectedDate().add(1, 'w'));
}
}
}, {
key: "handleKeyDownPageUp",
value: function handleKeyDownPageUp(e) {
if (!this.multiple && !this.editable) {
(0, _EventManager.stopEvent)(e);
this.choose(this.getSelectedDate().subtract(1, e.altKey ? 'y' : 'M'));
}
}
}, {
key: "handleKeyDownPageDown",
value: function handleKeyDownPageDown(e) {
if (!this.multiple && !this.editable) {
(0, _EventManager.stopEvent)(e);
this.choose(this.getSelectedDate().add(1, e.altKey ? 'y' : 'M'));
}
}
}, {
key: "handleKeyDownEnter",
value: function handleKeyDownEnter(_e) {
if (!this.multiple && !this.editable) {
this.choose(this.getSelectedDate());
}
}
}, {
key: "handleKeyDownEsc",
value: function handleKeyDownEsc(e) {
if (this.popup) {
e.preventDefault();
this.collapse();
}
}
}, {
key: "handleKeyDownTab",
value: function handleKeyDownTab() {// this.collapse();
}
}, {
key: "handleKeyDownSpace",
value: function handleKeyDownSpace(e) {
e.preventDefault();
if (!this.popup) {
this.expand();
}
}
}, {
key: "handleEnterDown",
value: function handleEnterDown(e) {
(0, _get2["default"])((0, _getPrototypeOf2["default"])(DatePicker.prototype), "handleEnterDown", this).call(this, e);
if (this.multiple && this.range) {
this.setRangeTarget(0);
this.beginRange();
this.expand();
}
}
}, {
key: "syncValueOnBlur",
value: function syncValueOnBlur(value) {
if (value) {
this.prepareSetValue(this.checkMoment(value));
} else if (!this.multiple) {
this.setValue(this.emptyValue);
}
}
}, {
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: "changeSelectedDate",
value: function changeSelectedDate(selectedDate) {
this.selectedDate = this.getValidDate(selectedDate);
}
}, {
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) {
date = this.getValidDate(date);
this.prepareSetValue(date);
this.changeSelectedDate(date);
if (this.range ? this.rangeTarget === 1 : !this.multiple) {
if (!expand) {
this.collapse();
}
}
if (this.range && this.rangeTarget === 0 && this.popup && !expand) {
this.setRangeTarget(1);
}
}
}, {
key: "setRangeTarget",
value: function setRangeTarget(target) {
if (target !== undefined && target !== this.rangeTarget) {
this.expand();
}
this.selectedDate = undefined;
(0, _get2["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) {
return m1.isBefore(m2);
}
}, {
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: "isValidDate",
value: function isValidDate(currentDate, selected) {
var filter = this.props.filter;
var isValid = this.isUnderRange(currentDate);
if (isValid && filter) {
return filter(currentDate, selected, this.getViewMode());
}
return isValid;
}
}, {
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);
}
return isValid;
}
}, {
key: "getValidatorProps",
value: function getValidatorProps() {
var min = this.min,
max = this.max;
return (0, _omit["default"])((0, _objectSpread2["default"])({}, (0, _get2["default"])((0, _getPrototypeOf2["default"])(DatePicker.prototype), "getValidatorProps", this).call(this), {
min: min,
max: max,
format: this.getDateFormat()
}), ['maxLength', 'minLength']);
}
}, {
key: "value",
get: function get() {
var _this4 = 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(_this4.checkMoment, _this4);
}
return _this4.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 _this5 = this;
(0, _mobx.runInAction)(function () {
_this5.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: "editable",
get: function get() {
var mode = this.getViewMode();
return (0, _get2["default"])((0, _getPrototypeOf2["default"])(DatePicker.prototype), "editable", this) && mode !== _enum.ViewMode.week;
}
}, {
key: "min",
get: function get() {
return this.getLimit('min');
}
}, {
key: "max",
get: function get() {
return this.getLimit('max');
}
}]);
return DatePicker;
}(_TriggerField2["default"]);
DatePicker.displayName = 'DatePicker';
DatePicker.propTypes = (0, _objectSpread2["default"])({
/**
* 日期格式,如 `YYYY-MM-DD HH:mm:ss`
*/
format: _propTypes["default"].string,
/**
* 显示模式date|dateTime|time|year|month|week
*/
mode: _propTypes["default"].string,
/**
* 单元格渲染
*/
cellRenderer: _propTypes["default"].func,
/**
* 日期过滤
*/
filter: _propTypes["default"].func,
/**
* 最小日期
*/
min: _propTypes["default"].any,
/**
* 最大日期
*/
max: _propTypes["default"].any,
/**
* 时间步距
*/
step: _propTypes["default"].shape({
hour: _propTypes["default"].number,
minute: _propTypes["default"].number,
second: _propTypes["default"].number
})
}, _TriggerField2["default"].propTypes);
DatePicker.defaultProps = (0, _objectSpread2["default"])({}, _TriggerField2["default"].defaultProps, {
suffixCls: 'calendar-picker',
mode: _enum.ViewMode.date
});
(0, _tslib.__decorate)([_mobx.computed], DatePicker.prototype, "value", null);
(0, _tslib.__decorate)([_mobx.computed], DatePicker.prototype, "defaultValidationMessages", null);
(0, _tslib.__decorate)([_mobx.computed], DatePicker.prototype, "editable", 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, "selectedDate", void 0);
(0, _tslib.__decorate)([_mobx.observable], DatePicker.prototype, "mode", void 0);
(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, "handleEnterDown", null);
(0, _tslib.__decorate)([_mobx.action], DatePicker.prototype, "changeSelectedDate", 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);
DatePicker = (0, _tslib.__decorate)([_mobxReact.observer], DatePicker);
var _default = DatePicker;
exports["default"] = _default;
//# sourceMappingURL=DatePicker.js.map