fastlion-amis
Version:
一种MIS页面生成工具
160 lines (159 loc) • 11.3 kB
JavaScript
"use strict";
/**
* @file PopOver
* @description
* @author fex
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.PopOver = void 0;
var tslib_1 = require("tslib");
var react_1 = (0, tslib_1.__importDefault)(require("react"));
var react_dom_1 = require("react-dom");
var theme_1 = require("../theme");
var helper_1 = require("../utils/helper");
var shell_1 = require("../utils/shell");
var PopOver = /** @class */ (function (_super) {
(0, tslib_1.__extends)(PopOver, _super);
function PopOver() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.state = {
xOffset: 0,
yOffset: 0
};
_this.wrapperRef = react_1.default.createRef();
return _this;
}
PopOver.prototype.componentDidMount = function () {
this.mayUpdateOffset();
var dom = (0, react_dom_1.findDOMNode)(this);
this.parent = dom.parentNode;
this.parent.classList.add('has-popover');
if (this.wrapperRef && this.wrapperRef.current) {
// https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/addEventListener#使用_passive_改善的滚屏性能
this.wrapperRef.current.addEventListener('touchmove', helper_1.preventDefault, {
passive: false,
capture: false
});
}
};
PopOver.prototype.componentDidUpdate = function () {
this.mayUpdateOffset();
};
PopOver.prototype.componentWillUnmount = function () {
this.parent && this.parent.classList.remove('has-popover');
if (this.wrapperRef && this.wrapperRef.current) {
this.wrapperRef.current.removeEventListener('touchmove', helper_1.preventDefault);
}
};
PopOver.prototype.mayUpdateOffset = function () {
var _a, _b, _c, _d;
var offset;
var getOffset = this.props.offset;
// 屏幕的宽度
var bodyClient = document.documentElement.clientWidth;
// 子元素的宽度
var childWidth = (_a = this.wrapperRef.current) === null || _a === void 0 ? void 0 : _a.offsetWidth;
// 元素左边到浏览器左边的间距
var parentLeft = (_b = this.parent) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect().left;
// 元素右边到浏览器左边的间距
var parentRight = (_c = this.parent) === null || _c === void 0 ? void 0 : _c.getBoundingClientRect().right;
// 判断是否超出屏幕宽度
var whether = (childWidth + parentLeft) > bodyClient;
var moveleft = parentRight - parentLeft - childWidth;
if ((_d = this.parent) === null || _d === void 0 ? void 0 : _d.className.includes("Modal-content")) {
if (this.props.positionLeft > 0) {
whether = (childWidth + this.props.positionLeft + parentLeft) > parentRight;
moveleft = parentRight - childWidth - this.props.positionLeft - parentLeft;
}
}
if (getOffset && typeof getOffset === 'function') {
var _e = this.props, placement = _e.placement, y = _e.positionTop, x = _e.positionLeft;
offset = getOffset((0, react_dom_1.findDOMNode)(this).getBoundingClientRect(), {
x: x,
y: y,
placement: placement
});
}
else {
offset = getOffset;
}
this.setState({
xOffset: whether ? moveleft : offset && offset.x ? offset.x : 0,
yOffset: offset && offset.y ? offset.y : 0
});
};
PopOver.prototype.render = function () {
var _a, _b, _c, _d, _e;
var _f = this.props, placement = _f.placement, activePlacement = _f.activePlacement, positionTop = _f.positionTop, positionLeft = _f.positionLeft, arrowOffsetLeft = _f.arrowOffsetLeft, arrowOffsetTop = _f.arrowOffsetTop, style = _f.style, children = _f.children, offset = _f.offset, overlay = _f.overlay, onHide = _f.onHide, ns = _f.classPrefix, cx = _f.classnames, className = _f.className, rest = (0, tslib_1.__rest)(_f, ["placement", "activePlacement", "positionTop", "positionLeft", "arrowOffsetLeft", "arrowOffsetTop", "style", "children", "offset", "overlay", "onHide", "classPrefix", "classnames", "className"]);
var _g = this.state, xOffset = _g.xOffset, yOffset = _g.yOffset;
var outerStyle = (0, tslib_1.__assign)({ display: 'block' }, style);
if (this.wrapperRef.current) {
var clientData = this.wrapperRef.current.getBoundingClientRect();
var formControlData = (_a = this.wrapperRef.current.closest("." + ns + "Form-control")) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
var isOverSize = document.documentElement.clientHeight - clientData.top <= clientData.height + 5;
if (shell_1.Shell.hasShell()) {
if (this.wrapperRef.current.closest(".ant-modal-body") || this.wrapperRef.current.closest("." + ns + "Modal-body")) {
if ((_b = this.props.className) === null || _b === void 0 ? void 0 : _b.includes('batchEidtPopOver')) {
outerStyle = (0, tslib_1.__assign)((0, tslib_1.__assign)({ display: 'block' }, style), { position: 'absolute', top: positionTop + yOffset + (positionTop ? positionTop >= 0 ? 5 : -5 : 0), left: (positionLeft < 0 ? xOffset : positionLeft + xOffset) });
}
else {
outerStyle = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, outerStyle), { position: 'fixed', top: isOverSize ? (formControlData === null || formControlData === void 0 ? void 0 : formControlData.top) - clientData.height : (formControlData === null || formControlData === void 0 ? void 0 : formControlData.top) + (formControlData === null || formControlData === void 0 ? void 0 : formControlData.height), left: formControlData === null || formControlData === void 0 ? void 0 : formControlData.left });
}
}
else {
if (this.wrapperRef.current.closest("." + ns + "Form--quickEdit")) {
outerStyle = (0, tslib_1.__assign)((0, tslib_1.__assign)({ display: 'block' }, style), { top: positionTop + yOffset + (positionTop ? positionTop >= 0 ? 5 : -5 : 0), left: (positionLeft < 0 ? xOffset : positionLeft + xOffset) });
}
else {
outerStyle = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, outerStyle), { position: 'fixed', top: (formControlData === null || formControlData === void 0 ? void 0 : formControlData.top) + (formControlData === null || formControlData === void 0 ? void 0 : formControlData.height), left: formControlData === null || formControlData === void 0 ? void 0 : formControlData.left });
}
}
}
else {
if (this.wrapperRef.current.closest(".ant-modal-body")) {
outerStyle = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, outerStyle), { position: 'fixed', top: isOverSize ? (formControlData === null || formControlData === void 0 ? void 0 : formControlData.top) - clientData.height : (formControlData === null || formControlData === void 0 ? void 0 : formControlData.top) + (formControlData === null || formControlData === void 0 ? void 0 : formControlData.height), left: formControlData === null || formControlData === void 0 ? void 0 : formControlData.left });
}
else if (this.wrapperRef.current.closest("." + ns + "Modal-body")) {
if ((_c = this.props.className) === null || _c === void 0 ? void 0 : _c.includes('batchEidtPopOver')) {
outerStyle = (0, tslib_1.__assign)((0, tslib_1.__assign)({ display: 'block' }, style), { position: 'absolute', top: positionTop + yOffset + (positionTop ? positionTop >= 0 ? 5 : -5 : 0), left: (positionLeft < 0 ? xOffset : positionLeft + xOffset) });
}
else {
var modalData = (_d = this.wrapperRef.current.closest("." + ns + "Modal")) === null || _d === void 0 ? void 0 : _d.getBoundingClientRect();
outerStyle = (0, tslib_1.__assign)((0, tslib_1.__assign)({ display: 'block' }, style), { position: 'fixed', top: isOverSize ? (formControlData === null || formControlData === void 0 ? void 0 : formControlData.top) - clientData.height - (modalData === null || modalData === void 0 ? void 0 : modalData.top) - 1 : (formControlData === null || formControlData === void 0 ? void 0 : formControlData.top) + (formControlData === null || formControlData === void 0 ? void 0 : formControlData.height) - (modalData === null || modalData === void 0 ? void 0 : modalData.top), left: (formControlData === null || formControlData === void 0 ? void 0 : formControlData.left) - ((_e = this.wrapperRef.current.closest("." + ns + "Modal-body")) === null || _e === void 0 ? void 0 : _e.getBoundingClientRect().left) });
}
}
else {
if (this.wrapperRef.current.closest("." + ns + "Form--quickEdit")) {
outerStyle = (0, tslib_1.__assign)((0, tslib_1.__assign)({ display: 'block' }, style), { top: positionTop + yOffset + (positionTop ? positionTop >= 0 ? 5 : -5 : 0), left: (positionLeft < 0 ? xOffset : positionLeft + xOffset) });
}
else {
outerStyle = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, outerStyle), { position: 'fixed', top: (formControlData === null || formControlData === void 0 ? void 0 : formControlData.top) + (formControlData === null || formControlData === void 0 ? void 0 : formControlData.height), left: formControlData === null || formControlData === void 0 ? void 0 : formControlData.left });
}
}
}
}
else {
outerStyle = (0, tslib_1.__assign)((0, tslib_1.__assign)({ display: 'block' }, style), {
// Jay 增加间隙,优化样式
// top: (positionTop as number) + yOffset,
// left: (positionLeft as number) + xOffset,
top: positionTop + yOffset + (positionTop ? positionTop >= 0 ? 5 : -5 : 0), left: (positionLeft < 0 ? xOffset : positionLeft + xOffset) });
}
return (react_1.default.createElement("div", (0, tslib_1.__assign)({ ref: this.wrapperRef, className: cx(ns + "PopOver", className, ns + "PopOver--" + (0, helper_1.camel)(activePlacement)), style: outerStyle }, rest),
overlay ? (react_1.default.createElement("div", { className: ns + "PopOver-overlay", onClick: onHide })) : null,
children));
};
PopOver.defaultProps = {
className: '',
offset: {
x: 0,
y: 0
},
overlay: false,
placement: 'auto'
};
return PopOver;
}(react_1.default.PureComponent));
exports.PopOver = PopOver;
exports.default = (0, theme_1.themeable)(PopOver);
//# sourceMappingURL=./components/PopOver.js.map