UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

276 lines (275 loc) 13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); /** * @file 基于 react-datetime 改造。 */ var react_datetime_1 = (0, tslib_1.__importDefault)(require("react-datetime")); var react_1 = (0, tslib_1.__importDefault)(require("react")); var CalendarContainer_1 = (0, tslib_1.__importDefault)(require("./CalendarContainer")); var classnames_1 = (0, tslib_1.__importDefault)(require("classnames")); var moment_1 = (0, tslib_1.__importDefault)(require("moment")); var theme_1 = require("../../theme"); var helper_1 = require("../../utils/helper"); var BaseDatePicker = /** @class */ (function (_super) { (0, tslib_1.__extends)(BaseDatePicker, _super); function BaseDatePicker(props) { var _this = _super.call(this, props) || this; _this.timeCellLength = { year: 4, month: 2, date: 2, hours: 2, minutes: 2, seconds: 2, milliseconds: 3 }; _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', 'minDate', 'maxDate', 'schedules', 'largeMode', 'onScheduleClick', 'hideHeader', 'updateOn', 'useMobileUI', 'showToolbar', 'embed', 'type' ].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) { var _a, _b; _this.setState({ viewDate: _this.state.viewDate .clone()[type](parseInt(e.target.closest('td').getAttribute('data-value'), 10)) .startOf(type), currentView: nextViews[type] }); (_b = (_a = _this.props).onViewModeChange) === null || _b === void 0 ? void 0 : _b.call(_a, 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)) .startOf('quarter') .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); }; _this.getDateBoundary = function (currentDate) { var _a, _b; var _c = currentDate.toObject(), years = _c.years, months = _c.months; var maxDateObject = (_a = _this.props.maxDate) === null || _a === void 0 ? void 0 : _a.toObject(); var minDateObject = (_b = _this.props.minDate) === null || _b === void 0 ? void 0 : _b.toObject(); var yearBoundary = { max: maxDateObject ? maxDateObject.years : years + 100, min: minDateObject ? minDateObject.years : years - 100, }; var monthBoundary = { max: years === (maxDateObject === null || maxDateObject === void 0 ? void 0 : maxDateObject.years) ? maxDateObject.months : 11, min: years === (minDateObject === null || minDateObject === void 0 ? void 0 : minDateObject.years) ? minDateObject.months : 0 }; var dateBoundary = { max: years === (maxDateObject === null || maxDateObject === void 0 ? void 0 : maxDateObject.years) && months === (maxDateObject === null || maxDateObject === void 0 ? void 0 : maxDateObject.months) ? maxDateObject.date : currentDate.daysInMonth(), min: years === (minDateObject === null || minDateObject === void 0 ? void 0 : minDateObject.years) && months === (minDateObject === null || minDateObject === void 0 ? void 0 : minDateObject.months) ? minDateObject.date : 1 }; return { year: yearBoundary, month: monthBoundary, date: dateBoundary, hours: { max: 23, min: 0 }, minutes: { max: 59, min: 0 }, seconds: { max: 59, min: 0 } }; }; _this.timeCell = function (value, type) { var str = value + ''; while (str.length < _this.timeCellLength[type]) str = '0' + str; return str; }; _this.getColumns = function (types, dateBoundary) { var __ = _this.props.translate; var columns = []; types.map(function (type) { var options = (0, helper_1.getRange)(dateBoundary[type].min, dateBoundary[type].max, 1).map(function (item) { return { text: type === 'month' ? _this.timeCell(item + 1, type) : _this.timeCell(item, type), value: item }; }); columns.push({ options: options, type: __('Data.' + type) }); }); return columns; }; _this.onConfirm = function (value, types, isHandleChange) { var currentDate = (_this.state.selectedDate || _this.state.viewDate || (0, moment_1.default)()).clone(); var date = (0, helper_1.convertArrayValueToMoment)(value, types, currentDate); if (!_this.props.value) { _this.setState({ selectedDate: date, inputValue: date.format(_this.state.inputFormat) }); } _this.props.onChange && _this.props.onChange(date, isHandleChange); !isHandleChange && _this.props.onClose && _this.props.onClose(); }; 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'; if (_this.props.viewDate) { state.viewDate = _this.props.viewDate; } _this.state = state; return _this; } BaseDatePicker.prototype.render = function () { var _a; var Component = CalendarContainer_1.default; var viewProps = this.getComponentProps(); var _b = this.props, timeFormat = _b.timeFormat, dateFormat = _b.dateFormat, viewMode = _b.viewMode, renderQuarter = _b.renderQuarter, timeRangeHeader = _b.timeRangeHeader; if (viewMode === 'quarters') { _a = [ 'quarters', renderQuarter ], viewProps.updateOn = _a[0], viewProps.renderQuarter = _a[1]; } else if (viewMode === 'years') { viewProps.updateOn = 'years'; } else if (viewMode === 'months') { viewProps.updateOn = 'months'; } viewProps.onConfirm = this.onConfirm; viewProps.getDateBoundary = this.getDateBoundary; viewProps.getColumns = this.getColumns; viewProps.timeCell = this.timeCell; viewProps.initial = this.props.initial; viewProps.numerical = this.props.numerical; viewProps.isInitial = this.props.isInitial; viewProps.timeRangeHeader = this.props.timeRangeHeader; // viewProps.viewStartYear = this.props.viewStartYear; // viewProps.viewStartMonth = this.props.viewStartMonth; // viewProps.viewEndYear = this.props.viewEndYear; // viewProps.viewEndMonth = this.props.viewEndMonth; // viewProps.changeCurrentShowTime = this.props.changeCurrentShowTime; return (react_1.default.createElement("div", { className: (0, classnames_1.default)('rdt rdtStatic rdtOpen', this.props.className, (timeFormat && !dateFormat) || typeof dateFormat !== 'string' ? 'rdtTimeWithoutD' : timeFormat && timeFormat.toLowerCase().indexOf('s') > 0 ? 'rdtTimeWithS' : timeFormat ? 'rdtTime' : '') }, react_1.default.createElement("div", { key: (0, helper_1.isMobile)() ? viewProps.value : 'dt', className: (0, classnames_1.default)('rdtPicker', { 'is-mobile-year': (0, helper_1.isMobile)() && viewMode === 'years' }, { 'is-mobile-embed': (0, helper_1.isMobile)() && viewProps.embed }, timeFormat && !dateFormat ? 'rdtPickerTimeWithoutD' : timeFormat && dateFormat ? 'rdtPickerTime' : dateFormat && !timeFormat ? 'rdtPickerDate' : '') }, react_1.default.createElement(Component, { view: this.state.currentView, viewProps: viewProps, timeRangeHeader: timeRangeHeader })))); }; BaseDatePicker.propTypes = {}; return BaseDatePicker; }(react_datetime_1.default)); var Calendar = (0, theme_1.themeable)(BaseDatePicker); exports.default = Calendar; //# sourceMappingURL=./components/calendar/Calendar.js.map