choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
1,260 lines (1,098 loc) • 46.2 kB
JavaScript
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
import _createClass from "@babel/runtime/helpers/createClass";
import _inherits from "@babel/runtime/helpers/inherits";
import _createSuper from "@babel/runtime/helpers/createSuper";
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
import _extends from "@babel/runtime/helpers/extends";
var _excluded = ["afterClick"],
_excluded2 = ["afterClick"];
import _regeneratorRuntime from "@babel/runtime/regenerator";
import { __decorate } from "tslib";
import React, { cloneElement, Component, isValidElement, useState } from 'react';
import { observer } from 'mobx-react';
import { action, isArrayLike, observable } from 'mobx';
import isObject from 'lodash/isObject';
import isString from 'lodash/isString';
import isNumber from 'lodash/isNumber';
import { pxToRem } from '../../../../es/_util/UnitConvertor';
import Icon from '../../../../es/icon';
import { ProgressStatus } from '../../../../es/progress/enum';
import { math } from 'choerodon-ui/dataset';
import noop from 'lodash/noop';
import { TableButtonType, TableQueryBarType } from '../enum';
import TableButtons from './TableButtons';
import Table from '../Table';
import Button from '../../button/Button';
import Radio from '../../radio';
import { ButtonColor, ButtonType, FuncType } from '../../button/enum';
import { DataSetExportStatus, DataSetStatus, FieldType } from '../../data-set/enum';
import { $l } from '../../locale-context';
import TableContext from '../TableContext';
import autobind from '../../_util/autobind';
import DataSet from '../../data-set';
import Modal from '../../modal';
import Progress from '../../progress';
import Column from '../Column';
import { getEditorByField, getPlaceholderByField, getTableHeaderRows } from '../utils';
import CombineSort from './CombineSort';
import TableToolBar from './TableToolBar';
import TableFilterBar from './TableFilterBar';
import TableAdvancedQueryBar from './TableAdvancedQueryBar';
import TableProfessionalBar from './TableProfessionalBar';
import TableComboBar from './TableComboBar';
import TableDynamicFilterBar from './TableDynamicFilterBar';
import { exportExcel, findBindFieldBy } from '../../data-set/utils';
import Dropdown from '../../dropdown/Dropdown';
import Menu from '../../menu';
import TextField from '../../text-field';
var ExportBody = observer(function (props) {
var dataSet = props.dataSet,
prefixCls = props.prefixCls;
var exportMessage = $l('Table', 'export_ing');
var exportProgress = {
percent: 1,
status: ProgressStatus.active
};
switch (dataSet.exportStatus) {
case DataSetExportStatus.start:
exportProgress = {
percent: 1,
status: ProgressStatus.active
};
break;
case DataSetExportStatus.exporting:
exportProgress = {
percent: dataSet.exportProgress,
status: ProgressStatus.active
};
break;
case DataSetExportStatus.progressing:
exportProgress = {
percent: dataSet.exportProgress,
status: ProgressStatus.active
};
break;
case DataSetExportStatus.failed:
exportMessage = $l('Table', 'export_failed');
exportProgress = {
percent: 50,
status: ProgressStatus.exception
};
break;
case DataSetExportStatus.success:
exportMessage = $l('Table', 'export_success');
exportProgress = {
percent: 100,
status: ProgressStatus.success
};
break;
default:
break;
}
return /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-export-progress-body")
}, /*#__PURE__*/React.createElement("span", null, exportMessage), /*#__PURE__*/React.createElement(Progress, _extends({}, exportProgress)));
});
var ExportFooter = observer(function (props) {
var dataSet = props.dataSet,
prefixCls = props.prefixCls,
exportButton = props.exportButton;
var _useState = useState(dataSet.name || $l('Table', 'default_export')),
_useState2 = _slicedToArray(_useState, 2),
username = _useState2[0],
setUsername = _useState2[1];
var handleClick = function handleClick() {
exportButton(dataSet.exportStatus, username);
};
var _useState3 = useState(undefined),
_useState4 = _slicedToArray(_useState3, 2),
messageTimeout = _useState4[0],
setMessageTimeout = _useState4[1];
React.useEffect(function () {
var currentTimeout = null;
currentTimeout = setTimeout(function () {
if (dataSet && dataSet.exportStatus !== DataSetExportStatus.success && dataSet.exportStatus !== DataSetExportStatus.failed) {
setMessageTimeout($l('Table', 'export_waiting'));
}
}, 5000);
return function () {
if (currentTimeout) {
clearTimeout(currentTimeout);
}
};
}, []);
return /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-export-progress-footer")
}, dataSet.exportStatus === DataSetExportStatus.failed && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", null, $l('Table', 'export_break')), /*#__PURE__*/React.createElement(Button, {
onClick: handleClick
}, $l('Table', 'retry_button'))), dataSet.exportStatus === DataSetExportStatus.success && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("span", null, "".concat($l('Table', 'file_name'), ":")), /*#__PURE__*/React.createElement(TextField, {
value: username,
onChange: function onChange(value) {
setUsername(value);
}
})), /*#__PURE__*/React.createElement(Button, {
color: ButtonColor.primary,
onClick: handleClick
}, $l('Table', 'download_button'))), dataSet.exportStatus !== DataSetExportStatus.success && dataSet.exportStatus !== DataSetExportStatus.failed && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", null, messageTimeout || $l('Table', 'export_operating')), /*#__PURE__*/React.createElement(Button, {
color: ButtonColor.gray,
onClick: handleClick
}, $l('Table', 'cancel_button'))));
});
var TableQueryBar = /*#__PURE__*/function (_Component) {
_inherits(TableQueryBar, _Component);
var _super = _createSuper(TableQueryBar);
function TableQueryBar() {
var _this;
_classCallCheck(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;
}
_createClass(TableQueryBar, [{
key: "showQueryBar",
get: function get() {
var showQueryBar = this.props.showQueryBar,
queryBar = this.context.tableStore.queryBar;
return showQueryBar !== false && queryBar !== 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 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
var _this2 = this;
var _this$context, tableStore, prefixCls, getConfig, columnHeaders;
return _regeneratorRuntime.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({
data: columnHeaders,
paging: false
}, {
getConfig: getConfig
});
this.exportDataSet.selectAll();
this.handleChangeExportStrategy('ALL');
this.exportModal = Modal.open({
title: $l('Table', 'choose_export_columns'),
children: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Table, {
dataSet: this.exportDataSet,
style: {
height: pxToRem(300)
}
}, /*#__PURE__*/React.createElement(Column, {
header: $l('Table', 'column_name'),
name: "label",
resizable: false
}))),
closable: true,
okText: $l('Table', 'export_button'),
onOk: this.handleExport,
footer: function footer(okBtn, cancelBtn) {
return /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-export-modal-footer")
}, /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-export-modal-footer-radio")
}, /*#__PURE__*/React.createElement(Radio, {
name: "exportStrategy",
value: "ALL",
defaultChecked: true,
onChange: _this2.handleChangeExportStrategy
}, $l('Table', 'export_all')), /*#__PURE__*/React.createElement(Radio, {
name: "exportStrategy",
value: "SELECTED",
onChange: _this2.handleChangeExportStrategy
}, $l('Table', 'export_selected'))), /*#__PURE__*/React.createElement("div", null, okBtn, cancelBtn));
},
style: {
width: 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 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
var _this$context2, tableStore, dataSet, queryDataSet;
return _regeneratorRuntime.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 === 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 === FieldType.object) {
var bindField = 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: $l('Table', 'export_button'),
children: /*#__PURE__*/React.createElement(ExportBody, {
prefixCls: prefixCls,
dataSet: dataSet
}),
onCancel: this.handleExportButton,
footer: /*#__PURE__*/React.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 === DataSetExportStatus.success) {
if (this.exportData) {
exportExcel(this.exportData, filename, tableStore.getConfig('xlsx'));
this.exportModal.close();
this.exportData = null;
}
} else if (data === 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 !== DataSetStatus.ready;
switch (type) {
case TableButtonType.add:
return {
icon: 'playlist_add',
onClick: this.handleButtonCreate,
children: $l('Table', 'create_button'),
disabled: disabled || (dataSet.parent ? !dataSet.parent.current : false)
};
case TableButtonType.save:
return {
icon: 'save',
onClick: this.handleButtonSubmit,
children: $l('Table', 'save_button'),
type: ButtonType.submit,
disabled: disabled
};
case TableButtonType["delete"]:
return {
icon: 'delete',
onClick: this.handleButtonDelete,
children: $l('Table', 'delete_button'),
disabled: disabled || dataSet.selected.length === 0
};
case TableButtonType.remove:
return {
icon: 'remove_circle',
onClick: this.handleButtonRemove,
children: $l('Table', 'remove_button'),
disabled: disabled || dataSet.selected.length === 0
};
case TableButtonType.reset:
return {
icon: 'undo',
onClick: this.handleButtonReset,
children: $l('Table', 'reset_button'),
type: ButtonType.reset
};
case TableButtonType.query:
return {
icon: 'search',
onClick: this.handleQuery,
children: $l('Table', 'query_button')
};
case TableButtonType["export"]:
return {
icon: 'export',
onClick: this.handleButtonExport,
children: $l('Table', 'export_button')
};
case TableButtonType.expandAll:
return isTree ? {
icon: 'add_box',
onClick: this.handleExpandAll,
children: $l('Table', 'expand_button')
} : undefined;
case TableButtonType.collapseAll:
return isTree ? {
icon: 'short_text',
onClick: this.handleCollapseAll,
children: $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 = _objectSpread(_objectSpread({}, tableStore.getConfig('queryBarProps')), queryBarProps);
var summaryFieldsLimits = summaryFieldsLimit || tableQueryBarProps && tableQueryBarProps.summaryFieldsLimit || 3;
var fieldTypeArr = [FieldType.currency, FieldType.number];
return summary.reduce(function (list, summaryCol, index) {
var hasSeparate = length > summaryFieldsLimits || index !== summaryLength - 1;
if (isString(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 (isNumber(n) || math.isBigNumber(n)) {
return math.plus(sum, n);
}
return sum;
}, 0);
var name = field.get('name');
var label = field.get('label');
var sumNode = math.isBigNumber(summaryValue) ? math.toString(summaryValue) : summaryValue;
list.push( /*#__PURE__*/React.createElement("div", {
key: name
}, /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-summary-col"),
style: {
width: summaryBarFieldWidth
}
}, /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-summary-col-label"),
title: String(label)
}, label, ":"), /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-summary-col-value"),
title: String(sumNode)
}, sumNode)), hasSeparate && /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-summary-col-separate")
}, /*#__PURE__*/React.createElement("div", null))));
}
} else if (typeof summaryCol === 'function') {
var summaryObj = summaryCol({
summaryFieldsLimit: summaryFieldsLimits,
summaryBarFieldWidth: summaryBarFieldWidth,
dataSet: dataSet
});
list.push( /*#__PURE__*/React.createElement("div", {
key: isString(summaryObj.label) ? summaryObj.label : ''
}, /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-summary-col"),
style: {
width: summaryBarFieldWidth
}
}, /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-summary-col-label"),
title: isString(summaryObj.label) ? summaryObj.label : ''
}, summaryObj.label, ":"), /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-summary-col-value"),
title: isString(summaryObj.value) || isNumber(summaryObj.value) ? summaryObj.value.toString() : ''
}, summaryObj.value)), hasSeparate && /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-summary-col-separate")
}, /*#__PURE__*/React.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.createElement("div", {
className: "".concat(prefixCls, "-summary-button-more")
}, /*#__PURE__*/React.createElement("a", {
onClick: function onClick() {
return _this4.openMore(summary);
}
}, $l('Table', 'more'), this.moreSummary && this.moreSummary.length ? /*#__PURE__*/React.createElement(Icon, {
type: 'expand_less'
}) : /*#__PURE__*/React.createElement(Icon, {
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 = _objectSpread(_objectSpread({}, 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.createElement("div", {
className: "".concat(prefixCls, "-summary-group-wrapper")
}, /*#__PURE__*/React.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 (isArrayLike(button)) {
props = button[1] || {};
button = button[0];
}
if (isString(button) && button in TableButtonType) {
var _props = props,
afterClick = _props.afterClick,
buttonProps = _objectWithoutProperties(_props, _excluded);
var defaultButtonProps = _this5.getButtonProps(button);
if (defaultButtonProps) {
if (afterClick) {
var onClick = defaultButtonProps.onClick;
defaultButtonProps.onClick = /*#__PURE__*/function () {
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(e) {
return _regeneratorRuntime.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.createElement(Menu.Item, {
hidden: tableButtonProps.hidden,
key: button
}, /*#__PURE__*/React.createElement(Button, _extends({
key: "".concat(button, "-btn")
}, tableButtonProps, defaultButtonProps, buttonProps, {
funcType: FuncType.link
}))));
}
} else if ( /*#__PURE__*/isValidElement(button)) {
children.push( /*#__PURE__*/React.createElement(Menu.Item, {
hidden: button.props.hidden,
key: button.key
}, /*#__PURE__*/cloneElement(button, _objectSpread(_objectSpread(_objectSpread({}, tableButtonProps), button.props), {}, {
funcType: FuncType.link
}))));
} else if (isObject(button)) {
children.push( /*#__PURE__*/React.createElement(Menu.Item, {
hidden: props.hidden,
key: button.key
}, /*#__PURE__*/React.createElement(Button, _extends({}, tableButtonProps, button, {
funcType: FuncType.link
}))));
}
});
}
var menu = /*#__PURE__*/React.createElement(Menu, {
prefixCls: "".concat(prefixCls, "-dropdown-menu")
}, children);
return /*#__PURE__*/React.createElement(Dropdown, {
overlay: menu,
key: "dropdown_button"
}, /*#__PURE__*/React.createElement(Button, _extends({}, tableButtonProps, {
key: "more_button"
}), /*#__PURE__*/React.createElement("span", null, $l('Table', 'more')), /*#__PURE__*/React.createElement(Icon, {
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(_toConsumableArray(buttons || []));
}
var hasCombineSort = queryBar !== TableQueryBarType.filterBar && dataSet.props.combineSort;
if (hasCombineSort) {
var sortableFieldNames = this.getSortableFieldNames();
if (sortableFieldNames.length > 0) {
buttons = [/*#__PURE__*/React.createElement(CombineSort, {
key: "CombineSort",
dataSet: dataSet,
prefixCls: prefixCls,
sortableFieldNames: sortableFieldNames
})].concat(_toConsumableArray(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 (isArrayLike(button)) {
props = button[1] || {};
button = button[0];
}
if (isString(button) && button in TableButtonType) {
var _props2 = props,
afterClick = _props2.afterClick,
buttonProps = _objectWithoutProperties(_props2, _excluded2);
var defaultButtonProps = _this6.getButtonProps(button);
if (defaultButtonProps) {
if (afterClick) {
var onClick = defaultButtonProps.onClick;
defaultButtonProps.onClick = /*#__PURE__*/function () {
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(e) {
return _regeneratorRuntime.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.createElement(Button, _extends({
key: button
}, tableButtonProps, defaultButtonProps, buttonProps)));
}
} else if ( /*#__PURE__*/isValidElement(button)) {
children.push( /*#__PURE__*/cloneElement(button, _objectSpread(_objectSpread({}, tableButtonProps), button.props)));
} else if (isObject(button)) {
children.push( /*#__PURE__*/React.createElement(Button, _extends({}, 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 isString(button) && button in TableButtonType;
}) && dataSet.status !== 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 === TableQueryBarType.filterBar) {
var placeholder = /*#__PURE__*/isValidElement(element) && element.props.placeholder ? element.props.placeholder : getPlaceholderByField(field, current);
var clearButton = /*#__PURE__*/isValidElement(element) && element.props.clearButton !== undefined ? element.props.clearButton : true;
filterBarProps = {
placeholder: placeholder,
border: false,
clearButton: clearButton
};
}
var props = _objectSpread({
key: name,
name: name,
dataSet: queryDataSet,
isFlat: queryBar === TableQueryBarType.filterBar
}, filterBarProps);
result.push( /*#__PURE__*/isValidElement(element) ? /*#__PURE__*/cloneElement(element, props) : /*#__PURE__*/cloneElement(getEditorByField(field, current, queryBar !== TableQueryBarType.professionalBar, queryBar === TableQueryBarType.filterBar || queryBar === TableQueryBarType.comboBar), _objectSpread(_objectSpread({}, props), isObject(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 = 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 _toConsumableArray(sortableFieldNames);
}
}, {
key: "renderToolBar",
value: function renderToolBar(props) {
var prefixCls = this.context.prefixCls;
return /*#__PURE__*/React.createElement(TableToolBar, _extends({
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.createElement(TableFilterBar, _extends({
key: "toolbar",
prefixCls: prefixCls,
paramName: filterBarFieldName,
placeholder: filterBarPlaceholder
}, props));
}
}, {
key: "renderAdvancedQueryBar",
value: function renderAdvancedQueryBar(props) {
var prefixCls = this.context.prefixCls;
return /*#__PURE__*/React.createElement(TableAdvancedQueryBar, _extends({
key: "toolbar",
prefixCls: prefixCls
}, props));
}
}, {
key: "renderProfessionalBar",
value: function renderProfessionalBar(props) {
var prefixCls = this.context.prefixCls;
return /*#__PURE__*/React.createElement(TableProfessionalBar, _extends({
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.createElement(TableDynamicFilterBar, _extends({
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.createElement(TableComboBar, _extends({
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 = _objectSpread(_objectSpread({}, tableStore.getConfig('queryBarProps')), queryBarProps);
var onReset = typeof tableQueryBarProps.onReset === 'function' ? tableQueryBarProps.onReset : noop;
var onQuery = typeof tableQueryBarProps.onQuery === 'function' ? tableQueryBarProps.onQuery : noop;
var queryFieldsLimits = queryFieldsLimit || tableQueryBarProps.queryFieldsLimit;
var summaryFieldsLimits = summaryFieldsLimit || tableQueryBarProps.summaryFieldsLimit || 3;
var props = _objectSpread(_objectSpread({}, 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 TableQueryBarType.normal:
return this.renderToolBar(props);
case TableQueryBarType.bar:
return this.renderFilterBar(props);
case TableQueryBarType.advancedBar:
return this.renderAdvancedQueryBar(props);
case TableQueryBarType.professionalBar:
return this.renderProfessionalBar(props);
case TableQueryBarType.filterBar:
return this.renderDynamicFilterBar(props);
case TableQueryBarType.comboBar:
return this.renderComboBar(props);
default:
}
}
return [/*#__PURE__*/React.createElement(TableButtons, {
key: "toolbar",
prefixCls: prefixCls,
buttons: buttons
}, summaryBar), pagination];
}
}], [{
key: "contextType",
get: function get() {
return TableContext;
}
}]);
return TableQueryBar;
}(Component);
TableQueryBar.displayName = 'TableQueryBar';
TableQueryBar.defaultProps = {
summaryBarFieldWidth: 170
};
__decorate([observable], TableQueryBar.prototype, "moreSummary", void 0);
__decorate([autobind], TableQueryBar.prototype, "handleButtonCreate", null);
__decorate([autobind], TableQueryBar.prototype, "handleButtonSubmit", null);
__decorate([autobind], TableQueryBar.prototype, "handleButtonDelete", null);
__decorate([autobind], TableQueryBar.prototype, "handleButtonRemove", null);
__decorate([autobind], TableQueryBar.prototype, "handleButtonReset", null);
__decorate([autobind], TableQueryBar.prototype, "handleQueryReset", null);
__decorate([autobind], TableQueryBar.prototype, "handleExpandAll", null);
__decorate([autobind], TableQueryBar.prototype, "handleCollapseAll", null);
__decorate([autobind], TableQueryBar.prototype, "handleChangeExportStrategy", null);
__decorate([autobind], TableQueryBar.prototype, "handleButtonExport", null);
__decorate([autobind], TableQueryBar.prototype, "handleQuery", null);
__decorate([autobind], TableQueryBar.prototype, "handleExport", null);
__decorate([autobind, action], TableQueryBar.prototype, "handleExportButton", null);
__decorate([action], TableQueryBar.prototype, "openMore", void 0);
__decorate([autobind], TableQueryBar.prototype, "expandTree", null);
__decorate([autobind], TableQueryBar.prototype, "collapseTree", null);
TableQueryBar = __decorate([observer], TableQueryBar);
export default TableQueryBar;
//# sourceMappingURL=index.js.map