amis
Version:
一种MIS页面生成工具
118 lines (117 loc) • 6.89 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var react_1 = tslib_1.__importDefault(require("react"));
var factory_1 = require("../factory");
var helper_1 = require("../utils/helper");
var react_dom_1 = require("react-dom");
var resize_sensor_1 = require("../utils/resize-sensor");
var Panel = /** @class */ (function (_super) {
tslib_1.__extends(Panel, _super);
function Panel() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.affixDom = react_1.default.createRef();
_this.footerDom = react_1.default.createRef();
return _this;
}
Panel.prototype.componentDidMount = function () {
var dom = react_dom_1.findDOMNode(this);
var parent = dom ? helper_1.getScrollParent(dom) : null;
if (!parent || parent === document.body) {
parent = window;
}
this.parentNode = parent;
parent.addEventListener('scroll', this.affixDetect);
this.unSensor = resize_sensor_1.resizeSensor(dom, this.affixDetect);
this.affixDetect();
};
Panel.prototype.componentWillUnmount = function () {
var parent = this.parentNode;
parent && parent.removeEventListener('scroll', this.affixDetect);
this.unSensor && this.unSensor();
};
Panel.prototype.affixDetect = function () {
if (!this.props.affixFooter || !this.affixDom.current || !this.footerDom.current) {
return;
}
var affixDom = this.affixDom.current;
var footerDom = this.footerDom.current;
var affixed = false;
footerDom.offsetWidth && (affixDom.style.cssText = "width: " + footerDom.offsetWidth + "px;");
if (this.props.affixFooter === 'always') {
affixed = true;
footerDom.classList.add('invisible2');
}
else {
var clip = footerDom.getBoundingClientRect();
var clientHeight = window.innerHeight;
affixed = clip.top > clientHeight;
}
affixed ? affixDom.classList.add('in') : affixDom.classList.remove('in');
};
Panel.prototype.renderBody = function () {
var _a = this.props, type = _a.type, className = _a.className, data = _a.data, header = _a.header, body = _a.body, render = _a.render, bodyClassName = _a.bodyClassName, headerClassName = _a.headerClassName, actionsClassName = _a.actionsClassName, footerClassName = _a.footerClassName, children = _a.children, title = _a.title, actions = _a.actions, footer = _a.footer, ns = _a.classPrefix, rest = tslib_1.__rest(_a, ["type", "className", "data", "header", "body", "render", "bodyClassName", "headerClassName", "actionsClassName", "footerClassName", "children", "title", "actions", "footer", "classPrefix"]);
var subProps = tslib_1.__assign({ data: data }, rest);
return children ? (react_1.default.createElement("div", { className: bodyClassName || ns + "Panel-body" }, typeof children === 'function' ? children(this.props) : children)) : body ? (react_1.default.createElement("div", { className: bodyClassName || ns + "Panel-body" }, render('body', body, subProps))) : null;
};
Panel.prototype.renderActions = function () {
var _a = this.props, actions = _a.actions, render = _a.render;
if (Array.isArray(actions) && actions.length) {
return actions.map(function (action, key) {
return render('action', action, {
type: action.type || 'button',
key: key
});
});
}
return null;
};
Panel.prototype.render = function () {
var _a = this.props, type = _a.type, className = _a.className, data = _a.data, header = _a.header, body = _a.body, render = _a.render, bodyClassName = _a.bodyClassName, headerClassName = _a.headerClassName, actionsClassName = _a.actionsClassName, footerClassName = _a.footerClassName, children = _a.children, title = _a.title, footer = _a.footer, affixFooter = _a.affixFooter, ns = _a.classPrefix, cx = _a.classnames, rest = tslib_1.__rest(_a, ["type", "className", "data", "header", "body", "render", "bodyClassName", "headerClassName", "actionsClassName", "footerClassName", "children", "title", "footer", "affixFooter", "classPrefix", "classnames"]);
var subProps = tslib_1.__assign({ data: data }, rest);
var footerDoms = [];
var actions = this.renderActions();
actions &&
footerDoms.push(react_1.default.createElement("div", { key: "actions", className: cx("Panel-btnToolbar", actionsClassName || "Panel-footer") }, actions));
footer &&
footerDoms.push(react_1.default.createElement("div", { key: "footer", className: cx(footerClassName || "Panel-footer") }, render('footer', footer, subProps)));
var footerDom = footerDoms.length ? react_1.default.createElement("div", { ref: this.footerDom }, footerDoms) : null;
return (react_1.default.createElement("div", { className: cx("Panel", className || "Panel--default") },
header ? (react_1.default.createElement("div", { className: cx(headerClassName || "Panel-heading") }, render('header', header, subProps))) : title ? (react_1.default.createElement("div", { className: cx(headerClassName || "Panel-heading") },
react_1.default.createElement("h3", { className: cx("Panel-title") }, render('title', title, subProps)))) : null,
this.renderBody(),
footerDom,
affixFooter && footerDoms.length ? (react_1.default.createElement("div", { ref: this.affixDom, className: cx('Panel-fixedBottom') }, footerDoms)) : null));
};
Panel.propsList = ['headerClassName', 'footerClassName', 'actionsClassName', 'bodyClassName'];
Panel.defaultProps = {
// className: 'Panel--default',
// headerClassName: 'Panel-heading',
// footerClassName: 'Panel-footer bg-light lter Wrapper',
// actionsClassName: 'Panel-footer',
// bodyClassName: 'Panel-body'
};
tslib_1.__decorate([
helper_1.autobind,
tslib_1.__metadata("design:type", Function),
tslib_1.__metadata("design:paramtypes", []),
tslib_1.__metadata("design:returntype", void 0)
], Panel.prototype, "affixDetect", null);
return Panel;
}(react_1.default.Component));
exports.default = Panel;
var PanelRenderer = /** @class */ (function (_super) {
tslib_1.__extends(PanelRenderer, _super);
function PanelRenderer() {
return _super !== null && _super.apply(this, arguments) || this;
}
PanelRenderer = tslib_1.__decorate([
factory_1.Renderer({
test: /(^|\/)panel$/,
name: 'panel'
})
], PanelRenderer);
return PanelRenderer;
}(Panel));
exports.PanelRenderer = PanelRenderer;
//# sourceMappingURL=./renderers/Panel.js.map