amis
Version:
一种MIS页面生成工具
699 lines (695 loc) • 35.3 kB
JavaScript
/**
* amis v6.12.0
* build time: 2025-04-03
* Copyright 2018-2025 baidu
*/
import { __extends, __assign, __awaiter, __generator, __decorate, __metadata } from 'tslib';
import React from 'react';
import { findDOMNode } from 'react-dom';
import { getPropValue, resolveVariableAndFilter, anyChanged, isPureVariable, createObject, difference, filter, filterClassNameObject, ucFirst, setThemeClassName, buildStyle, CustomStyle, getMatchedEventTargets, ScopedContext, Renderer, ListStore } from 'amis-core';
import { Icon, Button, Spinner } from 'amis-ui';
import Sortable from 'sortablejs';
import find from 'lodash/find';
var Cards = /** @class */ (function (_super) {
__extends(Cards, _super);
function Cards(props) {
var _this = _super.call(this, props) || this;
_this.handleAction = _this.handleAction.bind(_this);
_this.handleCheck = _this.handleCheck.bind(_this);
_this.handleClick = _this.handleClick.bind(_this);
_this.handleCheckAll = _this.handleCheckAll.bind(_this);
_this.handleQuickChange = _this.handleQuickChange.bind(_this);
_this.handleSave = _this.handleSave.bind(_this);
_this.handleSaveOrder = _this.handleSaveOrder.bind(_this);
_this.reset = _this.reset.bind(_this);
_this.dragTipRef = _this.dragTipRef.bind(_this);
_this.bodyRef = _this.bodyRef.bind(_this);
_this.renderToolbar = _this.renderToolbar.bind(_this);
var store = props.store, selectable = props.selectable, draggable = props.draggable, orderBy = props.orderBy, orderDir = props.orderDir, multiple = props.multiple, hideCheckToggler = props.hideCheckToggler, itemCheckableOn = props.itemCheckableOn, itemDraggableOn = props.itemDraggableOn;
store.update({
selectable: selectable,
draggable: draggable,
orderBy: orderBy,
orderDir: orderDir,
multiple: multiple,
hideCheckToggler: hideCheckToggler,
itemCheckableOn: itemCheckableOn,
itemDraggableOn: itemDraggableOn
});
Cards.syncItems(store, _this.props) && _this.syncSelected();
return _this;
}
Cards.syncItems = function (store, props, prevProps) {
var source = props.source;
var value = getPropValue(props, function (props) { return props.items; });
var items = [];
var updateItems = false;
if (Array.isArray(value) &&
(!prevProps ||
getPropValue(prevProps, function (props) { return props.items; }) !== value)) {
items = value;
updateItems = true;
}
else if (typeof source === 'string') {
var resolved = resolveVariableAndFilter(source, props.data, '| raw');
var prev = prevProps
? resolveVariableAndFilter(source, prevProps.data, '| raw')
: null;
if (prev === resolved) {
updateItems = false;
}
else {
items = Array.isArray(resolved) ? resolved : [];
updateItems = true;
}
}
updateItems && store.initItems(items, props.fullItems, props.selected);
Array.isArray(props.selected) &&
store.updateSelected(props.selected, props.valueField);
return updateItems;
};
Cards.prototype.componentDidUpdate = function (prevProps) {
var props = this.props;
var store = props.store;
if (anyChanged([
'selectable',
'draggable',
'orderBy',
'orderDir',
'multiple',
'hideCheckToggler',
'itemCheckableOn',
'itemDraggableOn'
], prevProps, props)) {
store.update({
selectable: props.selectable,
draggable: props.draggable,
orderBy: props.orderBy,
orderDir: props.orderDir,
multiple: props.multiple,
hideCheckToggler: props.hideCheckToggler,
itemCheckableOn: props.itemCheckableOn,
itemDraggableOn: props.itemDraggableOn
});
}
if (anyChanged(['source', 'value', 'items'], prevProps, props) ||
(!props.value &&
!props.items &&
(props.data !== prevProps.data ||
(typeof props.source === 'string' && isPureVariable(props.source))))) {
Cards.syncItems(store, props, prevProps) && this.syncSelected();
}
else if (prevProps.selected !== props.selected) {
store.updateSelected(props.selected || [], props.valueField);
}
};
Cards.prototype.bodyRef = function (ref) {
this.body = ref;
};
Cards.prototype.handleAction = function (e, action, ctx) {
var onAction = this.props.onAction;
// 需要支持特殊事件吗?
return onAction === null || onAction === void 0 ? void 0 : onAction(e, action, ctx);
};
Cards.prototype.handleCheck = function (item) {
item.toggle();
this.syncSelected();
var _a = this.props, store = _a.store, dispatchEvent = _a.dispatchEvent;
dispatchEvent(
//增删改查卡片模式选择表格项
'selectedChange', createObject(store.data, __assign(__assign({}, store.eventContext), { item: item.data })));
};
Cards.prototype.handleClick = function (item) {
var _a = this.props, dispatchEvent = _a.dispatchEvent, data = _a.data;
return dispatchEvent(
//增删改查卡片模式单击卡片
'rowClick', createObject(data, {
item: item.data,
index: item.index
}));
};
Cards.prototype.handleCheckAll = function () {
var store = this.props.store;
store.toggleAll();
this.syncSelected();
};
Cards.prototype.handleSelectAll = function () {
var store = this.props.store;
store.selectAll();
this.syncSelected();
};
Cards.prototype.handleClearAll = function () {
var store = this.props.store;
store.clearAll();
this.syncSelected();
};
Cards.prototype.syncSelected = function () {
var _a = this.props, store = _a.store, onSelect = _a.onSelect, dispatchEvent = _a.dispatchEvent;
var selectItems = store.selectedItems.map(function (item) { return item.data; });
var unSelectItems = store.unSelectedItems.map(function (item) { return item.data; });
dispatchEvent('selected', createObject(store.data, {
selectItems: selectItems,
unSelectItems: unSelectItems
}));
onSelect && onSelect(selectItems, unSelectItems);
};
Cards.prototype.handleQuickChange = function (item, values, saveImmediately, savePristine, options) {
item.change(values, savePristine);
var _a = this.props, onSave = _a.onSave, onItemChange = _a.onItemChange, primaryField = _a.primaryField;
if (savePristine) {
return;
}
onItemChange === null || onItemChange === void 0 ? void 0 : onItemChange(item.data, difference(item.data, item.pristine, ['id', primaryField]), item.index);
if (saveImmediately && saveImmediately.api) {
this.props.onAction(null, {
actionType: 'ajax',
api: saveImmediately.api,
reload: options === null || options === void 0 ? void 0 : options.reload
}, item.locals);
return;
}
if (!saveImmediately || !onSave) {
return;
}
onSave(item.data, difference(item.data, item.pristine, ['id', primaryField]), item.index, undefined, item.pristine, options);
};
Cards.prototype.handleSave = function () {
var _a = this.props, store = _a.store, onSave = _a.onSave, primaryField = _a.primaryField;
if (!onSave || !store.modifiedItems.length) {
return;
}
var items = store.modifiedItems.map(function (item) { return item.data; });
var itemIndexes = store.modifiedItems.map(function (item) { return item.index; });
var diff = store.modifiedItems.map(function (item) {
return difference(item.data, item.pristine, ['id', primaryField]);
});
var unModifiedItems = store.items
.filter(function (item) { return !item.modified; })
.map(function (item) { return item.data; });
onSave(items, diff, itemIndexes, unModifiedItems, store.modifiedItems.map(function (item) { return item.pristine; }));
};
Cards.prototype.handleSaveOrder = function () {
return __awaiter(this, void 0, void 0, function () {
var _a, store, onSaveOrder, data, dispatchEvent, movedItems, rendererEvent;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = this.props, store = _a.store, onSaveOrder = _a.onSaveOrder, data = _a.data, dispatchEvent = _a.dispatchEvent;
movedItems = store.movedItems.map(function (item) { return item.data; });
return [4 /*yield*/, dispatchEvent('orderChange', createObject(data, { movedItems: movedItems }))];
case 1:
rendererEvent = _b.sent();
if (rendererEvent === null || rendererEvent === void 0 ? void 0 : rendererEvent.prevented) {
return [2 /*return*/];
}
if (!onSaveOrder || !store.movedItems.length) {
return [2 /*return*/];
}
onSaveOrder(store.movedItems.map(function (item) { return item.data; }), store.items.map(function (item) { return item.data; }));
return [2 /*return*/];
}
});
});
};
Cards.prototype.reset = function () {
var store = this.props.store;
store.reset();
};
Cards.prototype.bulkUpdate = function (value, items) {
// const {store} = this.props;
// const items2 = store.items.filter(item => ~items.indexOf(item.pristine));
// items2.forEach(item => item.change(value));
var _a = this.props, store = _a.store, primaryField = _a.primaryField;
if (primaryField && value.ids) {
var ids_1 = value.ids.split(',');
var rows = store.items.filter(function (item) {
return find(ids_1, function (id) { return id && id == item.data[primaryField]; });
});
var newValue_1 = __assign(__assign({}, value), { ids: undefined });
rows.forEach(function (item) { return item.change(newValue_1); });
}
else if (Array.isArray(items)) {
var rows = store.items.filter(function (item) { return ~items.indexOf(item.pristine); });
rows.forEach(function (item) { return item.change(value); });
}
};
Cards.prototype.getSelected = function () {
var store = this.props.store;
return store.selectedItems.map(function (item) { return item.data; });
};
Cards.prototype.dragTipRef = function (ref) {
if (!this.dragTip && ref) {
this.initDragging();
}
else if (this.dragTip && !ref) {
this.destroyDragging();
}
this.dragTip = ref;
};
Cards.prototype.initDragging = function () {
if (this.sortable)
return;
var store = this.props.store;
var dom = findDOMNode(this);
var ns = this.props.classPrefix;
this.sortable = new Sortable(dom.querySelector(".".concat(ns, "Cards-body")), {
group: 'table',
animation: 150,
handle: ".".concat(ns, "Card-dragBtn"),
ghostClass: "is-dragging",
onEnd: function (e) {
// 没有移动
if (e.newIndex === e.oldIndex) {
return;
}
var parent = e.to;
if (e.oldIndex < parent.childNodes.length - 1) {
parent.insertBefore(e.item, parent.childNodes[e.oldIndex > e.newIndex ? e.oldIndex + 1 : e.oldIndex]);
}
else {
parent.appendChild(e.item);
}
store.exchange(e.oldIndex, e.newIndex);
}
});
};
Cards.prototype.destroyDragging = function () {
this.sortable && this.sortable.destroy();
this.sortable = undefined;
};
Cards.prototype.renderActions = function (region) {
var _this = this;
var _a = this.props, actions = _a.actions, render = _a.render, store = _a.store, cx = _a.classnames;
var btn;
actions = Array.isArray(actions) ? actions.concat() : [];
if (!~this.renderedToolbars.indexOf('check-all') &&
(btn = this.renderCheckAll())) {
actions.unshift({
type: 'button',
children: btn
});
}
if (region === 'header' &&
!~this.renderedToolbars.indexOf('drag-toggler') &&
(btn = this.renderDragToggler())) {
actions.unshift({
type: 'button',
children: btn
});
}
return Array.isArray(actions) && actions.length ? (React.createElement("div", { className: cx('Cards-actions') }, actions.map(function (action, key) {
return render("action/".concat(key), __assign({ type: 'button' }, action), {
onAction: _this.handleAction,
key: key,
btnDisabled: store.dragging
});
}))) : null;
};
Cards.prototype.renderHeading = function () {
var _a = this.props, title = _a.title, store = _a.store, hideQuickSaveBtn = _a.hideQuickSaveBtn, cx = _a.classnames, data = _a.data;
if (title || (store.modified && !hideQuickSaveBtn) || store.moved) {
return (React.createElement("div", { className: cx('Cards-heading') }, store.modified && !hideQuickSaveBtn ? (React.createElement("span", null, "\u5F53\u524D\u6709 ".concat(store.modified, " \u6761\u8BB0\u5F55\u4FEE\u6539\u4E86\u5185\u5BB9, \u4F46\u5E76\u6CA1\u6709\u63D0\u4EA4\u3002\u8BF7\u9009\u62E9:"),
React.createElement("button", { type: "button", className: cx('Button Button--xs Button--success m-l-sm'), onClick: this.handleSave },
React.createElement(Icon, { icon: "check", className: "icon m-r-xs" }),
"\u63D0\u4EA4"),
React.createElement("button", { type: "button", className: cx('Button Button--xs Button--danger m-l-sm'), onClick: this.reset },
React.createElement(Icon, { icon: "close", className: "icon m-r-xs" }),
"\u653E\u5F03"))) : store.moved ? (React.createElement("span", null, "\u5F53\u524D\u6709 ".concat(store.moved, " \u6761\u8BB0\u5F55\u4FEE\u6539\u4E86\u987A\u5E8F, \u4F46\u5E76\u6CA1\u6709\u63D0\u4EA4\u3002\u8BF7\u9009\u62E9:"),
React.createElement("button", { type: "button", className: cx('Button Button--xs Button--success m-l-sm'), onClick: this.handleSaveOrder },
React.createElement(Icon, { icon: "check", className: "icon m-r-xs" }),
"\u63D0\u4EA4"),
React.createElement("button", { type: "button", className: cx('Button Button--xs Button--danger m-l-sm'), onClick: this.reset },
React.createElement(Icon, { icon: "close", className: "icon m-r-xs" }),
"\u653E\u5F03"))) : title ? (filter(title, data)) : ('')));
}
return null;
};
Cards.prototype.renderHeader = function () {
var _a = this.props, header = _a.header, headerClassName = _a.headerClassName, headerToolbar = _a.headerToolbar, headerToolbarRender = _a.headerToolbarRender, showHeader = _a.showHeader, render = _a.render, store = _a.store, cx = _a.classnames, __ = _a.translate;
if (showHeader === false) {
return null;
}
var child = headerToolbarRender
? headerToolbarRender(__assign(__assign({}, this.props), store.eventContext), this.renderToolbar)
: null;
var actions = this.renderActions('header');
var toolbarNode = actions || child || store.dragging ? (React.createElement("div", { className: cx('Cards-toolbar'), key: "header-toolbar" },
actions,
child,
store.dragging ? (React.createElement("div", { className: cx('Cards-dragTip'), ref: this.dragTipRef }, __('Card.dragTip'))) : null)) : null;
var headerNode = header ? (React.createElement("div", { className: cx('Cards-header', headerClassName), key: "header" }, render('header', header))) : null;
return headerNode && toolbarNode
? [headerNode, toolbarNode]
: headerNode || toolbarNode || null;
};
Cards.prototype.renderFooter = function () {
var _a = this.props, footer = _a.footer, footerClassName = _a.footerClassName, footerToolbar = _a.footerToolbar, footerToolbarRender = _a.footerToolbarRender, render = _a.render, showFooter = _a.showFooter, store = _a.store, cx = _a.classnames, affixFooter = _a.affixFooter;
if (showFooter === false) {
return null;
}
var child = footerToolbarRender
? footerToolbarRender(__assign(__assign({}, this.props), store.eventContext), this.renderToolbar)
: null;
var actions = this.renderActions('footer');
var footerNode = footer ? (React.createElement("div", { className: cx('Cards-footer', footerClassName, affixFooter ? 'Cards-footer--affix' : ''), key: "footer" }, render('footer', footer))) : null;
var toolbarNode = actions || child ? (React.createElement("div", { className: cx('Cards-toolbar', !footerNode && affixFooter ? 'Cards-footToolbar--affix' : ''), key: "footer-toolbar" },
actions,
child)) : null;
return footerNode && toolbarNode
? [toolbarNode, footerNode]
: footerNode || toolbarNode || null;
};
Cards.prototype.renderCheckAll = function () {
var _a = this.props, store = _a.store, multiple = _a.multiple, selectable = _a.selectable, checkAll = _a.checkAll;
if (!store.selectable ||
!multiple ||
!selectable ||
store.dragging ||
!store.items.length ||
!checkAll) {
return null;
}
return (React.createElement(Button, { key: "checkall", tooltip: "\u5207\u6362\u5168\u9009", onClick: this.handleCheckAll, size: "sm", level: store.allChecked ? 'info' : 'default' }, "\u5168\u9009"));
};
Cards.prototype.renderDragToggler = function () {
var _this = this;
var _a = this.props, store = _a.store, multiple = _a.multiple, selectable = _a.selectable, popOverContainer = _a.popOverContainer, env = _a.env, __ = _a.translate, dragIcon = _a.dragIcon;
if (!store.draggable || store.items.length < 2) {
return null;
}
return (React.createElement(Button, { iconOnly: true, key: "dragging-toggle", tooltip: __('Card.toggleDrag'), tooltipContainer: popOverContainer || (env === null || env === void 0 ? void 0 : env.getModalContainer), size: "sm", active: store.dragging, onClick: function (e) {
e.preventDefault();
store.toggleDragging();
store.dragging && store.clear();
store.dragging ? _this.initDragging() : undefined;
} }, React.isValidElement(dragIcon) ? (dragIcon) : (React.createElement(Icon, { icon: "exchange", className: "icon r90" }))));
};
Cards.prototype.renderToolbar = function (toolbar, index) {
var type = toolbar.type || toolbar;
if (type === 'drag-toggler') {
this.renderedToolbars.push(type);
return this.renderDragToggler();
}
else if (type === 'check-all') {
this.renderedToolbars.push(type);
return this.renderCheckAll();
}
return;
};
// editor中重写,请勿更改前两个参数
Cards.prototype.renderCard = function (index, card, item, itemClassName, style) {
var _this = this;
var _a = this.props, render = _a.render, cx = _a.classnames, store = _a.store, multiple = _a.multiple, checkOnItemClick = _a.checkOnItemClick, hideCheckToggler = _a.hideCheckToggler;
var cardProps = {
className: cx(filterClassNameObject((card && card.className) || '', item.locals), {
'is-checked': item.checked,
'is-modified': item.modified,
'is-moved': item.moved,
'is-dragging': store.dragging
}),
item: item,
key: index,
itemIndex: item.index,
multiple: multiple,
selectable: store.selectable,
checkable: item.checkable,
draggable: item.draggable,
selected: item.checked,
dragging: store.dragging,
data: item.locals,
onAction: this.handleAction,
onCheck: this.handleCheck,
onClick: this.handleClick,
onQuickChange: store.dragging ? null : this.handleQuickChange
};
// card2属性与card有区别
if ((card === null || card === void 0 ? void 0 : card.type) === 'card2') {
cardProps = __assign(__assign({}, cardProps), { item: item.locals, onCheck: function () {
_this.handleCheck(item);
} });
}
return (React.createElement("div", { key: item.index, className: cx(itemClassName), style: style }, render("card/".concat(index), __assign({
// @ts-ignore
type: card.type || 'card', hideCheckToggler: hideCheckToggler, checkOnItemClick: checkOnItemClick }, card), cardProps)));
};
Cards.prototype.render = function () {
var _this = this;
var _a = this.props, className = _a.className, style = _a.style, store = _a.store, columnsCount = _a.columnsCount, itemClassName = _a.itemClassName, placeholder = _a.placeholder, card = _a.card, data = _a.data, render = _a.render, affixHeader = _a.affixHeader, masonryLayout = _a.masonryLayout, itemsClassName = _a.itemsClassName, cx = _a.classnames, __ = _a.translate, _b = _a.loading, loading = _b === void 0 ? false : _b, loadingConfig = _a.loadingConfig, env = _a.env, id = _a.id, wrapperCustomStyle = _a.wrapperCustomStyle, themeCss = _a.themeCss, mobileUI = _a.mobileUI;
this.renderedToolbars = []; // 用来记录哪些 toolbar 已经渲染了,已经渲染了就不重复渲染了。
var itemFinalClassName = (function () {
// 移动端且非砖石布局时不使用网格类名
if (mobileUI && !masonryLayout) {
return '';
}
// 砖石布局且设置了固定列数时使用计算的网格类名
if (masonryLayout && columnsCount) {
var colWidth = Math.round(12 / columnsCount);
return "Grid-col--xs".concat(colWidth, " Grid-col--sm").concat(colWidth, " Grid-col--md").concat(colWidth, " Grid-col--lg").concat(colWidth);
}
// 其他情况使用配置的类名或空字符串
return itemClassName || '';
})();
var header = this.renderHeader();
var heading = this.renderHeading();
var footer = this.renderFooter();
var masonryClassName = '';
if (masonryLayout) {
masonryClassName =
'Cards--masonry ' +
itemFinalClassName
.split(/\s/)
.map(function (item) {
if (/^Grid-col--(xs|sm|md|lg)(\d+)/.test(item)) {
return "Cards--masonry".concat(ucFirst(RegExp.$1)).concat(RegExp.$2);
}
return item;
})
.join(' ');
}
// 自定义行列间距
var wrapStyles = {};
var itemStyles = {};
if ((style === null || style === void 0 ? void 0 : style.gutterX) >= 0) {
wrapStyles.marginLeft = wrapStyles.marginRight =
-((style === null || style === void 0 ? void 0 : style.gutterX) / 2) + 'px';
itemStyles.paddingLeft = itemStyles.paddingRight =
(style === null || style === void 0 ? void 0 : style.gutterX) / 2 + 'px';
}
if ((style === null || style === void 0 ? void 0 : style.gutterY) >= 0) {
itemStyles.marginBottom = (style === null || style === void 0 ? void 0 : style.gutterY) + 'px';
}
return (React.createElement("div", { ref: this.bodyRef, className: cx('Cards', className, {
'Cards--unsaved': !!store.modified || !!store.moved
}, setThemeClassName(__assign(__assign({}, this.props), { name: 'baseControlClassName', id: id, themeCss: themeCss })), setThemeClassName(__assign(__assign({}, this.props), { name: 'wrapperCustomStyle', id: id, themeCss: wrapperCustomStyle }))), style: buildStyle(style, data) },
affixHeader ? (React.createElement("div", { className: cx('Cards-fixedTop') },
header,
heading)) : (React.createElement(React.Fragment, null,
header,
heading)),
store.items.length ? (React.createElement("div", { className: cx('Cards-body Grid', itemsClassName, masonryClassName), style: wrapStyles }, store.items.map(function (item, index) {
return _this.renderCard(index, card, item, itemFinalClassName, itemStyles);
}))) : (React.createElement("div", { className: cx('Cards-placeholder') }, render('placeholder', __(placeholder)))),
footer,
React.createElement(Spinner, { loadingConfig: loadingConfig, overlay: true, show: loading }),
React.createElement(CustomStyle, __assign({}, this.props, { config: {
wrapperCustomStyle: wrapperCustomStyle,
id: id,
themeCss: themeCss,
classNames: [
{
key: 'baseControlClassName'
}
]
}, env: env }))));
};
Cards.propsList = [
'header',
'headerToolbarRender',
'footer',
'footerToolbarRender',
'placeholder',
'source',
'selectable',
'headerClassName',
'footerClassName',
'hideQuickSaveBtn',
'hideCheckToggler',
'itemCheckableOn',
'itemDraggableOn',
'masonryLayout',
'items',
'valueField'
];
Cards.defaultProps = {
className: '',
placeholder: 'placeholder.noData',
source: '$items',
selectable: false,
headerClassName: '',
footerClassName: '',
itemClassName: 'Grid-col--xs12 Grid-col--sm6 Grid-col--md4 Grid-col--lg3',
hideCheckToggler: false,
masonryLayout: false,
affixHeader: true,
itemsClassName: '',
checkAll: true
};
return Cards;
}(React.Component));
var CardsRenderer = /** @class */ (function (_super) {
__extends(CardsRenderer, _super);
function CardsRenderer(props, scoped) {
var _this = _super.call(this, props) || this;
scoped.registerComponent(_this);
return _this;
}
CardsRenderer.prototype.componentWillUnmount = function () {
var _a;
(_a = _super.prototype.componentWillUnmount) === null || _a === void 0 ? void 0 : _a.call(this);
this.context.unRegisterComponent(this);
};
CardsRenderer.prototype.receive = function (values, subPath) {
var _a, _b, _c, _d;
var scoped = this.context;
var parents = (_a = scoped === null || scoped === void 0 ? void 0 : scoped.parent) === null || _a === void 0 ? void 0 : _a.getComponents();
/**
* 因为Cards在scope上注册,导致getComponentByName查询组件时会优先找到Cards,和CRUD联动的动作都会失效
* 这里先做兼容处理,把动作交给上层的CRUD处理
*/
if ((_b = this.props) === null || _b === void 0 ? void 0 : _b.host) {
// CRUD会把自己透传给Cards,这样可以保证找到CRUD
return (_d = (_c = this.props.host).receive) === null || _d === void 0 ? void 0 : _d.call(_c, values, subPath);
}
if (subPath) {
return scoped.send(subPath, values);
}
};
CardsRenderer.prototype.reload = function (subPath, query, ctx, silent, replace, args) {
var _a, _b, _c;
return __awaiter(this, void 0, void 0, function () {
var store, scoped;
return __generator(this, function (_d) {
store = this.props.store;
if ((args === null || args === void 0 ? void 0 : args.index) || (args === null || args === void 0 ? void 0 : args.condition)) {
// 局部刷新
// todo 后续考虑添加局部刷新
// const targets = await getMatchedEventTargets<IItem>(
// store.items,
// ctx || this.props.data,
// args.index,
// args?.condition
// );
// await Promise.all(targets.map(target => this.loadDeferredRow(target)));
return [2 /*return*/];
}
scoped = this.context;
if ((_a = this.props) === null || _a === void 0 ? void 0 : _a.host) {
// CRUD会把自己透传给Cards,这样可以保证找到CRUD
return [2 /*return*/, (_c = (_b = this.props.host).reload) === null || _c === void 0 ? void 0 : _c.call(_b, subPath, query, ctx)];
}
if (subPath) {
return [2 /*return*/, scoped.reload(subPath, ctx)];
}
return [2 /*return*/];
});
});
};
CardsRenderer.prototype.setData = function (values, replace, index, condition) {
var _a, _b, _c;
return __awaiter(this, void 0, void 0, function () {
var store, targets;
return __generator(this, function (_d) {
switch (_d.label) {
case 0:
store = this.props.store;
if (!(index !== undefined || condition !== undefined)) return [3 /*break*/, 2];
return [4 /*yield*/, getMatchedEventTargets(store.items, this.props.data, index, condition)];
case 1:
targets = _d.sent();
targets.forEach(function (target) {
target.updateData(values);
});
return [3 /*break*/, 3];
case 2:
if ((_a = this.props) === null || _a === void 0 ? void 0 : _a.host) {
// 如果在 CRUD 里面,优先让 CRUD 去更新状态
return [2 /*return*/, (_c = (_b = this.props.host).setData) === null || _c === void 0 ? void 0 : _c.call(_b, values, replace, index, condition)];
}
else {
return [2 /*return*/, store.updateData(values, undefined, replace)];
}
_d.label = 3;
case 3: return [2 /*return*/];
}
});
});
};
CardsRenderer.prototype.getData = function () {
var _a = this.props, store = _a.store, data = _a.data;
return store.getData(data);
};
CardsRenderer.prototype.hasModifiedItems = function () {
return this.props.store.modified;
};
CardsRenderer.prototype.doAction = function (action, ctx, throwErrors, args) {
return __awaiter(this, void 0, void 0, function () {
var _a, store, valueField, data, actionType, _b, rows;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
_a = this.props, store = _a.store, valueField = _a.valueField, data = _a.data;
actionType = action === null || action === void 0 ? void 0 : action.actionType;
_b = actionType;
switch (_b) {
case 'selectAll': return [3 /*break*/, 1];
case 'clearAll': return [3 /*break*/, 2];
case 'select': return [3 /*break*/, 3];
case 'initDrag': return [3 /*break*/, 5];
case 'cancelDrag': return [3 /*break*/, 6];
case 'submitQuickEdit': return [3 /*break*/, 7];
}
return [3 /*break*/, 9];
case 1:
store.clear();
store.toggleAll();
this.syncSelected();
return [3 /*break*/, 10];
case 2:
store.clear();
this.syncSelected();
return [3 /*break*/, 10];
case 3: return [4 /*yield*/, getMatchedEventTargets(store.items, ctx || this.props.data, args.index, args.condition, args.selected)];
case 4:
rows = _c.sent();
store.updateSelected(rows.map(function (item) { return item.data; }), valueField);
this.syncSelected();
return [3 /*break*/, 10];
case 5:
store.startDragging();
return [3 /*break*/, 10];
case 6:
store.stopDragging();
return [3 /*break*/, 10];
case 7: return [4 /*yield*/, this.handleSave()];
case 8:
_c.sent();
return [3 /*break*/, 10];
case 9: return [2 /*return*/, this.handleAction(undefined, action, data)];
case 10: return [2 /*return*/];
}
});
});
};
CardsRenderer.contextType = ScopedContext;
CardsRenderer = __decorate([
Renderer({
name: 'cards',
type: 'cards',
storeType: ListStore.name,
weight: -100 // 默认的 grid 不是这样,这个只识别 crud 下面的 grid
}),
__metadata("design:paramtypes", [Object, Object])
], CardsRenderer);
return CardsRenderer;
}(Cards));
export { CardsRenderer, Cards as default };