choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
529 lines (465 loc) • 19.5 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 _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
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 _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 = _interopRequireDefault(require("react"));
var _moment = _interopRequireDefault(require("moment"));
var _classnames = _interopRequireDefault(require("classnames"));
var _mobx = require("mobx");
var _mobxReact = require("mobx-react");
var _noop = _interopRequireDefault(require("lodash/noop"));
var _autobind = _interopRequireDefault(require("../_util/autobind"));
var _enum = require("./enum");
var _DaysView2 = _interopRequireWildcard(require("./DaysView"));
var _enum2 = require("../data-set/enum");
var _localeContext = require("../locale-context");
var _EventManager = require("../_util/EventManager");
var _stepMapping;
var stepMapping = (_stepMapping = {}, (0, _defineProperty2["default"])(_stepMapping, _enum.TimeUnit.hour, 'hour'), (0, _defineProperty2["default"])(_stepMapping, _enum.TimeUnit.minute, 'minute'), (0, _defineProperty2["default"])(_stepMapping, _enum.TimeUnit.second, 'second'), _stepMapping);
var TimesView = /*#__PURE__*/function (_DaysView) {
(0, _inherits2["default"])(TimesView, _DaysView);
var _super = (0, _createSuper2["default"])(TimesView);
function TimesView() {
(0, _classCallCheck2["default"])(this, TimesView);
return _super.apply(this, arguments);
}
(0, _createClass2["default"])(TimesView, [{
key: "getViewClassName",
value: function getViewClassName() {
var prefixCls = this.prefixCls;
return "".concat(prefixCls, "-time");
}
}, {
key: "showHour",
get: function get() {
var format = this.observableProps.format;
return format.indexOf('H') > -1 || format.indexOf('h') > -1 || format.indexOf('k') > -1;
}
}, {
key: "showMinute",
get: function get() {
var format = this.observableProps.format;
return format.indexOf('m') > -1;
}
}, {
key: "showSecond",
get: function get() {
var format = this.observableProps.format;
return format.indexOf('s') > -1;
}
}, {
key: "use12Hours",
get: function get() {
var format = this.observableProps.format;
return format.indexOf('h') > -1 || format.indexOf('a') > -1 || format.indexOf('A') > -1;
}
}, {
key: "timeUnitQueue",
get: function get() {
var showHour = this.showHour,
showMinute = this.showMinute,
showSecond = this.showSecond,
use12Hours = this.use12Hours;
var queue = [];
if (showHour) {
queue.push(_enum.TimeUnit.hour);
}
if (showMinute) {
queue.push(_enum.TimeUnit.minute);
}
if (showSecond) {
queue.push(_enum.TimeUnit.second);
}
if (use12Hours) {
queue.push(_enum.TimeUnit.a);
}
return queue;
}
}, {
key: "barStyle",
get: function get() {
return {
width: "".concat(100 / this.timeUnitQueue.length, "%")
};
}
}, {
key: "activeStyle",
get: function get() {
var timeUnitQueue = this.timeUnitQueue;
var width = 100 / timeUnitQueue.length;
return {
width: "".concat(width, "%"),
left: "".concat(timeUnitQueue.indexOf(this.getCurrentUnit()) * width, "%")
};
}
}, {
key: "savePanel",
value: function savePanel(node) {
this.panel = node;
}
}, {
key: "getObservableProps",
value: function getObservableProps(props, context) {
return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, (0, _get2["default"])((0, _getPrototypeOf2["default"])(TimesView.prototype), "getObservableProps", this).call(this, props, context)), {}, {
format: props.format
});
}
}, {
key: "componentDidMount",
value: function componentDidMount() {
(0, _get2["default"])((0, _getPrototypeOf2["default"])(TimesView.prototype), "componentDidMount", this).call(this);
if (this.panel) {
// 兼容Firefox wheel为通用事件
this.panel.addEventListener('wheel', this.handleWheel, {
passive: false
});
}
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
if (this.panel) {
this.panel.removeEventListener('wheel', this.handleWheel);
}
}
}, {
key: "handleDateTimeSelect",
value: function handleDateTimeSelect() {
this.changeViewMode(_enum.ViewMode.dateTime);
}
}, {
key: "handleKeyDownHome",
value: function handleKeyDownHome(e) {
this.handleKeyDownPageUp(e);
}
}, {
key: "handleKeyDownEnd",
value: function handleKeyDownEnd(e) {
this.handleKeyDownPageDown(e);
}
}, {
key: "handleKeyDownLeft",
value: function handleKeyDownLeft(e) {
(0, _EventManager.stopEvent)(e);
if (e.altKey) {
if (this.props.mode !== _enum.ViewMode.time) {
this.changeViewMode(_enum.ViewMode.dateTime);
}
} else {
this.changeUnit(this.getPrevUnit());
}
}
}, {
key: "handleKeyDownRight",
value: function handleKeyDownRight(e) {
(0, _EventManager.stopEvent)(e);
if (!e.altKey) {
this.changeUnit(this.getNextUnit());
}
}
}, {
key: "handleKeyDownUp",
value: function handleKeyDownUp(e) {
(0, _EventManager.stopEvent)(e);
var unit = this.getCurrentUnit();
if (unit === _enum.TimeUnit.a) {
this.changeSelectedDate(this.getCloneDate().subtract(12, _enum.TimeUnit.hour));
} else {
var step = this.props.step;
var unitStep = step[stepMapping[unit]] || 1;
var date = this.getCloneDate();
var parentUnit = unit === _enum.TimeUnit.second ? _enum.TimeUnit.minute : unit === _enum.TimeUnit.minute ? _enum.TimeUnit.hour : null;
if (parentUnit) {
var parentStep = step[stepMapping[parentUnit]];
if (parentStep) {
var preValue = date.get(parentUnit);
date.subtract(unitStep, unit);
if (preValue !== date.get(parentUnit)) {
date.subtract(parentStep - 1, parentUnit);
}
this.changeSelectedDate(date);
return;
}
}
this.changeSelectedDate(date.subtract(unitStep, unit));
}
}
}, {
key: "handleKeyDownDown",
value: function handleKeyDownDown(e) {
(0, _EventManager.stopEvent)(e);
var unit = this.getCurrentUnit();
if (unit === _enum.TimeUnit.a) {
this.changeSelectedDate(this.getCloneDate().add(12, _enum.TimeUnit.hour));
} else {
var step = this.props.step;
var unitStep = step[stepMapping[unit]] || 1;
var date = this.getCloneDate();
var parentUnit = unit === _enum.TimeUnit.second ? _enum.TimeUnit.minute : unit === _enum.TimeUnit.minute ? _enum.TimeUnit.hour : null;
if (parentUnit) {
var parentStep = step[stepMapping[parentUnit]];
if (parentStep) {
var preValue = date.get(parentUnit);
date.add(unitStep, unit);
if (preValue !== date.get(parentUnit)) {
date.add(parentStep - 1, parentUnit);
}
this.changeSelectedDate(date);
return;
}
}
this.changeSelectedDate(date.add(unitStep, unit));
}
}
}, {
key: "handleKeyDownPageUp",
value: function handleKeyDownPageUp(e) {
(0, _EventManager.stopEvent)(e);
var unit = this.getCurrentUnit();
if (unit === _enum.TimeUnit.a) {
this.changeSelectedDate(this.getCloneDate().set(_enum.TimeUnit.hour, 0));
} else {
this.changeSelectedDate(this.getCloneDate().set(unit, 0));
}
}
}, {
key: "handleKeyDownPageDown",
value: function handleKeyDownPageDown(e) {
(0, _EventManager.stopEvent)(e);
var unit = this.getCurrentUnit();
if (unit === _enum.TimeUnit.a) {
this.changeSelectedDate(this.getCloneDate().set(_enum.TimeUnit.hour, 12));
} else {
var step = this.props.step;
var unitStep = step[stepMapping[unit]] || 1;
var size = unit === _enum.TimeUnit.hour ? this.use12Hours ? 12 : 24 : 60;
this.changeSelectedDate(this.getCloneDate().set(unit, size - unitStep));
}
}
}, {
key: "handleTimeCellClick",
value: function handleTimeCellClick(date, unit) {
this.changeUnit(unit);
this.changeSelectedDate(date);
}
}, {
key: "handleWheel",
value: function handleWheel(e) {
e.preventDefault();
if (e.deltaY > 0) {
this.handleKeyDownDown(e);
} else if (e.deltaY < 0) {
this.handleKeyDownUp(e);
}
}
}, {
key: "renderHeader",
value: function renderHeader() {
var prefixCls = this.prefixCls,
_this$props = this.props,
date = _this$props.date,
mode = _this$props.mode,
format = this.observableProps.format;
if (mode === _enum.ViewMode.time) {
return /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-header")
}, /*#__PURE__*/_react["default"].createElement("span", {
className: "".concat(prefixCls, "-view-select")
}, date.format(format)));
}
return /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-header")
}, /*#__PURE__*/_react["default"].createElement("a", {
className: "".concat(prefixCls, "-view-select"),
onClick: this.handleMonthSelect
}, date.localeData().monthsShort(date)), /*#__PURE__*/_react["default"].createElement("a", {
className: "".concat(prefixCls, "-view-select"),
onClick: this.handleDateTimeSelect
}, date.date()), /*#__PURE__*/_react["default"].createElement("a", {
className: "".concat(prefixCls, "-view-select"),
onClick: this.handleYearSelect
}, date.year()));
}
}, {
key: "renderFooter",
value: function renderFooter() {
var prefixCls = this.prefixCls,
disabledNow = this.props.disabledNow;
var footerProps = {
className: (0, _classnames["default"])("".concat(prefixCls, "-footer-now-btn"), (0, _defineProperty2["default"])({}, "".concat(prefixCls, "-now-disabled"), disabledNow)),
onClick: !disabledNow ? this.choose.bind(this, (0, _moment["default"])()) : _noop["default"],
hidden: this.props.datetimeSide
};
return /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-footer")
}, /*#__PURE__*/_react["default"].createElement("a", (0, _extends2["default"])({}, footerProps), (0, _localeContext.$l)('DatePicker', 'now')), /*#__PURE__*/_react["default"].createElement("a", {
className: "".concat(prefixCls, "-footer-view-select"),
onClick: this.choose.bind(this, this.props.date)
}, (0, _localeContext.$l)('DatePicker', 'ok')));
}
}, {
key: "renderPanel",
value: function renderPanel() {
var className = this.getPanelClass();
return /*#__PURE__*/_react["default"].createElement("div", {
ref: this.savePanel,
className: className
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(className, "-inner")
}, this.renderPanelBody()));
}
}, {
key: "renderPanelBody",
value: function renderPanelBody() {
var showHour = this.showHour,
showMinute = this.showMinute,
showSecond = this.showSecond,
use12Hours = this.use12Hours,
activeStyle = this.activeStyle;
return [showHour && this.getTimeBar(_enum.TimeUnit.hour), showMinute && this.getTimeBar(_enum.TimeUnit.minute), showSecond && this.getTimeBar(_enum.TimeUnit.second), use12Hours && this.getTimeBar(_enum.TimeUnit.a), /*#__PURE__*/_react["default"].createElement("div", {
key: "active",
style: activeStyle,
className: "".concat(this.prefixCls, "-time-focus-active")
})];
}
}, {
key: "renderCell",
value: function renderCell(props) {
return /*#__PURE__*/_react["default"].createElement("li", (0, _extends2["default"])({}, props));
}
}, {
key: "getTimeBar",
value: function getTimeBar(unit) {
var prefixCls = this.prefixCls,
use12Hours = this.use12Hours,
_this$props2 = this.props,
date = _this$props2.date,
_this$props2$renderer = _this$props2.renderer,
renderer = _this$props2$renderer === void 0 ? this.renderCell : _this$props2$renderer,
_this$props2$isValidD = _this$props2.isValidDate,
isValidDate = _this$props2$isValidD === void 0 ? _DaysView2.alwaysValidDate : _this$props2$isValidD,
step = _this$props2.step,
onDateMouseLeave = _this$props2.onDateMouseLeave,
format = this.observableProps.format;
var isUpperCase = format.indexOf('A') > -1;
var items = [];
var selected = date.clone();
var finalUnit = unit === _enum.TimeUnit.a ? _enum.TimeUnit.hour : unit;
var selectedValue = selected.get(finalUnit);
var size = unit === _enum.TimeUnit.a ? 13 : unit === _enum.TimeUnit.hour ? use12Hours ? 12 : 24 : 60;
var begin = unit === _enum.TimeUnit.a ? selectedValue % 12 : unit === _enum.TimeUnit.hour && use12Hours && selectedValue > 11 ? 12 : 0;
var pre = date.clone().set(finalUnit, begin);
var last = pre.clone().add(size, finalUnit);
while (pre.isBefore(last)) {
var _classNames2;
var current = pre.clone();
var isDisabled = !isValidDate(current, selected);
var text = unit === _enum.TimeUnit.a ? current.format(isUpperCase ? 'A' : 'a') : String(pre.get(unit) - (use12Hours && finalUnit === _enum.TimeUnit.hour && pre.get(unit) > 11 ? 12 : 0) || (use12Hours && finalUnit === _enum.TimeUnit.hour ? 12 : 0));
var className = (0, _classnames["default"])("".concat(prefixCls, "-cell"), (_classNames2 = {}, (0, _defineProperty2["default"])(_classNames2, "".concat(prefixCls, "-selected"), unit === _enum.TimeUnit.a ? current.get(_enum.TimeUnit.hour) === selectedValue : current.isSame(selected, finalUnit)), (0, _defineProperty2["default"])(_classNames2, "".concat(prefixCls, "-disabled"), isDisabled), _classNames2));
var props = {
key: text,
className: className,
children: /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-cell-inner")
}, text)
};
if (!isDisabled) {
props.onClick = this.handleTimeCellClick.bind(this, current, unit);
props.onMouseEnter = this.handleDateMouseEnter.bind(this, current);
props.onMouseLeave = onDateMouseLeave;
}
items.push(renderer(props, text, current, selected));
pre.add(unit === _enum.TimeUnit.a ? 12 : step[stepMapping[unit]] || 1, finalUnit);
}
var top = unit === _enum.TimeUnit.a ? -Math.floor(selectedValue / 12) : (unit === _enum.TimeUnit.hour && use12Hours ? -selectedValue % 12 : -selectedValue) / (step[stepMapping[unit]] || 1);
return /*#__PURE__*/_react["default"].createElement("div", {
key: unit,
className: "".concat(prefixCls, "-time-list"),
onMouseEnter: this.changeUnit.bind(this, unit),
style: this.barStyle
}, /*#__PURE__*/_react["default"].createElement("ul", {
style: {
top: "".concat((top + 3.5) * 100, "%")
}
}, items), /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-time-focus")
}));
}
}, {
key: "getPanelClass",
value: function getPanelClass() {
return "".concat(this.prefixCls, "-time-panel");
}
}, {
key: "getCurrentUnit",
value: function getCurrentUnit() {
var currentUnit = this.currentUnit;
return currentUnit || this.timeUnitQueue[0];
}
}, {
key: "getPrevUnit",
value: function getPrevUnit() {
var timeUnitQueue = this.timeUnitQueue;
return timeUnitQueue[timeUnitQueue.indexOf(this.getCurrentUnit()) - 1];
}
}, {
key: "getNextUnit",
value: function getNextUnit() {
var timeUnitQueue = this.timeUnitQueue;
return timeUnitQueue[timeUnitQueue.indexOf(this.getCurrentUnit()) + 1];
}
}, {
key: "changeUnit",
value: function changeUnit(unit) {
if (unit !== undefined && unit !== this.currentUnit) {
this.currentUnit = unit;
}
}
}, {
key: "choose",
value: function choose(date) {
var mode = this.props.mode;
(0, _get2["default"])((0, _getPrototypeOf2["default"])(TimesView.prototype), "choose", this).call(this, date);
if (mode !== _enum.ViewMode.time) {
this.changeSelectedDate(date);
this.changeViewMode(mode);
}
}
}]);
return TimesView;
}(_DaysView2["default"]);
TimesView.displayName = 'TimesView';
TimesView.defaultProps = (0, _objectSpread2["default"])({
datetimeSide: false
}, _DaysView2["default"].defaultProps);
TimesView.type = _enum2.FieldType.time;
(0, _tslib.__decorate)([_mobx.observable], TimesView.prototype, "currentUnit", void 0);
(0, _tslib.__decorate)([_mobx.computed], TimesView.prototype, "showHour", null);
(0, _tslib.__decorate)([_mobx.computed], TimesView.prototype, "showMinute", null);
(0, _tslib.__decorate)([_mobx.computed], TimesView.prototype, "showSecond", null);
(0, _tslib.__decorate)([_mobx.computed], TimesView.prototype, "use12Hours", null);
(0, _tslib.__decorate)([_mobx.computed], TimesView.prototype, "timeUnitQueue", null);
(0, _tslib.__decorate)([_mobx.computed], TimesView.prototype, "barStyle", null);
(0, _tslib.__decorate)([_mobx.computed], TimesView.prototype, "activeStyle", null);
(0, _tslib.__decorate)([_autobind["default"]], TimesView.prototype, "savePanel", null);
(0, _tslib.__decorate)([_autobind["default"]], TimesView.prototype, "handleDateTimeSelect", null);
(0, _tslib.__decorate)([_autobind["default"]], TimesView.prototype, "handleWheel", null);
(0, _tslib.__decorate)([_autobind["default"]], TimesView.prototype, "renderCell", null);
(0, _tslib.__decorate)([_mobx.action], TimesView.prototype, "changeUnit", null);
TimesView = (0, _tslib.__decorate)([_mobxReact.observer], TimesView);
var _default = TimesView;
exports["default"] = _default;
//# sourceMappingURL=TimesView.js.map