amis
Version:
一种MIS页面生成工具
149 lines (148 loc) • 6.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
/**
* @file 基于 react-datetime 改造。
*/
var react_datetime_1 = tslib_1.__importDefault(require("react-datetime"));
var react_1 = tslib_1.__importDefault(require("react"));
var CalendarContainer_1 = tslib_1.__importDefault(require("./CalendarContainer"));
var classnames_1 = tslib_1.__importDefault(require("classnames"));
var theme_1 = require("../../theme");
var BaseDatePicker = /** @class */ (function (_super) {
tslib_1.__extends(BaseDatePicker, _super);
function BaseDatePicker(props) {
var _this = _super.call(this, props) || this;
_this.getUpdateOn = function (formats) {
if (formats.date.match(/[lLD]/)) {
return 'days';
}
else if (formats.date.indexOf('M') !== -1) {
return 'months';
}
else if (formats.date.indexOf('Q') !== -1) {
return 'quarters';
}
else if (formats.date.indexOf('Y') !== -1) {
return 'years';
}
return 'days';
};
_this.getComponentProps = (function (origin) {
return function () {
var props = origin.call(_this);
props.setDateTimeState = _this.setState.bind(_this);
[
'inputFormat',
'onChange',
'onClose',
'requiredConfirm',
'classPrefix',
'prevIcon',
'nextIcon',
'isEndDate',
'classnames'
].forEach(function (key) { return (props[key] = _this.props[key]); });
return props;
};
})(_this.getComponentProps);
_this.setDate = function (type) {
// todo 没看懂这个是啥意思,好像没啥用
var currentShould = _this.props.viewMode === 'months' &&
!/^mm$/i.test(_this.props.inputFormat || '');
var nextViews = {
month: currentShould ? 'months' : 'days',
year: currentShould ? 'months' : 'days',
quarters: ''
};
if (_this.props.viewMode === 'quarters') {
nextViews.year = 'quarters';
}
return function (e) {
_this.setState({
viewDate: _this.state.viewDate
.clone()[type](parseInt(e.target.closest('td').getAttribute('data-value'), 10))
.startOf(type),
currentView: nextViews[type]
});
_this.props.onViewModeChange(nextViews[type]);
};
};
_this.updateSelectedDate = function (e, close) {
var that = _this;
var target = e.currentTarget, modifier = 0, viewDate = _this.state.viewDate, currentDate = _this.state.selectedDate || viewDate, date;
if (target.className.indexOf('rdtDay') !== -1) {
if (target.className.indexOf('rdtNew') !== -1)
modifier = 1;
else if (target.className.indexOf('rdtOld') !== -1)
modifier = -1;
date = viewDate
.clone()
.month(viewDate.month() + modifier)
.date(parseInt(target.getAttribute('data-value'), 10));
}
else if (target.className.indexOf('rdtMonth') !== -1) {
date = viewDate
.clone()
.month(parseInt(target.getAttribute('data-value'), 10))
.date(currentDate.date());
}
else if (target.className.indexOf('rdtQuarter') !== -1) {
date = viewDate
.clone()
.quarter(parseInt(target.getAttribute('data-value'), 10))
.date(currentDate.date());
}
else if (target.className.indexOf('rdtYear') !== -1) {
date = viewDate
.clone()
.month(currentDate.month())
.date(currentDate.date())
.year(parseInt(target.getAttribute('data-value'), 10));
}
date
.hours(currentDate.hours())
.minutes(currentDate.minutes())
.seconds(currentDate.seconds())
.milliseconds(currentDate.milliseconds());
if (!_this.props.value) {
var open = !(_this.props.closeOnSelect && close);
if (!open) {
that.props.onBlur(date);
}
_this.setState({
selectedDate: date,
viewDate: date.clone().startOf('month'),
inputValue: date.format(_this.state.inputFormat),
open: open
});
}
else {
if (_this.props.closeOnSelect && close) {
that.closeCalendar();
}
}
that.props.onChange(date);
};
var state = _this.getStateFromProps(_this.props);
if (state.open === undefined) {
state.open = !_this.props.input;
}
state.currentView = _this.props.dateFormat
? _this.props.viewMode || state.updateOn || 'days'
: 'time';
_this.state = state;
return _this;
}
BaseDatePicker.prototype.render = function () {
var Component = CalendarContainer_1.default;
return (react_1.default.createElement("div", { className: classnames_1.default('rdt rdtStatic rdtOpen', this.props.className) },
react_1.default.createElement("div", { key: "dt", className: "rdtPicker" },
react_1.default.createElement(Component, { view: this.state.currentView, viewProps: this.getComponentProps() }))));
};
BaseDatePicker.propTypes = {};
return BaseDatePicker;
}(react_datetime_1.default));
var Calendar = theme_1.themeable(BaseDatePicker);
exports.default = Calendar;
//# sourceMappingURL=./components/calendar/Calendar.js.map