acud
Version:
acg react 组件库
229 lines (228 loc) • 6.47 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.PickerModeMap = void 0;
exports.addGlobalMouseDownEvent = addGlobalMouseDownEvent;
exports.createKeyDownHandler = createKeyDownHandler;
exports.elementsContains = elementsContains;
exports.getDefaultFormat = getDefaultFormat;
exports.getInputSize = getInputSize;
exports.getTargetFromEvent = getTargetFromEvent;
exports.scrollTo = scrollTo;
exports.waitElementReady = waitElementReady;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _KeyCode = _interopRequireDefault(require("rc-util/lib/KeyCode"));
var _raf = _interopRequireDefault(require("rc-util/lib/raf"));
var _isVisible = _interopRequireDefault(require("rc-util/lib/Dom/isVisible"));
var scrollIds = new Map();
/** Trigger when element is visible in view */
function waitElementReady(element, callback) {
var id;
function tryOrNextFrame() {
if ((0, _isVisible["default"])(element)) {
callback();
} else {
id = (0, _raf["default"])(function () {
tryOrNextFrame();
});
}
}
tryOrNextFrame();
return function () {
_raf["default"].cancel(id);
};
}
/* eslint-disable no-param-reassign */
function scrollTo(element, to, duration) {
if (scrollIds.get(element)) {
cancelAnimationFrame(scrollIds.get(element));
}
// jump to target if duration zero
if (duration <= 0) {
scrollIds.set(element, requestAnimationFrame(function () {
element.scrollTop = to;
}));
return;
}
var difference = to - element.scrollTop;
var perTick = difference / duration * 10;
scrollIds.set(element, requestAnimationFrame(function () {
element.scrollTop += perTick;
if (element.scrollTop !== to) {
scrollTo(element, to, duration - 10);
}
}));
}
function createKeyDownHandler(event, _ref) {
var onLeftRight = _ref.onLeftRight,
onCtrlLeftRight = _ref.onCtrlLeftRight,
onUpDown = _ref.onUpDown,
onPageUpDown = _ref.onPageUpDown,
onEnter = _ref.onEnter;
var which = event.which,
ctrlKey = event.ctrlKey,
metaKey = event.metaKey;
switch (which) {
case _KeyCode["default"].LEFT:
if (ctrlKey || metaKey) {
if (onCtrlLeftRight) {
onCtrlLeftRight(-1);
return true;
}
} else if (onLeftRight) {
onLeftRight(-1);
return true;
}
/* istanbul ignore next */
break;
case _KeyCode["default"].RIGHT:
if (ctrlKey || metaKey) {
if (onCtrlLeftRight) {
onCtrlLeftRight(1);
return true;
}
} else if (onLeftRight) {
onLeftRight(1);
return true;
}
/* istanbul ignore next */
break;
case _KeyCode["default"].UP:
if (onUpDown) {
onUpDown(-1);
return true;
}
/* istanbul ignore next */
break;
case _KeyCode["default"].DOWN:
if (onUpDown) {
onUpDown(1);
return true;
}
/* istanbul ignore next */
break;
case _KeyCode["default"].PAGE_UP:
if (onPageUpDown) {
onPageUpDown(-1);
return true;
}
/* istanbul ignore next */
break;
case _KeyCode["default"].PAGE_DOWN:
if (onPageUpDown) {
onPageUpDown(1);
return true;
}
/* istanbul ignore next */
break;
case _KeyCode["default"].ENTER:
if (onEnter) {
onEnter();
return true;
}
/* istanbul ignore next */
break;
}
return false;
}
// ===================== Format =====================
function getDefaultFormat(format, picker, showTime, use12Hours) {
var mergedFormat = format;
if (!mergedFormat) {
switch (picker) {
case "time":
mergedFormat = use12Hours ? "hh:mm:ss a" : "HH:mm:ss";
break;
case "week":
mergedFormat = "gggg-wo";
break;
case "month":
mergedFormat = "YYYY-MM";
break;
case "quarter":
mergedFormat = "YYYY-[Q]Q";
break;
case "year":
mergedFormat = "YYYY";
break;
default:
mergedFormat = showTime ? "YYYY-MM-DD HH:mm:ss" : "YYYY-MM-DD";
}
}
return mergedFormat;
}
function getInputSize(picker, format, generateConfig) {
var defaultSize = picker === "time" ? 8 : 10;
var length = typeof format === "function" ? format(generateConfig.getNow()).length : format.length;
return Math.max(defaultSize, length) + 2;
}
var globalClickFunc = null;
var clickCallbacks = new Set();
function addGlobalMouseDownEvent(callback) {
if (!globalClickFunc && typeof window !== "undefined" && window.addEventListener) {
globalClickFunc = function globalClickFunc(e) {
// Clone a new list to avoid repeat trigger events
(0, _toConsumableArray2["default"])(clickCallbacks).forEach(function (queueFunc) {
queueFunc(e);
});
};
window.addEventListener("mousedown", globalClickFunc);
}
clickCallbacks.add(callback);
return function () {
clickCallbacks["delete"](callback);
if (clickCallbacks.size === 0) {
window.removeEventListener("mousedown", globalClickFunc);
globalClickFunc = null;
}
};
}
function getTargetFromEvent(e) {
var _a;
var target = e.target;
// get target if in shadow dom
if (e.composed && target.shadowRoot) {
return ((_a = e.composedPath) === null || _a === void 0 ? void 0 : _a.call(e)[0]) || target;
}
return target;
}
// ====================== Mode ======================
var getYearNextMode = function getYearNextMode(next) {
if (next === "month" || next === "date") {
return "year";
}
return next;
};
var getMonthNextMode = function getMonthNextMode(next) {
if (next === "date") {
return "month";
}
return next;
};
var getQuarterNextMode = function getQuarterNextMode(next) {
if (next === "month" || next === "date") {
return "quarter";
}
return next;
};
var getWeekNextMode = function getWeekNextMode(next) {
if (next === "date") {
return "week";
}
return next;
};
var PickerModeMap = exports.PickerModeMap = {
year: getYearNextMode,
month: getMonthNextMode,
quarter: getQuarterNextMode,
week: getWeekNextMode,
time: null,
date: null
};
function elementsContains(elements, target) {
return elements.some(function (ele) {
return ele && ele.contains(target);
});
}