fastlion-amis
Version:
一种MIS页面生成工具
344 lines (343 loc) • 23.5 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ListItemRenderer = exports.LionListRenderer = exports.LionList = void 0;
var tslib_1 = require("tslib");
var react_1 = (0, tslib_1.__importDefault)(require("react"));
var factory_1 = require("../../../factory");
var List_1 = tslib_1.__importStar(require("../../../renderers/List"));
var list_1 = require("../../../store/list");
var react_dom_1 = require("react-dom");
var offset_1 = (0, tslib_1.__importDefault)(require("../../../utils/offset"));
var dom_1 = require("../../../utils/dom");
var Button_1 = (0, tslib_1.__importDefault)(require("../../../components/Button"));
var Checkbox_1 = (0, tslib_1.__importDefault)(require("../../../components/Checkbox"));
require("./index.css");
var InfinteSroll_1 = (0, tslib_1.__importDefault)(require("../components/InfinteSroll"));
var helper_1 = require("../../../utils/helper");
var tpl_1 = require("../../../utils/tpl");
var tpl_builtin_1 = require("../../../utils/tpl-builtin");
var errImg = 'data:image/png;base64,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';
var LionList = /** @class */ (function (_super) {
(0, tslib_1.__extends)(LionList, _super);
function LionList(props) {
var _this = _super.call(this, props) || this;
_this.state = {
morePopVisible: false
};
_this.pullUpRefresh = function (e) {
var target = e.target;
var scrollHeight = target === null || target === void 0 ? void 0 : target.scrollHeight;
var scrollTop = target === null || target === void 0 ? void 0 : target.scrollTop;
var clientHeight = target === null || target === void 0 ? void 0 : target.clientHeight;
if (Math.ceil(scrollTop + clientHeight) >= scrollHeight && !_this.xhrTimer) {
_this.xhrTimer = setTimeout(function () { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () {
var res, _a;
return (0, tslib_1.__generator)(this, function (_b) {
switch (_b.label) {
case 0:
clearTimeout(this.xhrTimer);
this.xhrTimer = null;
_a = this.props.onPullUpRequest;
if (!_a) return [3 /*break*/, 2];
return [4 /*yield*/, this.props.onPullUpRequest({})];
case 1:
_a = (_b.sent());
_b.label = 2;
case 2:
res = _a;
return [2 /*return*/];
}
});
}); }, 100);
}
};
// 移动端默认隐藏勾选框
if (_this.getMobileUI() && props.hideCheckToggler === void 0) {
props.store.update({ hideCheckToggler: true });
}
return _this;
}
LionList.prototype.componentDidMount = function () {
this.calcAutoFillHeight();
};
LionList.prototype.calcAutoFillHeight = function () {
var _a = this.props, _b = _a.autoFillHeight, autoFillHeight = _b === void 0 ? true : _b, footerToolbar = _a.footerToolbar, ns = _a.classPrefix;
if (!autoFillHeight) {
return;
}
var dom = (0, react_dom_1.findDOMNode)(this);
var top = (0, offset_1.default)(dom).top;
var viewportHeight = window.innerHeight;
var allParentPaddingButtom = 0;
var parentNode = dom.parentElement;
while (parentNode) {
var paddingButtom = (0, dom_1.getStyleNumber)(parentNode, 'padding-bottom');
var borderBottom = (0, dom_1.getStyleNumber)(parentNode, 'border-bottom-width');
allParentPaddingButtom =
allParentPaddingButtom + paddingButtom + borderBottom;
parentNode = parentNode.parentElement;
}
var n = viewportHeight - top - allParentPaddingButtom;
dom.style.height = n + 'px';
};
LionList.prototype.getMobileUI = function () {
return (0, helper_1.isMobile)() && this.props.useMobileUI;
};
LionList.prototype.renderHeader = function () {
var _a = this.props, header = _a.header, headerClassName = _a.headerClassName, headerToolbar = _a.headerToolbar, headerToolbarRender = _a.headerToolbarRender, render = _a.render, showHeader = _a.showHeader, store = _a.store, cx = _a.classnames;
if (showHeader === false) {
return null;
}
var child = headerToolbarRender
? headerToolbarRender((0, tslib_1.__assign)((0, tslib_1.__assign)({}, this.props), { selectedItems: store.selectedItems.map(function (item) { return item.data; }), items: store.items.map(function (item) { return item.data; }), unSelectedItems: store.unSelectedItems.map(function (item) { return item.data; }) }), this.renderToolbar)
: null;
var actions = this.renderActions('header');
var toolbarNode = actions || child ? (react_1.default.createElement("div", { className: cx('List-toolbar', headerClassName), key: "header-toolbar" },
actions,
child)) : null;
var headerNode = header && (!Array.isArray(header) || header.length) ? (react_1.default.createElement("div", { className: cx('List-header', headerClassName), key: "header" }, render('header', header))) : null;
return headerNode && toolbarNode
? [headerNode, toolbarNode]
: headerNode || toolbarNode || null;
};
LionList.prototype.renderFooter = function () {
var _a = this.props, footer = _a.footer, footerClassName = _a.footerClassName, footerToolbar = _a.footerToolbar, headerToolbar = _a.headerToolbar, footerToolbarRender = _a.footerToolbarRender, render = _a.render, showFooter = _a.showFooter, store = _a.store, cx = _a.classnames;
if (showFooter === false) {
return null;
}
var _footer = footerToolbar || [];
if (this.getMobileUI()) {
// 勾选批量状态时
if (!store.hideCheckToggler) {
_footer = ["bulkActions"];
}
else {
if (headerToolbar) {
// 移动端将所有操作统一放在在底部
_footer = _footer.concat(headerToolbar);
}
// 非勾选状态补渲染不批量操作
_footer = _footer.filter(function (item) {
var type = item.type || item;
return !['bulk-actions', 'bulkActions'].includes(type);
});
}
}
var child = footerToolbarRender
? footerToolbarRender((0, tslib_1.__assign)((0, tslib_1.__assign)({}, this.props), { selectedItems: store.selectedItems.map(function (item) { return item.data; }), items: store.items.map(function (item) { return item.data; }), unSelectedItems: store.unSelectedItems.map(function (item) { return item.data; }) }), this.renderToolbar,
// PC端始终显示foottoolbar, 移动端勾选状态显示 批量
_footer)
: null;
var actions = this.renderActions('footer');
var toolbarNode = actions || child ? (react_1.default.createElement("div", { className: cx('List-toolbar', 'List-footer', footerClassName), key: "footer-toolbar" },
actions,
child)) : null;
var footerNode = footer && (!Array.isArray(footer) || footer.length) ? (react_1.default.createElement("div", { className: cx('List-footer', footerClassName), key: "footer" }, render('footer', footer))) : null;
return footerNode && toolbarNode
? [toolbarNode, footerNode]
: footerNode || toolbarNode || null;
};
LionList.prototype.renderCheckAll = function () {
var _a = this.props, store = _a.store, multiple = _a.multiple, selectable = _a.selectable, cx = _a.classnames, ns = _a.classPrefix, __ = _a.translate;
if (!store.selectable ||
!multiple ||
!selectable ||
store.dragging ||
!store.items.length) {
return null;
}
return (this.getMobileUI() ? react_1.default.createElement("div", { key: "checkall", className: cx('Mobile-checkall') },
react_1.default.createElement(Checkbox_1.default, { classPrefix: ns, type: multiple ? 'checkbox' : 'radio', checked: store.allChecked, onChange: this.handleCheckAll, inline: true }),
react_1.default.createElement("span", null, __('Select.checkAll'))) :
react_1.default.createElement(Button_1.default, { key: "checkall",
// tooltip="切换全选"
onClick: this.handleCheckAll, size: "sm", level: store.allChecked ? 'info' : 'default' }, __('Select.checkAll')));
};
LionList.prototype.renderActions = function (region) {
var _this = this;
var _a = this.props, actions = _a.actions, render = _a.render, store = _a.store, multiple = _a.multiple, selectable = _a.selectable, env = _a.env, ns = _a.classPrefix, cx = _a.classnames;
var btn;
actions = Array.isArray(actions) ? actions.concat() : [];
if (!~this.renderedToolbars.indexOf('check-all') &&
!store.hideCheckToggler &&
this.getMobileUI() &&
(btn = this.renderCheckAll())) {
actions.unshift({
type: 'button',
children: btn
});
}
return Array.isArray(actions) && actions.length ? (react_1.default.createElement("div", { className: cx('List-actions') }, actions.map(function (action, key) {
return render("action/" + key, (0, tslib_1.__assign)({ type: 'button' }, action), {
onAction: _this.handleAction,
key: key,
btnDisabled: store.dragging
});
}))) : null;
};
LionList.prototype.renderHeaderContent = function () {
var _a = this.props, render = _a.render, cx = _a.classnames, __ = _a.translate, getModalContainer = _a.env.getModalContainer, filterRender = _a.filterRender, store = _a.store;
if (this.getMobileUI()) {
{ /* 搜索 */ }
var filterNode = filterRender && filterRender();
{ /* 批量 */ }
var checkAll = !~this.renderedToolbars.indexOf('check-all') && this.renderCheckAll() ?
react_1.default.createElement("span", { className: cx('Mobile-batch-manage', { 'is-active': !store.hideCheckToggler }), onClick: function (e) {
e.preventDefault();
store.toggableHideCheck();
} }, store.hideCheckToggler ? react_1.default.createElement("i", { className: 'fa fa-tasks batch-manage-icon' }) : __('Wizard.finish')) : null;
return filterNode || checkAll ? (react_1.default.createElement("div", { className: cx('Mobile-header-toolbar-wrapper') },
filterNode,
checkAll)) : null;
}
var heading = this.renderHeading();
var header = this.renderHeader();
return react_1.default.createElement(react_1.default.Fragment, null,
header,
heading);
};
LionList.prototype.render = function () {
var _a;
var _this = this;
var _b = this.props, className = _b.className, itemClassName = _b.itemClassName, store = _b.store, render = _b.render, multiple = _b.multiple, listItem = _b.listItem, onAction = _b.onAction, checkOnItemClick = _b.checkOnItemClick, itemAction = _b.itemAction, cx = _b.classnames, size = _b.size, __ = _b.translate, onLoadMore = _b.onLoadMore, loadHasMore = _b.loadHasMore, infinteLoad = _b.infinteLoad;
this.renderedToolbars = [];
var header = this.renderHeaderContent();
var footer = this.renderFooter();
return (react_1.default.createElement("div", { className: cx('List', 'LionList', className, (_a = {},
_a["List--" + size] = size,
_a['List--unsaved'] = !!store.modified || !!store.moved,
_a['is-mobile'] = this.getMobileUI(),
_a)), ref: this.bodyRef },
header,
react_1.default.createElement("div", { className: cx('List-content', {
'hasHeader': header,
'hasFooter': footer,
}) },
store.items.length ? (react_1.default.createElement("div", { className: cx('List-items') }, store.items.map(function (item, index) {
return render("" + index, (0, tslib_1.__assign)({ type: 'lion-list-item' }, listItem), {
key: item.index,
className: cx(itemClassName, {
'is-checked': item.checked,
'is-modified': item.modified,
'is-moved': item.moved
}),
selectable: store.selectable,
checkable: item.checkable,
multiple: multiple,
item: item,
itemIndex: item.index,
hideCheckToggler: store.hideCheckToggler,
checkOnItemClick: checkOnItemClick,
itemAction: itemAction,
selected: item.checked,
onCheck: _this.handleCheck,
dragging: store.dragging,
onAction: onAction,
data: item.locals,
onQuickChange: store.dragging ? null : _this.handleQuickChange,
popOverContainer: _this.getPopOverContainer
});
}))) : null,
infinteLoad && react_1.default.createElement(InfinteSroll_1.default, { loadMore: onLoadMore, hasMore: loadHasMore })),
footer));
};
LionList.defaultProps = {
hideCheckToggler: (0, helper_1.isMobile)()
};
return LionList;
}(List_1.default));
exports.LionList = LionList;
var LionListRenderer = /** @class */ (function (_super) {
(0, tslib_1.__extends)(LionListRenderer, _super);
function LionListRenderer() {
return _super !== null && _super.apply(this, arguments) || this;
}
LionListRenderer = (0, tslib_1.__decorate)([
(0, factory_1.Renderer)({
type: 'lion-list',
storeType: list_1.ListStore.name
})
], LionListRenderer);
return LionListRenderer;
}(LionList));
exports.LionListRenderer = LionListRenderer;
var ListItemRenderer = /** @class */ (function (_super) {
(0, tslib_1.__extends)(ListItemRenderer, _super);
function ListItemRenderer(props) {
return _super.call(this, props) || this;
}
ListItemRenderer.prototype.getValue = function (name, data) {
var rest = [];
for (var _i = 2; _i < arguments.length; _i++) {
rest[_i - 2] = arguments[_i];
}
return (0, tpl_builtin_1.isPureVariable)(name) ? tpl_1.filter.apply(void 0, (0, tslib_1.__spreadArray)([name, data], rest, false)) : data[name];
};
ListItemRenderer.prototype.render = function () {
var _this = this;
var _a, _b;
var _c = this.props, className = _c.className, data = _c.data, avatar = _c.avatar, title = _c.title, titleClassName = _c.titleClassName, subTitle = _c.subTitle, desc = _c.desc, avatarClassName = _c.avatarClassName, checkOnItemClick = _c.checkOnItemClick, render = _c.render, checkable = _c.checkable, cx = _c.classnames, actionsPosition = _c.actionsPosition, itemAction = _c.itemAction, $schema = _c.$schema, env = _c.env,
// Jay
footable = _c.footable, footBody = _c.footBody;
var avaterImg = this.getValue(avatar, data, '| raw');
if (avaterImg) {
var baseUrl = ((_b = (_a = env === null || env === void 0 ? void 0 : env.axiosInstance) === null || _a === void 0 ? void 0 : _a.defaults) === null || _b === void 0 ? void 0 : _b.baseURL) || (env === null || env === void 0 ? void 0 : env.ajaxApi) || '';
avaterImg = baseUrl + avaterImg;
}
return (
// Jay
react_1.default.createElement("div", { className: cx('ListItem-wapper') },
react_1.default.createElement("div", { className: cx("ListItem ListItem--actions-at-" + (actionsPosition || 'right'), {
'ListItem--hasItemAction': itemAction
}, className,
// Jay
typeof (footable) === 'object' && footable.expand === 'all' && 'expand'),
// Jay
onTouchStart: function () {
footable && (_this.touchStartTime = +new Date());
},
// 这里不能用onTouchEnd,否则会有一些bug
onClick: function (e) {
if (footable && (+new Date() - _this.touchStartTime < 300)) {
if (/expand/.test(e.currentTarget.className)) {
e.currentTarget.classList.remove('expand');
}
else {
e.currentTarget.classList.add('expand');
}
}
((checkOnItemClick && checkable) || itemAction)
&& _this.handleClick(e);
} },
this.renderLeft(),
$schema.avatar ? (react_1.default.createElement("span", { className: cx('ListItem-avatar', avatarClassName) },
react_1.default.createElement("img", { src: avaterImg || errImg, alt: "..." }))) : null,
react_1.default.createElement("div", { className: cx('ListItem-content') },
title ? (react_1.default.createElement("p", { className: cx('ListItem-title', titleClassName) }, this.getValue(title, data))) : null,
subTitle ? (react_1.default.createElement("div", null,
react_1.default.createElement("small", { className: cx('ListItem-subtitle') }, this.getValue(subTitle, data)))) : null,
desc ? react_1.default.createElement("small", { className: cx('ListItem-subtitle') }, this.getValue(desc, data)) : null,
this.renderBody()),
this.renderRight()),
footable && (footBody === null || footBody === void 0 ? void 0 : footBody.length) &&
react_1.default.createElement("div", { className: cx('ListItem-footable', 'flex-wrap') }, footBody === null || footBody === void 0 ? void 0 : footBody.map(function (column, index) {
return react_1.default.createElement("div", { key: index, className: 'footItem flex items-center' },
react_1.default.createElement("span", { className: "label" },
column.label,
" :"),
react_1.default.createElement("span", { className: "value" }, column.type ? render("field", column, { key: index, data: data }) : (data[column.name] || '-')));
}))));
};
var _a;
ListItemRenderer.propsList = (0, tslib_1.__spreadArray)(['multiple'], List_1.ListItem.propsList, true);
ListItemRenderer = (0, tslib_1.__decorate)([
(0, factory_1.Renderer)({
test: /(^|\/)(?:lion-list|lion-list-group)\/(?:.*\/)?lion-list-item$/,
name: 'lion-list-item'
}),
(0, tslib_1.__metadata)("design:paramtypes", [typeof (_a = typeof List_1.ListItemProps !== "undefined" && List_1.ListItemProps) === "function" ? _a : Object])
], ListItemRenderer);
return ListItemRenderer;
}(List_1.ListItem));
exports.ListItemRenderer = ListItemRenderer;
//# sourceMappingURL=./renderers/Lion/List/index.js.map