choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
1,281 lines (1,093 loc) • 51.3 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _tslib = require("tslib");
var _react = _interopRequireWildcard(require("react"));
var _mobxReact = require("mobx-react");
var _mobx = require("mobx");
var _isObject = _interopRequireDefault(require("lodash/isObject"));
var _isString = _interopRequireDefault(require("lodash/isString"));
var _isNumber = _interopRequireDefault(require("lodash/isNumber"));
var _UnitConvertor = require("../../../../lib/_util/UnitConvertor");
var _icon = _interopRequireDefault(require("../../../../lib/icon"));
var _enum = require("../../../../lib/progress/enum");
var _dataset = require("choerodon-ui/dataset");
var _noop = _interopRequireDefault(require("lodash/noop"));
var _enum2 = require("../enum");
var _TableButtons = _interopRequireDefault(require("./TableButtons"));
var _Table = _interopRequireDefault(require("../Table"));
var _Button = _interopRequireDefault(require("../../button/Button"));
var _radio = _interopRequireDefault(require("../../radio"));
var _enum3 = require("../../button/enum");
var _enum4 = require("../../data-set/enum");
var _localeContext = require("../../locale-context");
var _TableContext = _interopRequireDefault(require("../TableContext"));
var _autobind = _interopRequireDefault(require("../../_util/autobind"));
var _dataSet = _interopRequireDefault(require("../../data-set"));
var _modal = _interopRequireDefault(require("../../modal"));
var _progress = _interopRequireDefault(require("../../progress"));
var _Column = _interopRequireDefault(require("../Column"));
var _utils = require("../utils");
var _CombineSort = _interopRequireDefault(require("./CombineSort"));
var _TableToolBar = _interopRequireDefault(require("./TableToolBar"));
var _TableFilterBar = _interopRequireDefault(require("./TableFilterBar"));
var _TableAdvancedQueryBar = _interopRequireDefault(require("./TableAdvancedQueryBar"));
var _TableProfessionalBar = _interopRequireDefault(require("./TableProfessionalBar"));
var _TableComboBar = _interopRequireDefault(require("./TableComboBar"));
var _TableDynamicFilterBar = _interopRequireDefault(require("./TableDynamicFilterBar"));
var _utils2 = require("../../data-set/utils");
var _Dropdown = _interopRequireDefault(require("../../dropdown/Dropdown"));
var _menu = _interopRequireDefault(require("../../menu"));
var _textField = _interopRequireDefault(require("../../text-field"));
var _excluded = ["afterClick"],
_excluded2 = ["afterClick"];
var ExportBody = (0, _mobxReact.observer)(function (props) {
var dataSet = props.dataSet,
prefixCls = props.prefixCls;
var exportMessage = (0, _localeContext.$l)('Table', 'export_ing');
var exportProgress = {
percent: 1,
status: _enum.ProgressStatus.active
};
switch (dataSet.exportStatus) {
case _enum4.DataSetExportStatus.start:
exportProgress = {
percent: 1,
status: _enum.ProgressStatus.active
};
break;
case _enum4.DataSetExportStatus.exporting:
exportProgress = {
percent: dataSet.exportProgress,
status: _enum.ProgressStatus.active
};
break;
case _enum4.DataSetExportStatus.progressing:
exportProgress = {
percent: dataSet.exportProgress,
status: _enum.ProgressStatus.active
};
break;
case _enum4.DataSetExportStatus.failed:
exportMessage = (0, _localeContext.$l)('Table', 'export_failed');
exportProgress = {
percent: 50,
status: _enum.ProgressStatus.exception
};
break;
case _enum4.DataSetExportStatus.success:
exportMessage = (0, _localeContext.$l)('Table', 'export_success');
exportProgress = {
percent: 100,
status: _enum.ProgressStatus.success
};
break;
default:
break;
}
return /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-export-progress-body")
}, /*#__PURE__*/_react["default"].createElement("span", null, exportMessage), /*#__PURE__*/_react["default"].createElement(_progress["default"], (0, _extends2["default"])({}, exportProgress)));
});
var ExportFooter = (0, _mobxReact.observer)(function (props) {
var dataSet = props.dataSet,
prefixCls = props.prefixCls,
exportButton = props.exportButton;
var _useState = (0, _react.useState)(dataSet.name || (0, _localeContext.$l)('Table', 'default_export')),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
username = _useState2[0],
setUsername = _useState2[1];
var handleClick = function handleClick() {
exportButton(dataSet.exportStatus, username);
};
var _useState3 = (0, _react.useState)(undefined),
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
messageTimeout = _useState4[0],
setMessageTimeout = _useState4[1];
_react["default"].useEffect(function () {
var currentTimeout = null;
currentTimeout = setTimeout(function () {
if (dataSet && dataSet.exportStatus !== _enum4.DataSetExportStatus.success && dataSet.exportStatus !== _enum4.DataSetExportStatus.failed) {
setMessageTimeout((0, _localeContext.$l)('Table', 'export_waiting'));
}
}, 5000);
return function () {
if (currentTimeout) {
clearTimeout(currentTimeout);
}
};
}, []);
return /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-export-progress-footer")
}, dataSet.exportStatus === _enum4.DataSetExportStatus.failed && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("span", null, (0, _localeContext.$l)('Table', 'export_break')), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
onClick: handleClick
}, (0, _localeContext.$l)('Table', 'retry_button'))), dataSet.exportStatus === _enum4.DataSetExportStatus.success && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("span", null, "".concat((0, _localeContext.$l)('Table', 'file_name'), ":")), /*#__PURE__*/_react["default"].createElement(_textField["default"], {
value: username,
onChange: function onChange(value) {
setUsername(value);
}
})), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
color: _enum3.ButtonColor.primary,
onClick: handleClick
}, (0, _localeContext.$l)('Table', 'download_button'))), dataSet.exportStatus !== _enum4.DataSetExportStatus.success && dataSet.exportStatus !== _enum4.DataSetExportStatus.failed && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("span", null, messageTimeout || (0, _localeContext.$l)('Table', 'export_operating')), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
color: _enum3.ButtonColor.gray,
onClick: handleClick
}, (0, _localeContext.$l)('Table', 'cancel_button'))));
});
var TableQueryBar = /*#__PURE__*/function (_Component) {
(0, _inherits2["default"])(TableQueryBar, _Component);
var _super = (0, _createSuper2["default"])(TableQueryBar);
function TableQueryBar() {
var _this;
(0, _classCallCheck2["default"])(this, TableQueryBar);
_this = _super.apply(this, arguments);
_this.queryFieldsElement = [];
/**
* 点击汇总条展开收起
* @param summary
*/
_this.openMore = function (summary) {
if (_this.moreSummary && _this.moreSummary.length) {
_this.moreSummary = [];
} else {
_this.moreSummary = _this.renderSummary(summary);
}
return _this.moreSummary;
};
return _this;
}
(0, _createClass2["default"])(TableQueryBar, [{
key: "showQueryBar",
get: function get() {
var showQueryBar = this.props.showQueryBar,
queryBar = this.context.tableStore.queryBar;
return showQueryBar !== false && queryBar !== _enum2.TableQueryBarType.none;
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
if (this.exportModal) {
this.exportModal.close(true);
}
}
}, {
key: "handleButtonCreate",
value: function handleButtonCreate() {
var dataSet = this.context.dataSet;
dataSet.create({}, 0);
}
}, {
key: "handleButtonSubmit",
value: function handleButtonSubmit() {
var dataSet = this.context.dataSet;
return dataSet.submit();
}
}, {
key: "handleButtonDelete",
value: function handleButtonDelete() {
var dataSet = this.context.dataSet;
return dataSet["delete"](dataSet.selected);
}
}, {
key: "handleButtonRemove",
value: function handleButtonRemove() {
var dataSet = this.context.dataSet;
dataSet.remove(dataSet.selected);
}
}, {
key: "handleButtonReset",
value: function handleButtonReset() {
var dataSet = this.context.dataSet;
dataSet.reset();
}
}, {
key: "handleQueryReset",
value: function handleQueryReset() {
var queryDataSet = this.context.dataSet.queryDataSet;
if (queryDataSet) {
var current = queryDataSet.current;
if (current) {
current.reset();
}
this.handleQuery();
}
}
}, {
key: "handleExpandAll",
value: function handleExpandAll() {
var tableStore = this.context.tableStore;
tableStore.expandAll();
}
}, {
key: "handleCollapseAll",
value: function handleCollapseAll() {
var tableStore = this.context.tableStore;
tableStore.collapseAll();
}
}, {
key: "handleChangeExportStrategy",
value: function handleChangeExportStrategy(value) {
var dataSet = this.context.dataSet;
dataSet.setState('__EXPORT-STRATEGY__', value);
}
}, {
key: "handleButtonExport",
value: function () {
var _handleButtonExport = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
var _this2 = this;
var _this$context, tableStore, prefixCls, getConfig, columnHeaders;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_this$context = this.context, tableStore = _this$context.tableStore, prefixCls = _this$context.prefixCls, getConfig = _this$context.tableStore.getConfig;
_context.next = 3;
return tableStore.getColumnHeaders();
case 3:
columnHeaders = _context.sent;
this.exportDataSet = new _dataSet["default"]({
data: columnHeaders,
paging: false
}, {
getConfig: getConfig
});
this.exportDataSet.selectAll();
this.handleChangeExportStrategy('ALL');
this.exportModal = _modal["default"].open({
title: (0, _localeContext.$l)('Table', 'choose_export_columns'),
children: /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_Table["default"], {
dataSet: this.exportDataSet,
style: {
height: (0, _UnitConvertor.pxToRem)(300)
}
}, /*#__PURE__*/_react["default"].createElement(_Column["default"], {
header: (0, _localeContext.$l)('Table', 'column_name'),
name: "label",
resizable: false
}))),
closable: true,
okText: (0, _localeContext.$l)('Table', 'export_button'),
onOk: this.handleExport,
footer: function footer(okBtn, cancelBtn) {
return /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-export-modal-footer")
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-export-modal-footer-radio")
}, /*#__PURE__*/_react["default"].createElement(_radio["default"], {
name: "exportStrategy",
value: "ALL",
defaultChecked: true,
onChange: _this2.handleChangeExportStrategy
}, (0, _localeContext.$l)('Table', 'export_all')), /*#__PURE__*/_react["default"].createElement(_radio["default"], {
name: "exportStrategy",
value: "SELECTED",
onChange: _this2.handleChangeExportStrategy
}, (0, _localeContext.$l)('Table', 'export_selected'))), /*#__PURE__*/_react["default"].createElement("div", null, okBtn, cancelBtn));
},
style: {
width: (0, _UnitConvertor.pxToRem)(500)
}
});
case 8:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
function handleButtonExport() {
return _handleButtonExport.apply(this, arguments);
}
return handleButtonExport;
}()
}, {
key: "handleQuery",
value: function () {
var _handleQuery = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
var _this$context2, tableStore, dataSet, queryDataSet;
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_this$context2 = this.context, tableStore = _this$context2.tableStore, dataSet = _this$context2.dataSet, queryDataSet = _this$context2.dataSet.queryDataSet;
if (!(tableStore.queryBar === _enum2.TableQueryBarType.filterBar)) {
_context2.next = 19;
break;
}
_context2.next = 4;
return dataSet.modifiedCheck(undefined, dataSet, 'query');
case 4:
_context2.t2 = _context2.sent;
if (!_context2.t2) {
_context2.next = 7;
break;
}
_context2.t2 = queryDataSet;
case 7:
_context2.t1 = _context2.t2;
if (!_context2.t1) {
_context2.next = 10;
break;
}
_context2.t1 = queryDataSet.current;
case 10:
_context2.t0 = _context2.t1;
if (!_context2.t0) {
_context2.next = 15;
break;
}
_context2.next = 14;
return queryDataSet.current.validate();
case 14:
_context2.t0 = _context2.sent;
case 15:
if (!_context2.t0) {
_context2.next = 17;
break;
}
return _context2.abrupt("return", dataSet.query());
case 17:
_context2.next = 20;
break;
case 19:
return _context2.abrupt("return", dataSet.query());
case 20:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
function handleQuery() {
return _handleQuery.apply(this, arguments);
}
return handleQuery;
}()
}, {
key: "handleExport",
value: function handleExport() {
var _this3 = this;
var selected = this.exportDataSet.selected;
var clientExportQuantity = this.props.clientExportQuantity,
_this$context3 = this.context,
prefixCls = _this$context3.prefixCls,
dataSet = _this$context3.dataSet;
if (selected.length) {
var exportModal = this.exportModal;
dataSet["export"](selected.reduce(function (columns, record) {
var myName = record.get('name');
var myField = dataSet.getField(myName);
if (myField && myField.type === _enum4.FieldType.object) {
var bindField = (0, _utils2.findBindFieldBy)(myField, dataSet.fields, 'textField');
if (bindField) {
myName = bindField.name;
}
}
columns[myName] = record.get('label');
return columns;
}, {}), clientExportQuantity).then(function (exportData) {
_this3.exportData = exportData;
});
if (exportModal) {
exportModal.update({
title: (0, _localeContext.$l)('Table', 'export_button'),
children: /*#__PURE__*/_react["default"].createElement(ExportBody, {
prefixCls: prefixCls,
dataSet: dataSet
}),
onCancel: this.handleExportButton,
footer: /*#__PURE__*/_react["default"].createElement(ExportFooter, {
prefixCls: prefixCls,
exportButton: this.handleExportButton,
exportModal: exportModal,
dataSet: dataSet
})
});
}
}
return false;
}
}, {
key: "handleExportButton",
value: function handleExportButton(data, filename) {
var _this$context4 = this.context,
dataSet = _this$context4.dataSet,
tableStore = _this$context4.tableStore;
if (data === _enum4.DataSetExportStatus.success) {
if (this.exportData) {
(0, _utils2.exportExcel)(this.exportData, filename, tableStore.getConfig('xlsx'));
this.exportModal.close();
this.exportData = null;
}
} else if (data === _enum4.DataSetExportStatus.failed) {
this.exportData = null;
this.handleExport();
} else {
this.exportModal.close();
this.exportData = null;
}
dataSet.exportStatus = undefined;
}
}, {
key: "getButtonProps",
value: function getButtonProps(type) {
var _this$context5 = this.context,
isTree = _this$context5.isTree,
dataSet = _this$context5.dataSet;
var disabled = dataSet.status !== _enum4.DataSetStatus.ready;
switch (type) {
case _enum2.TableButtonType.add:
return {
icon: 'playlist_add',
onClick: this.handleButtonCreate,
children: (0, _localeContext.$l)('Table', 'create_button'),
disabled: disabled || (dataSet.parent ? !dataSet.parent.current : false)
};
case _enum2.TableButtonType.save:
return {
icon: 'save',
onClick: this.handleButtonSubmit,
children: (0, _localeContext.$l)('Table', 'save_button'),
type: _enum3.ButtonType.submit,
disabled: disabled
};
case _enum2.TableButtonType["delete"]:
return {
icon: 'delete',
onClick: this.handleButtonDelete,
children: (0, _localeContext.$l)('Table', 'delete_button'),
disabled: disabled || dataSet.selected.length === 0
};
case _enum2.TableButtonType.remove:
return {
icon: 'remove_circle',
onClick: this.handleButtonRemove,
children: (0, _localeContext.$l)('Table', 'remove_button'),
disabled: disabled || dataSet.selected.length === 0
};
case _enum2.TableButtonType.reset:
return {
icon: 'undo',
onClick: this.handleButtonReset,
children: (0, _localeContext.$l)('Table', 'reset_button'),
type: _enum3.ButtonType.reset
};
case _enum2.TableButtonType.query:
return {
icon: 'search',
onClick: this.handleQuery,
children: (0, _localeContext.$l)('Table', 'query_button')
};
case _enum2.TableButtonType["export"]:
return {
icon: 'export',
onClick: this.handleButtonExport,
children: (0, _localeContext.$l)('Table', 'export_button')
};
case _enum2.TableButtonType.expandAll:
return isTree ? {
icon: 'add_box',
onClick: this.handleExpandAll,
children: (0, _localeContext.$l)('Table', 'expand_button')
} : undefined;
case _enum2.TableButtonType.collapseAll:
return isTree ? {
icon: 'short_text',
onClick: this.handleCollapseAll,
children: (0, _localeContext.$l)('Table', 'collapse_button')
} : undefined;
default:
}
}
/**
* 渲染表头汇总列
* @param summary
*/
}, {
key: "renderSummary",
value: function renderSummary(summary) {
if (summary) {
var length = summary.length;
if (length) {
var summaryBar = this.props.summaryBar;
if (summaryBar) {
var summaryLength = summaryBar.length;
var _this$props = this.props,
summaryFieldsLimit = _this$props.summaryFieldsLimit,
summaryBarFieldWidth = _this$props.summaryBarFieldWidth,
_this$context6 = this.context,
tableStore = _this$context6.tableStore,
dataSet = _this$context6.dataSet,
prefixCls = _this$context6.prefixCls;
var queryBarProps = tableStore.props.queryBarProps;
var tableQueryBarProps = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, tableStore.getConfig('queryBarProps')), queryBarProps);
var summaryFieldsLimits = summaryFieldsLimit || tableQueryBarProps && tableQueryBarProps.summaryFieldsLimit || 3;
var fieldTypeArr = [_enum4.FieldType.currency, _enum4.FieldType.number];
return summary.reduce(function (list, summaryCol, index) {
var hasSeparate = length > summaryFieldsLimits || index !== summaryLength - 1;
if ((0, _isString["default"])(summaryCol)) {
var field = dataSet.getField(summaryCol);
if (field && fieldTypeArr.includes(field.get('type'))) {
var summaryValue = dataSet.reduce(function (sum, record) {
var n = record.get(summaryCol);
if ((0, _isNumber["default"])(n) || _dataset.math.isBigNumber(n)) {
return _dataset.math.plus(sum, n);
}
return sum;
}, 0);
var name = field.get('name');
var label = field.get('label');
var sumNode = _dataset.math.isBigNumber(summaryValue) ? _dataset.math.toString(summaryValue) : summaryValue;
list.push( /*#__PURE__*/_react["default"].createElement("div", {
key: name
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-summary-col"),
style: {
width: summaryBarFieldWidth
}
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-summary-col-label"),
title: String(label)
}, label, ":"), /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-summary-col-value"),
title: String(sumNode)
}, sumNode)), hasSeparate && /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-summary-col-separate")
}, /*#__PURE__*/_react["default"].createElement("div", null))));
}
} else if (typeof summaryCol === 'function') {
var summaryObj = summaryCol({
summaryFieldsLimit: summaryFieldsLimits,
summaryBarFieldWidth: summaryBarFieldWidth,
dataSet: dataSet
});
list.push( /*#__PURE__*/_react["default"].createElement("div", {
key: (0, _isString["default"])(summaryObj.label) ? summaryObj.label : ''
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-summary-col"),
style: {
width: summaryBarFieldWidth
}
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-summary-col-label"),
title: (0, _isString["default"])(summaryObj.label) ? summaryObj.label : ''
}, summaryObj.label, ":"), /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-summary-col-value"),
title: (0, _isString["default"])(summaryObj.value) || (0, _isNumber["default"])(summaryObj.value) ? summaryObj.value.toString() : ''
}, summaryObj.value)), hasSeparate && /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-summary-col-separate")
}, /*#__PURE__*/_react["default"].createElement("div", null))));
}
return list;
}, []);
}
}
}
}
/**
* 汇总条展开收起按钮
* @param summary
*/
}, {
key: "getMoreSummaryButton",
value: function getMoreSummaryButton(summary) {
var _this4 = this;
if (summary.length) {
var prefixCls = this.context.prefixCls;
return /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-summary-button-more")
}, /*#__PURE__*/_react["default"].createElement("a", {
onClick: function onClick() {
return _this4.openMore(summary);
}
}, (0, _localeContext.$l)('Table', 'more'), this.moreSummary && this.moreSummary.length ? /*#__PURE__*/_react["default"].createElement(_icon["default"], {
type: 'expand_less'
}) : /*#__PURE__*/_react["default"].createElement(_icon["default"], {
type: 'expand_more'
})));
}
}
/**
* 渲染汇总条
*/
}, {
key: "getSummaryBar",
value: function getSummaryBar() {
var _this$props2 = this.props,
summaryBar = _this$props2.summaryBar,
summaryFieldsLimit = _this$props2.summaryFieldsLimit,
_this$context7 = this.context,
prefixCls = _this$context7.prefixCls,
tableStore = _this$context7.tableStore;
var queryBarProps = tableStore.props.queryBarProps;
var tableQueryBarProps = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, tableStore.getConfig('queryBarProps')), queryBarProps);
var summaryFieldsLimits = summaryFieldsLimit || tableQueryBarProps && tableQueryBarProps.summaryFieldsLimit || 3;
if (summaryBar) {
var currentSummaryBar = this.renderSummary(summaryBar.slice(0, summaryFieldsLimits));
var moreSummary = summaryBar.slice(summaryFieldsLimits);
var moreSummaryButton = this.getMoreSummaryButton(moreSummary);
return /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-summary-group-wrapper")
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-summary-group")
}, currentSummaryBar, this.moreSummary), moreSummaryButton);
}
}
/**
* buttons 大于 buttonsLimits 放入下拉
* @param buttonsLimits
* @param hasCombineSort
*/
}, {
key: "getMoreButton",
value: function getMoreButton(buttonsLimits, hasCombineSort) {
var _this5 = this;
var buttons = this.props.buttons;
var _this$context8 = this.context,
prefixCls = _this$context8.prefixCls,
tableStore = _this$context8.tableStore;
var tableButtonProps = tableStore.getConfig('tableButtonProps');
var children = [];
if (buttons && buttons.length && buttonsLimits) {
buttons.slice(hasCombineSort ? buttonsLimits - 1 : buttonsLimits).forEach(function (button) {
var props = {};
if ((0, _mobx.isArrayLike)(button)) {
props = button[1] || {};
button = button[0];
}
if ((0, _isString["default"])(button) && button in _enum2.TableButtonType) {
var _props = props,
afterClick = _props.afterClick,
buttonProps = (0, _objectWithoutProperties2["default"])(_props, _excluded);
var defaultButtonProps = _this5.getButtonProps(button);
if (defaultButtonProps) {
if (afterClick) {
var onClick = defaultButtonProps.onClick;
defaultButtonProps.onClick = /*#__PURE__*/function () {
var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(e) {
return _regenerator["default"].wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
e.persist();
_context3.prev = 1;
_context3.next = 4;
return onClick(e);
case 4:
_context3.prev = 4;
afterClick(e);
return _context3.finish(4);
case 7:
case "end":
return _context3.stop();
}
}
}, _callee3, null, [[1,, 4, 7]]);
}));
return function (_x) {
return _ref.apply(this, arguments);
};
}();
}
children.push( /*#__PURE__*/_react["default"].createElement(_menu["default"].Item, {
hidden: tableButtonProps.hidden,
key: button
}, /*#__PURE__*/_react["default"].createElement(_Button["default"], (0, _extends2["default"])({
key: "".concat(button, "-btn")
}, tableButtonProps, defaultButtonProps, buttonProps, {
funcType: _enum3.FuncType.link
}))));
}
} else if ( /*#__PURE__*/(0, _react.isValidElement)(button)) {
children.push( /*#__PURE__*/_react["default"].createElement(_menu["default"].Item, {
hidden: button.props.hidden,
key: button.key
}, /*#__PURE__*/(0, _react.cloneElement)(button, (0, _objectSpread2["default"])((0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, tableButtonProps), button.props), {}, {
funcType: _enum3.FuncType.link
}))));
} else if ((0, _isObject["default"])(button)) {
children.push( /*#__PURE__*/_react["default"].createElement(_menu["default"].Item, {
hidden: props.hidden,
key: button.key
}, /*#__PURE__*/_react["default"].createElement(_Button["default"], (0, _extends2["default"])({}, tableButtonProps, button, {
funcType: _enum3.FuncType.link
}))));
}
});
}
var menu = /*#__PURE__*/_react["default"].createElement(_menu["default"], {
prefixCls: "".concat(prefixCls, "-dropdown-menu")
}, children);
return /*#__PURE__*/_react["default"].createElement(_Dropdown["default"], {
overlay: menu,
key: "dropdown_button"
}, /*#__PURE__*/_react["default"].createElement(_Button["default"], (0, _extends2["default"])({}, tableButtonProps, {
key: "more_button"
}), /*#__PURE__*/_react["default"].createElement("span", null, (0, _localeContext.$l)('Table', 'more')), /*#__PURE__*/_react["default"].createElement(_icon["default"], {
type: 'expand_more'
})));
}
}, {
key: "getButtons",
value: function getButtons() {
var _this6 = this;
var _this$context$tableSt = this.context.tableStore,
queryBar = _this$context$tableSt.queryBar,
prefixCls = _this$context$tableSt.prefixCls,
dataSet = _this$context$tableSt.dataSet,
customizedBtn = _this$context$tableSt.customizedBtn,
customizable = _this$context$tableSt.customizable,
customizedColumnHeader = _this$context$tableSt.customizedColumnHeader;
var _this$props3 = this.props,
originalButtons = _this$props3.buttons,
summaryBar = _this$props3.summaryBar,
buttonsLimit = _this$props3.buttonsLimit;
var tableStore = this.context.tableStore;
var children = [];
var buttons = originalButtons;
if (customizable && customizedBtn) {
buttons = [customizedColumnHeader()].concat((0, _toConsumableArray2["default"])(buttons || []));
}
var hasCombineSort = queryBar !== _enum2.TableQueryBarType.filterBar && dataSet.props.combineSort;
if (hasCombineSort) {
var sortableFieldNames = this.getSortableFieldNames();
if (sortableFieldNames.length > 0) {
buttons = [/*#__PURE__*/_react["default"].createElement(_CombineSort["default"], {
key: "CombineSort",
dataSet: dataSet,
prefixCls: prefixCls,
sortableFieldNames: sortableFieldNames
})].concat((0, _toConsumableArray2["default"])(buttons || []));
}
}
if (buttons) {
// 汇总条存在下 buttons 大于 3 个放入下拉
var buttonsLimits = summaryBar ? buttonsLimit || 3 : buttonsLimit;
var tableButtonProps = tableStore.getConfig('tableButtonProps');
var buttonsArr = buttons.slice(0, buttonsLimits);
buttonsArr.forEach(function (button) {
var props = {};
if ((0, _mobx.isArrayLike)(button)) {
props = button[1] || {};
button = button[0];
}
if ((0, _isString["default"])(button) && button in _enum2.TableButtonType) {
var _props2 = props,
afterClick = _props2.afterClick,
buttonProps = (0, _objectWithoutProperties2["default"])(_props2, _excluded2);
var defaultButtonProps = _this6.getButtonProps(button);
if (defaultButtonProps) {
if (afterClick) {
var onClick = defaultButtonProps.onClick;
defaultButtonProps.onClick = /*#__PURE__*/function () {
var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(e) {
return _regenerator["default"].wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
e.persist();
_context4.prev = 1;
_context4.next = 4;
return onClick(e);
case 4:
_context4.prev = 4;
afterClick(e);
return _context4.finish(4);
case 7:
case "end":
return _context4.stop();
}
}
}, _callee4, null, [[1,, 4, 7]]);
}));
return function (_x2) {
return _ref2.apply(this, arguments);
};
}();
}
children.push( /*#__PURE__*/_react["default"].createElement(_Button["default"], (0, _extends2["default"])({
key: button
}, tableButtonProps, defaultButtonProps, buttonProps)));
}
} else if ( /*#__PURE__*/(0, _react.isValidElement)(button)) {
children.push( /*#__PURE__*/(0, _react.cloneElement)(button, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, tableButtonProps), button.props)));
} else if ((0, _isObject["default"])(button)) {
children.push( /*#__PURE__*/_react["default"].createElement(_Button["default"], (0, _extends2["default"])({}, tableButtonProps, button)));
}
});
if (buttonsLimits && buttons.length > buttonsLimits) {
var moreButton = this.getMoreButton(buttonsLimits, hasCombineSort);
children.push(moreButton);
}
}
return children;
}
}, {
key: "getQueryFields",
value: function getQueryFields() {
var _this$context9 = this.context,
dataSet = _this$context9.dataSet,
_this$context9$tableS = _this$context9.tableStore,
queryBar = _this$context9$tableS.queryBar,
getConfig = _this$context9$tableS.getConfig,
_this$props4 = this.props,
queryFields = _this$props4.queryFields,
buttons = _this$props4.buttons;
var queryDataSet = dataSet.queryDataSet;
var result = [];
if (queryDataSet) {
var fields = queryDataSet.fields,
current = queryDataSet.current,
_queryDataSet$props$f = queryDataSet.props.fields,
propFields = _queryDataSet$props$f === void 0 ? [] : _queryDataSet$props$f; // 减少重复渲染
// 使用了 buttons 判断,是因为 getButtons 中有用 DataSet.status 可观察对象判断,确保 buttons 用到 status 时,此处才用 status 判断,减少渲染
if (this.queryFieldsElement.length && (!current || buttons && buttons.some(function (button) {
return (0, _isString["default"])(button) && button in _enum2.TableButtonType;
}) && dataSet.status !== _enum4.DataSetStatus.ready)) return this.queryFieldsElement;
var cloneFields = fields.toJS();
var tlsKey = getConfig('tlsKey');
var processField = function processField(field, name) {
if (!field.get('bind', current) && !name.includes(tlsKey)) {
var element = queryFields[name];
var filterBarProps = {};
if (queryBar === _enum2.TableQueryBarType.filterBar) {
var placeholder = /*#__PURE__*/(0, _react.isValidElement)(element) && element.props.placeholder ? element.props.placeholder : (0, _utils.getPlaceholderByField)(field, current);
var clearButton = /*#__PURE__*/(0, _react.isValidElement)(element) && element.props.clearButton !== undefined ? element.props.clearButton : true;
filterBarProps = {
placeholder: placeholder,
border: false,
clearButton: clearButton
};
}
var props = (0, _objectSpread2["default"])({
key: name,
name: name,
dataSet: queryDataSet,
isFlat: queryBar === _enum2.TableQueryBarType.filterBar
}, filterBarProps);
result.push( /*#__PURE__*/(0, _react.isValidElement)(element) ? /*#__PURE__*/(0, _react.cloneElement)(element, props) : /*#__PURE__*/(0, _react.cloneElement)((0, _utils.getEditorByField)(field, current, queryBar !== _enum2.TableQueryBarType.professionalBar, queryBar === _enum2.TableQueryBarType.filterBar || queryBar === _enum2.TableQueryBarType.comboBar), (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, props), (0, _isObject["default"])(element) ? element : {})));
}
};
propFields.forEach(function (_ref3) {
var name = _ref3.name;
if (name) {
var field = cloneFields.get(name);
if (field) {
cloneFields["delete"](name);
processField(field, name);
}
}
});
cloneFields.forEach(function (field, name) {
processField(field, name);
});
}
this.queryFieldsElement = result;
return result;
}
}, {
key: "getSortableFieldNames",
value: function getSortableFieldNames() {
var columnGroups = this.context.tableStore.columnGroups;
var columns = columnGroups.columns;
var headerRows = (0, _utils.getTableHeaderRows)(columns);
var sortableFieldNames = new Set();
headerRows.forEach(function (cols) {
cols.forEach(function (col) {
if (col.column && col.column.name && col.column.sortable) {
sortableFieldNames.add(col.column.name);
}
});
});
return (0, _toConsumableArray2["default"])(sortableFieldNames);
}
}, {
key: "renderToolBar",
value: function renderToolBar(props) {
var prefixCls = this.context.prefixCls;
return /*#__PURE__*/_react["default"].createElement(_TableToolBar["default"], (0, _extends2["default"])({
key: "toolbar",
prefixCls: prefixCls
}, props));
}
}, {
key: "renderFilterBar",
value: function renderFilterBar(props) {
var prefixCls = this.context.prefixCls;
var _this$props5 = this.props,
filterBarFieldName = _this$props5.filterBarFieldName,
filterBarPlaceholder = _this$props5.filterBarPlaceholder;
return /*#__PURE__*/_react["default"].createElement(_TableFilterBar["default"], (0, _extends2["default"])({
key: "toolbar",
prefixCls: prefixCls,
paramName: filterBarFieldName,
placeholder: filterBarPlaceholder
}, props));
}
}, {
key: "renderAdvancedQueryBar",
value: function renderAdvancedQueryBar(props) {
var prefixCls = this.context.prefixCls;
return /*#__PURE__*/_react["default"].createElement(_TableAdvancedQueryBar["default"], (0, _extends2["default"])({
key: "toolbar",
prefixCls: prefixCls
}, props));
}
}, {
key: "renderProfessionalBar",
value: function renderProfessionalBar(props) {
var prefixCls = this.context.prefixCls;
return /*#__PURE__*/_react["default"].createElement(_TableProfessionalBar["default"], (0, _extends2["default"])({
key: "toolbar",
prefixCls: prefixCls
}, props));
}
}, {
key: "renderDynamicFilterBar",
value: function renderDynamicFilterBar(props) {
var _this$props6 = this.props,
dynamicFilterBar = _this$props6.dynamicFilterBar,
searchCode = _this$props6.searchCode;
var _this$context10 = this.context,
prefixCls = _this$context10.prefixCls,
tableStore = _this$context10.tableStore;
var sortableFieldNames = this.getSortableFieldNames();
return /*#__PURE__*/_react["default"].createElement(_TableDynamicFilterBar["default"], (0, _extends2["default"])({
key: "toolbar",
searchCode: searchCode,
dynamicFilterBar: dynamicFilterBar,
prefixCls: prefixCls,
sortableFieldNames: sortableFieldNames,
tableStore: tableStore
}, props));
}
}, {
key: "renderComboBar",
value: function renderComboBar(props) {
var comboFilterBar = this.props.comboFilterBar;
var prefixCls = this.context.prefixCls;
return /*#__PURE__*/_react["default"].createElement(_TableComboBar["default"], (0, _extends2["default"])({
key: "toolbar",
comboFilterBar: comboFilterBar,
prefixCls: prefixCls
}, props));
}
}, {
key: "expandTree",
value: function expandTree() {
var tableStore = this.context.tableStore;
var queryBarProps = tableStore.props.queryBarProps;
if (queryBarProps && typeof queryBarProps.onQuery === 'function') {
queryBarProps.onQuery();
}
tableStore.expandAll();
}
}, {
key: "collapseTree",
value: function collapseTree() {
var tableStore = this.context.tableStore;
var queryBarProps = tableStore.props.queryBarProps;
if (queryBarProps && typeof queryBarProps.onReset === 'function') {
queryBarProps.onReset();
}
tableStore.collapseAll();
}
}, {
key: "render",
value: function render() {
var buttons = this.getButtons();
var summaryBar = this.getSummaryBar();
var _this$context11 = this.context,
prefixCls = _this$context11.prefixCls,
dataSet = _this$context11.dataSet,
isTree = _this$context11.isTree,
tableStore = _this$context11.tableStore,
_this$context11$table = _this$context11.tableStore,
queryBar = _this$context11$table.queryBar,
queryBarProps = _this$context11$table.props.queryBarProps,
_this$props7 = this.props,
queryFieldsLimit = _this$props7.queryFieldsLimit,
summaryFieldsLimit = _this$props7.summaryFieldsLimit,
pagination = _this$props7.pagination,
treeQueryExpanded = _this$props7.treeQueryExpanded,
showQueryBar = this.showQueryBar;
if (showQueryBar) {
var queryDataSet = dataSet.queryDataSet;
var queryFields = this.getQueryFields();
var tableQueryBarProps = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, tableStore.getConfig('queryBarProps')), queryBarProps);
var onReset = typeof tableQueryBarProps.onReset === 'function' ? tableQueryBarProps.onReset : _noop["default"];
var onQuery = typeof tableQueryBarProps.onQuery === 'function' ? tableQueryBarProps.onQuery : _noop["default"];
var queryFieldsLimits = queryFieldsLimit || tableQueryBarProps.queryFieldsLimit;
var summaryFieldsLimits = summaryFieldsLimit || tableQueryBarProps.summaryFieldsLimit || 3;
var props = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, tableQueryBarProps), {}, {
dataSet: dataSet,
queryDataSet: queryDataSet,
buttons: buttons,
pagination: pagination,
queryFields: queryFields,
queryFieldsLimit: queryFieldsLimits,
summaryFieldsLimit: summaryFieldsLimits,
summaryBar: summaryBar,
onQuery: treeQueryExpanded && isTree ? this.expandTree : onQuery,
onReset: treeQueryExpanded && isTree ? this.collapseTree : onReset
});
if (typeof queryBar === 'function') {
return queryBar(props);
}
switch (queryBar) {
case _enum2.TableQueryBarType.normal:
return this.renderToolBar(props);
case _enum2.TableQueryBarType.bar:
return this.renderFilterBar(props);
case _enum2.TableQueryBarType.advancedBar:
return this.renderAdvancedQueryBar(props);
case _enum2.TableQueryBarType.professionalBar:
return this.renderProfessionalBar(props);
case _enum2.TableQueryBarType.filterBar:
return this.renderDynamicFilterBar(props);
case _enum2.TableQueryBarType.comboBar:
return this.renderComboBar(props);
default:
}
}
return [/*#__PURE__*/_react["default"].createElement(_TableButtons["default"], {
key: "toolbar",
prefixCls: prefixCls,
buttons: buttons
}, summaryBar), pagination];
}
}], [{
key: "contextType",
get: function get() {
return _TableContext["default"];
}
}]);
return TableQueryBar;
}(_react.Component);
TableQueryBar.displayName = 'TableQueryBar';
TableQueryBar.defaultProps = {
summaryBarFieldWidth: 170
};
(0, _tslib.__decorate)([_mobx.observable], TableQueryBar.prototype, "moreSummary", void 0);
(0, _tslib.__decorate)([_autobind["default"]], TableQueryBar.prototype, "handleButtonCreate", null);
(0, _tslib.__decorate)([_autobind["default"]], TableQueryBar.prototype, "handleButtonSubmit", null);
(0, _tslib.__decorate)([_autobind["default"]], TableQueryBar.prototype, "handleButtonDelete", null);
(0, _tslib.__decorate)([_autobind["default"]], TableQueryBar.prototype, "handleButtonRemove", null);
(0, _tslib.__decorate)([_autobind["default"]], TableQueryBar.prototype, "handleButtonReset", null);
(0, _tslib.__decorate)([_autobind["default"]], TableQueryBar.prototype, "handleQueryReset", null);
(0, _tslib.__decorate)([_autobind["default"]], TableQueryBar.prototype, "handleExpandAll