UNPKG

@aliretail/react-materials-components

Version:
149 lines (121 loc) 6.42 kB
import _extends from "@babel/runtime/helpers/extends"; import _inheritsLoose from "@babel/runtime/helpers/inheritsLoose"; import _Table from "@alifd/next/es/table"; import * as React from 'react'; import * as R from 'ramda'; import numvert from 'numvert'; import { TableConsumer } from "../../TableContext"; import { renderColumns, getValidElement, EmptyBlock } from "./utils"; var GroupHeader = _Table.GroupHeader, GroupFooter = _Table.GroupFooter; var AliretailTable = /*#__PURE__*/function (_React$Component) { _inheritsLoose(AliretailTable, _React$Component); function AliretailTable() { var _this; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this; _this.renderBodyByColumns = function () { var _this$props = _this.props, columns = _this$props.columns, resizable = _this$props.resizable, bakColumns = _this$props.bakColumns, children = _this$props.children; // 如果使用 children 注入模式,则不使用 column 配置 if (!columns || children) return null; return renderColumns(columns, { resizable: resizable, bakColumns: bakColumns }); }; _this.onResizeChange = function (dataIndex, width) { var _this$props2 = _this.props, columns = _this$props2.columns, tableStateChange = _this$props2.tableStateChange; columns.map(function (columnItem) { if (columnItem.dataIndex === dataIndex) { columnItem.resizeWidth = columnItem.resizeWidth ? columnItem.resizeWidth + width : (columnItem.width || 200) + width; } return columnItem; }); tableStateChange({ columns: columns }); }; return _this; } var _proto = AliretailTable.prototype; _proto.render = function render() { var _this$props3 = this.props, groupHeader = _this$props3.groupHeader, groupFooter = _this$props3.groupFooter, emptyContent = _this$props3.emptyContent, resizable = _this$props3.resizable, stickyLock = _this$props3.stickyLock; // 将特殊设定的 props 排除 var tableProps = R.omit(['groupHeader', 'groupFooter', 'columns', 'resizable', 'emptyContent', 'onResizeChange', 'tableState', 'tableStateChange', 'bakColumns', 'containerId', 'hasTableSetting', 'i18nBundle', 'stickyLock'], this.props); // children 组装 var body = this.renderBodyByColumns(); var groupHeaderNode = getValidElement(groupHeader, function () { return /*#__PURE__*/React.createElement(GroupHeader, groupHeader); }); var groupFooterNode = getValidElement(groupFooter, function () { return /*#__PURE__*/React.createElement(GroupFooter, groupFooter); }); var children = body ? [groupFooterNode, groupFooterNode].concat(body) : [groupHeaderNode, groupFooterNode]; // table 属性 var externalProps = { hasBorder: false, emptyContent: emptyContent, onResizeChange: null }; if (resizable) { externalProps.hasBorder = true; externalProps.onResizeChange = this.onResizeChange; } var selectionDisplay; // 当 selectedTooltip === true 时的显示,自动根据传入的 selectedRowKeys 来显示值 if (tableProps.rowSelection && tableProps.rowSelection.selectedTooltip !== false && Array.isArray(tableProps.rowSelection.selectedRowKeys) && tableProps.rowSelection.selectedRowKeys.length > 0) { selectionDisplay = /*#__PURE__*/React.createElement("div", { className: "aliretail-table-selection" }, "\u5DF2\u9009\u62E9", /*#__PURE__*/React.createElement("span", { className: "aliretail-table-selection-number" }, numvert(tableProps.rowSelection.selectedRowKeys.length).format('0,0')), "\u9879"); } // 当 selectedTooltip 为数字时的显示,此时为受控模式,直接显示对应的数字 if (tableProps.rowSelection && !isNaN(parseFloat(tableProps.rowSelection.selectedTooltip))) { selectionDisplay = /*#__PURE__*/React.createElement("div", { className: "aliretail-table-selection" }, "\u5DF2\u9009\u62E9", /*#__PURE__*/React.createElement("span", { className: "aliretail-table-selection-number" }, numvert(tableProps.rowSelection.selectedTooltip).format('0,0')), "\u9879"); } var TableComp = _Table; if (stickyLock) { TableComp = _Table.StickyLock; } return /*#__PURE__*/React.createElement("div", { className: "aliretail-table-table", "data-name": "AliretailTable" }, selectionDisplay, /*#__PURE__*/React.createElement(TableComp, _extends({}, externalProps, tableProps), children)); }; return AliretailTable; }(React.Component); AliretailTable.defaultProps = { resizable: false, emptyContent: EmptyBlock }; var withContextTable = function withContextTable(Comp) { return function (props) { // props 为组件直接传入的 props 一般不需要使用此 props return /*#__PURE__*/React.createElement(TableConsumer, null, function (context) { // TODO: 根据需要的 props 之后需要做 optimize var tableProps = R.filter(function (n) { return !R.isNil(n); }, R.pickAll([// 原生 props 'size', 'dataSource', 'onRowClick', 'onRowMouseEnter', 'onRowMouseLeave', 'onSort', 'onFilter', 'rowProps', 'cellProps', 'hasBorder', 'hasHeader', 'isZebra', 'loading', 'loadingComponent', 'filterParams', 'sort', 'sortIcons', 'emptyContent', 'primaryKey', 'expandedRowRender', 'expandedRowIndent', 'openRowKeys', 'hasExpandedRowCtrl', 'getExpandedColProps', 'rowExpandable', 'onRowOpen', 'fixedHeader', 'maxBodyHeight', 'tableWidth', 'rowSelection', 'stickyHeader', 'offsetTop', 'affixProps', 'indent', 'isTree', 'useVirtual', 'onBodyScroll', 'expandedIndexSimulate', 'crossline', 'tableLayout', // 拓展 props 'columns', 'stickyLock', 'groupHeader', 'groupFooter', 'resizable', 'tableState', 'tableStateChange'], context)); var combineTableProps = _extends({}, tableProps, tableProps.tableState, props, { tableStateChange: tableProps.tableStateChange, bakColumns: tableProps.columns }); return /*#__PURE__*/React.createElement(Comp, combineTableProps); }); }; }; export default withContextTable(AliretailTable);