"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 _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _objectSpread4 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); require("antd/lib/table/style"); require("antd/lib/typography/style"); var _proCard = _interopRequireDefault(require("@ant-design/pro-card")); var _proForm = _interopRequireWildcard(require("@ant-design/pro-form")); var _proProvider = require("@ant-design/pro-provider"); var _proUtils = require("@ant-design/pro-utils"); var _antd = require("antd"); var _classnames = _interopRequireDefault(require("classnames")); var _isEmpty = _interopRequireDefault(require("lodash/isEmpty")); var _isEqual = _interopRequireDefault(require("lodash/isEqual")); var _react = _interopRequireWildcard(require("react")); var _Provide = require("./Store/Provide"); var _Alert = _interopRequireDefault(require("./components/Alert")); var _Form = _interopRequireDefault(require("./components/Form")); var _ToolBar = _interopRequireDefault(require("./components/ToolBar")); var _style3 = require("./style"); var _useFetchData = _interopRequireDefault(require("./useFetchData")); var _utils = require("./utils"); var _columnSort = require("./utils/columnSort"); var _genProColumnToColumn = require("./utils/genProColumnToColumn"); var _jsxRuntime = require("react/jsx-runtime"); var _excluded = ["rowKey", "tableClassName", "defaultClassName", "action", "tableColumn", "type", "pagination", "rowSelection", "size", "defaultSize", "tableStyle", "toolbarDom", "hideToolbar", "searchNode", "style", "cardProps", "alertDom", "name", "onSortChange", "onFilterChange", "options", "isLightFilter", "className", "cardBordered", "editableUtils", "getRowKey"], _excluded2 = ["cardBordered", "request", "className", "params", "defaultData", "headerTitle", "postData", "ghost", "pagination", "actionRef", "columns", "toolBarRender", "optionsRender", "onLoad", "onRequestError", "style", "cardProps", "tableStyle", "tableClassName", "columnsStateMap", "onColumnsStateChange", "options", "search", "name", "onLoadingChange", "rowSelection", "beforeSearchSubmit", "tableAlertRender", "defaultClassName", "formRef", "type", "columnEmptyText", "toolbar", "rowKey", "manualRequest", "polling", "tooltip", "revalidateOnFocus", "searchFormRender"]; // 兼容代码----------- //---------------------- function TableRender(props) { var rowKey = props.rowKey, tableClassName = props.tableClassName, defaultClassName = props.defaultClassName, action = props.action, tableColumns = props.tableColumn, type = props.type, pagination = props.pagination, rowSelection = props.rowSelection, size = props.size, defaultSize = props.defaultSize, tableStyle = props.tableStyle, toolbarDom = props.toolbarDom, hideToolbar = props.hideToolbar, searchNode = props.searchNode, style = props.style, propsCardProps = props.cardProps, alertDom = props.alertDom, name = props.name, onSortChange = props.onSortChange, onFilterChange = props.onFilterChange, options = props.options, isLightFilter = props.isLightFilter, className = props.className, cardBordered = props.cardBordered, editableUtils = props.editableUtils, getRowKey = props.getRowKey, rest = (0, _objectWithoutProperties2.default)(props, _excluded); var counter = (0, _react.useContext)(_Provide.TableContext); /** 需要遍历一下,不然不支持嵌套表格 */ var columns = (0, _react.useMemo)(function () { var loopFilter = function loopFilter(column) { return column.map(function (item) { // 删掉不应该显示的 var columnKey = (0, _utils.genColumnKey)(item.key, item.index); var config = counter.columnsMap[columnKey]; if (config && config.show === false) { return false; } if (item.children) { return (0, _objectSpread4.default)((0, _objectSpread4.default)({}, item), {}, { children: loopFilter(item.children) }); } return item; }).filter(Boolean); }; return loopFilter(tableColumns); }, [counter.columnsMap, tableColumns]); /** * 如果是分页的新增,总是加到最后一行 * * @returns */ var editableDataSource = function editableDataSource(dataSource) { var _ref = editableUtils.newLineRecord || {}, newLineOptions = _ref.options, row = _ref.defaultValue; var isNewLineRecordAtTop = (newLineOptions === null || newLineOptions === void 0 ? void 0 : newLineOptions.position) === 'top'; if (newLineOptions !== null && newLineOptions !== void 0 && newLineOptions.parentKey) { var _recordKeyToString, _props$expandable; var actionProps = { data: dataSource, getRowKey: getRowKey, row: (0, _objectSpread4.default)((0, _objectSpread4.default)({}, row), {}, { map_row_parentKey: (_recordKeyToString = (0, _proUtils.recordKeyToString)(newLineOptions.parentKey)) === null || _recordKeyToString === void 0 ? void 0 : _recordKeyToString.toString() }), key: newLineOptions === null || newLineOptions === void 0 ? void 0 : newLineOptions.recordKey, childrenColumnName: ((_props$expandable = props.expandable) === null || _props$expandable === void 0 ? void 0 : _props$expandable.childrenColumnName) || 'children' }; return (0, _proUtils.editableRowByKey)(actionProps, isNewLineRecordAtTop ? 'top' : 'update'); } if (isNewLineRecordAtTop) { return [row].concat((0, _toConsumableArray2.default)(action.dataSource)); } // 如果有分页的功能,我们加到这一页的末尾 if (pagination && pagination !== null && pagination !== void 0 && pagination.current && pagination !== null && pagination !== void 0 && pagination.pageSize) { var newDataSource = (0, _toConsumableArray2.default)(action.dataSource); if ((pagination === null || pagination === void 0 ? void 0 : pagination.pageSize) > newDataSource.length) { newDataSource.push(row); return newDataSource; } newDataSource.splice((pagination === null || pagination === void 0 ? void 0 : pagination.current) * (pagination === null || pagination === void 0 ? void 0 : pagination.pageSize) - 1, 0, row); return newDataSource; } return [].concat((0, _toConsumableArray2.default)(action.dataSource), [row]); }; var getTableProps = function getTableProps() { return (0, _objectSpread4.default)((0, _objectSpread4.default)({}, rest), {}, { size: size, rowSelection: rowSelection === false ? undefined : rowSelection, className: tableClassName, style: tableStyle, columns: columns, loading: action.loading, dataSource: editableUtils.newLineRecord ? editableDataSource(action.dataSource) : action.dataSource, pagination: pagination, onChange: function onChange(changePagination, filters, sorter, extra) { var _rest$onChange; (_rest$onChange = rest.onChange) === null || _rest$onChange === void 0 || _rest$onChange.call(rest, changePagination, filters, sorter, extra); onFilterChange((0, _proUtils.omitUndefined)(filters)); // 制造筛选的数据 // 制造一个排序的数据 if (Array.isArray(sorter)) { var _omitUndefined; var data = sorter.reduce(function (pre, value) { return (0, _objectSpread4.default)((0, _objectSpread4.default)({}, pre), {}, (0, _defineProperty2.default)({}, "".concat(value.field), value.order)); }, {}); onSortChange((_omitUndefined = (0, _proUtils.omitUndefined)(data)) !== null && _omitUndefined !== void 0 ? _omitUndefined : {}); } else { var _sorter$column, _omitUndefined2; var sorterOfColumn = (_sorter$column = sorter.column) === null || _sorter$column === void 0 ? void 0 : _sorter$column.sorter; var isSortByField = (sorterOfColumn === null || sorterOfColumn === void 0 ? void 0 : sorterOfColumn.toString()) === sorterOfColumn; onSortChange((_omitUndefined2 = (0, _proUtils.omitUndefined)((0, _defineProperty2.default)({}, "".concat(isSortByField ? sorterOfColumn : sorter.field), sorter.order))) !== null && _omitUndefined2 !== void 0 ? _omitUndefined2 : {}); } } }); }; /** * 是否需要 card 来包裹 */ var notNeedCardDom = (0, _react.useMemo)(function () { if (props.search === false && !props.headerTitle && props.toolBarRender === false) { return true; } return false; }, []); /** 默认的 table dom,如果是编辑模式,外面还要包个 form */ var baseTableDom = /*#__PURE__*/(0, _jsxRuntime.jsx)(_proForm.GridContext.Provider, { value: { grid: false, colProps: undefined, rowProps: undefined }, children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_antd.Table, (0, _objectSpread4.default)((0, _objectSpread4.default)({}, getTableProps()), {}, { rowKey: rowKey })) }); /** 自定义的 render */ var tableDom = props.tableViewRender ? props.tableViewRender((0, _objectSpread4.default)((0, _objectSpread4.default)({}, getTableProps()), {}, { rowSelection: rowSelection !== false ? rowSelection : undefined }), baseTableDom) : baseTableDom; /** * 这段代码使用了 useMemo 进行了性能优化,根据 props.editable 和 props.name 的不同情况,渲染不同的页面组件。 * 当 props.editable 为 true 并且 props.name 不存在时,渲染一个带有表单和工具栏的页面组件,否则只渲染工具栏和表格组件。 * renderContent 函数会在 alertDom、props.loading、props.editable、tableDom、toolbarDom 发生变化时重新执行。 * */ var tableContentDom = (0, _react.useMemo)(function () { if (props.editable && !props.name) { var _props$editable, _props$editable2, _props$editable3; return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, { children: [toolbarDom, alertDom, /*#__PURE__*/(0, _react.createElement)(_proForm.default, (0, _objectSpread4.default)((0, _objectSpread4.default)({}, (_props$editable = props.editable) === null || _props$editable === void 0 ? void 0 : _props$editable.formProps), {}, { formRef: (_props$editable2 = props.editable) === null || _props$editable2 === void 0 || (_props$editable2 = _props$editable2.formProps) === null || _props$editable2 === void 0 ? void 0 : _props$editable2.formRef, component: false, form: (_props$editable3 = props.editable) === null || _props$editable3 === void 0 ? void 0 : _props$editable3.form, onValuesChange: editableUtils.onValuesChange, key: "table", submitter: false, omitNil: false, dateFormatter: props.dateFormatter }), tableDom)] }); } return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, { children: [toolbarDom, alertDom, tableDom] }); // eslint-disable-next-line react-hooks/exhaustive-deps }, [alertDom, props.loading, !!props.editable, tableDom, toolbarDom]); var cardBodyStyle = (0, _react.useMemo)(function () { if (propsCardProps === false || notNeedCardDom === true || !!props.name) return {}; if (hideToolbar) { return { padding: 0 }; } if (toolbarDom) { return { paddingBlockStart: 0 }; } if (toolbarDom && pagination === false) { return { paddingBlockStart: 0 }; } // if (!toolbarDom) return { padding: 0 }; }, [notNeedCardDom, pagination, props.name, propsCardProps, toolbarDom, hideToolbar]); /** Table 区域的 dom,为了方便 render */ var tableAreaDom = // cardProps 或者 有了name 就不需要这个padding了,不然会导致不好对齐 propsCardProps === false || notNeedCardDom === true || !!props.name ? tableContentDom : /*#__PURE__*/(0, _jsxRuntime.jsx)(_proCard.default, (0, _objectSpread4.default)((0, _objectSpread4.default)({ ghost: props.ghost, bordered: (0, _utils.isBordered)('table', cardBordered), bodyStyle: cardBodyStyle }, propsCardProps), {}, { children: tableContentDom })); var renderTable = function renderTable() { if (props.tableRender) { return props.tableRender(props, tableAreaDom, { toolbar: toolbarDom || undefined, alert: alertDom || undefined, table: tableDom || undefined }); } return tableAreaDom; }; var proTableDom = /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", { className: (0, _classnames.default)(className, (0, _defineProperty2.default)({}, "".concat(defaultClassName, "-polling"), action.pollingLoading)), style: style, ref: counter.rootDomRef, children: [isLightFilter ? null : searchNode, type !== 'form' && props.tableExtraRender && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", { className: (0, _classnames.default)(className, "".concat(defaultClassName, "-extra")), children: props.tableExtraRender(props, action.dataSource || []) }), type !== 'form' && renderTable()] }); // 如果不需要的全屏,ConfigProvider 没有意义 if (!options || !(options !== null && options !== void 0 && options.fullScreen)) { return proTableDom; } return /*#__PURE__*/(0, _jsxRuntime.jsx)(_antd.ConfigProvider, { getPopupContainer: function getPopupContainer() { return counter.rootDomRef.current || document.body; }, children: proTableDom }); } var emptyObj = {}; var ProTable = function ProTable(props) { var _props$expandable2; var cardBordered = props.cardBordered, request = props.request, propsClassName = props.className, _props$params = props.params, params = _props$params === void 0 ? emptyObj : _props$params, defaultData = props.defaultData, headerTitle = props.headerTitle, postData = props.postData, ghost = props.ghost, propsPagination = props.pagination, propsActionRef = props.actionRef, _props$columns = props.columns, propsColumns = _props$columns === void 0 ? [] : _props$columns, toolBarRender = props.toolBarRender, optionsRender = props.optionsRender, onLoad = props.onLoad, onRequestError = props.onRequestError, style = props.style, cardProps = props.cardProps, tableStyle = props.tableStyle, tableClassName = props.tableClassName, columnsStateMap = props.columnsStateMap, onColumnsStateChange = props.onColumnsStateChange, options = props.options, search = props.search, isEditorTable = props.name, onLoadingChange = props.onLoadingChange, _props$rowSelection = props.rowSelection, propsRowSelection = _props$rowSelection === void 0 ? false : _props$rowSelection, beforeSearchSubmit = props.beforeSearchSubmit, tableAlertRender = props.tableAlertRender, defaultClassName = props.defaultClassName, propRef = props.formRef, _props$type = props.type, type = _props$type === void 0 ? 'table' : _props$type, _props$columnEmptyTex = props.columnEmptyText, columnEmptyText = _props$columnEmptyTex === void 0 ? '-' : _props$columnEmptyTex, toolbar = props.toolbar, rowKey = props.rowKey, manualRequest = props.manualRequest, polling = props.polling, tooltip = props.tooltip, _props$revalidateOnFo = props.revalidateOnFocus, revalidateOnFocus = _props$revalidateOnFo === void 0 ? false : _props$revalidateOnFo, searchFormRender = props.searchFormRender, rest = (0, _objectWithoutProperties2.default)(props, _excluded2); var _useStyle = (0, _style3.useStyle)(props.defaultClassName), wrapSSR = _useStyle.wrapSSR, hashId = _useStyle.hashId; var className = (0, _classnames.default)(defaultClassName, propsClassName, hashId); /** 通用的来操作子节点的工具类 */ var actionRef = (0, _react.useRef)(); var defaultFormRef = (0, _react.useRef)(); var formRef = propRef || defaultFormRef; (0, _react.useImperativeHandle)(propsActionRef, function () { return actionRef.current; }); /** 单选多选的相关逻辑 */ var _useMountMergeState = (0, _proUtils.useMountMergeState)(propsRowSelection ? (propsRowSelection === null || propsRowSelection === void 0 ? void 0 : propsRowSelection.defaultSelectedRowKeys) || [] : undefined, { value: propsRowSelection ? propsRowSelection.selectedRowKeys : undefined }), _useMountMergeState2 = (0, _slicedToArray2.default)(_useMountMergeState, 2), selectedRowKeys = _useMountMergeState2[0], setSelectedRowKeys = _useMountMergeState2[1]; var _useMountMergeState3 = (0, _proUtils.useMountMergeState)(function () { // 如果手动模式,或者 search 不存在的时候设置为 undefined // undefined 就不会触发首次加载 if (manualRequest || search !== false) { return undefined; } return {}; }), _useMountMergeState4 = (0, _slicedToArray2.default)(_useMountMergeState3, 2), formSearch = _useMountMergeState4[0], setFormSearch = _useMountMergeState4[1]; var _useMountMergeState5 = (0, _proUtils.useMountMergeState)({}), _useMountMergeState6 = (0, _slicedToArray2.default)(_useMountMergeState5, 2), proFilter = _useMountMergeState6[0], setProFilter = _useMountMergeState6[1]; var _useMountMergeState7 = (0, _proUtils.useMountMergeState)({}), _useMountMergeState8 = (0, _slicedToArray2.default)(_useMountMergeState7, 2), proSort = _useMountMergeState8[0], setProSort = _useMountMergeState8[1]; // 平铺所有columns, 用于判断是用的是本地筛选/排序 var loopColumns = (0, _react.useCallback)(function (data) { var _columns = []; for (var i = 0; i < data.length; i++) { var _curItem = data[i]; if (_curItem.children) { loopColumns(_curItem.children); } else { _columns.push(_curItem); } } return _columns; }, []); /** 如果所有列中的 filters = true | undefined 说明是用的是本地筛选 任何一列配置 filters=false,就能绕过这个判断 */ var useLocaleFilter = (0, _react.useMemo)(function () { var _columns = loopColumns(propsColumns); return _columns === null || _columns === void 0 ? void 0 : _columns.every(function (column) { return !!column.filters && !!column.onFilter || column.filters === undefined && column.onFilter === undefined; }); }, [loopColumns, propsColumns]); /** 如果所有列中的 sorter != true 说明是用的是本地排序 任何一列配置 sorter=true,就能绕过这个判断 */ var useLocaleSorter = (0, _react.useMemo)(function () { var _columns = loopColumns(propsColumns); return _columns === null || _columns === void 0 ? void 0 : _columns.every(function (column) { return column.sorter !== true; }); }, [loopColumns, propsColumns]); /** 设置默认的服務端排序和筛选值 */ (0, _react.useEffect)(function () { var _parseDefaultColumnCo = (0, _utils.parseDefaultColumnConfig)(propsColumns), sort = _parseDefaultColumnCo.sort, filter = _parseDefaultColumnCo.filter; if (!useLocaleFilter) setProFilter(filter); if (!useLocaleSorter) setProSort(sort); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); var intl = (0, _proProvider.useIntl)(); /** 需要初始化 不然默认可能报错 这里取了 defaultCurrent 和 current 为了保证不会重复刷新 */ var fetchPagination = (0, _typeof2.default)(propsPagination) === 'object' ? propsPagination : { defaultCurrent: 1, defaultPageSize: 20, pageSize: 20, current: 1 }; var counter = (0, _react.useContext)(_Provide.TableContext); // ============================ useFetchData ============================ var fetchData = (0, _react.useMemo)(function () { if (!request) return undefined; return /*#__PURE__*/function () { var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(pageParams) { var actionParams, response; return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: actionParams = (0, _objectSpread4.default)((0, _objectSpread4.default)((0, _objectSpread4.default)({}, pageParams || {}), formSearch), params); // eslint-disable-next-line no-underscore-dangle delete actionParams._timestamp; _context.next = 4; return request(actionParams, proSort, proFilter); case 4: response = _context.sent; return _context.abrupt("return", response); case 6: case "end": return _context.stop(); } }, _callee); })); return function (_x) { return _ref2.apply(this, arguments); }; }(); }, [formSearch, params, proFilter, proSort, request]); var action = (0, _useFetchData.default)(fetchData, defaultData, { pageInfo: propsPagination === false ? false : fetchPagination, loading: props.loading, dataSource: props.dataSource, onDataSourceChange: props.onDataSourceChange, onLoad: onLoad, onLoadingChange: onLoadingChange, onRequestError: onRequestError, postData: postData, revalidateOnFocus: revalidateOnFocus, manual: formSearch === undefined, polling: polling, effects: [(0, _proUtils.stringify)(params), (0, _proUtils.stringify)(formSearch), (0, _proUtils.stringify)(proFilter), (0, _proUtils.stringify)(proSort)], debounceTime: props.debounceTime, onPageInfoChange: function onPageInfoChange(pageInfo) { var _propsPagination$onCh, _propsPagination$onSh; if (!propsPagination || !fetchData) return; // 总是触发一下 onChange 和 onShowSizeChange // 目前只有 List 和 Table 支持分页, List 有分页的时候打断 Table 的分页 propsPagination === null || propsPagination === void 0 || (_propsPagination$onCh = propsPagination.onChange) === null || _propsPagination$onCh === void 0 || _propsPagination$onCh.call(propsPagination, pageInfo.current, pageInfo.pageSize); propsPagination === null || propsPagination === void 0 || (_propsPagination$onSh = propsPagination.onShowSizeChange) === null || _propsPagination$onSh === void 0 || _propsPagination$onSh.call(propsPagination, pageInfo.current, pageInfo.pageSize); } }); // ============================ END ============================ /** 聚焦的时候重新请求数据,这样可以保证数据都是最新的。 */ (0, _react.useEffect)(function () { var _props$form; // 手动模式和 request 为空都不生效 if (props.manualRequest || !props.request || !revalidateOnFocus || (_props$form = props.form) !== null && _props$form !== void 0 && _props$form.ignoreRules) return; // 聚焦时重新请求事件 var visibilitychange = function visibilitychange() { if (document.visibilityState === 'visible') { action.reload(); } }; document.addEventListener('visibilitychange', visibilitychange); return function () { return document.removeEventListener('visibilitychange', visibilitychange); }; // eslint-disable-next-line react-hooks/exhaustive-deps }, []); /** SelectedRowKeys受控处理selectRows */ var preserveRecordsRef = _react.default.useRef(new Map()); // ============================ RowKey ============================ var getRowKey = _react.default.useMemo(function () { if (typeof rowKey === 'function') { return rowKey; } return function (record, index) { var _ref3; if (index === -1) { return record === null || record === void 0 ? void 0 : record[rowKey]; } // 如果 props 中有name 的话,用index 来做行号,这样方便转化为 index if (props.name) { return index === null || index === void 0 ? void 0 : index.toString(); } return (_ref3 = record === null || record === void 0 ? void 0 : record[rowKey]) !== null && _ref3 !== void 0 ? _ref3 : index === null || index === void 0 ? void 0 : index.toString(); }; }, [props.name, rowKey]); (0, _react.useMemo)(function () { var _action$dataSource; if ((_action$dataSource = action.dataSource) !== null && _action$dataSource !== void 0 && _action$dataSource.length) { var keys = action.dataSource.map(function (data) { var dataRowKey = getRowKey(data, -1); preserveRecordsRef.current.set(dataRowKey, data); return dataRowKey; }); return keys; } return []; }, [action.dataSource, getRowKey]); /** 页面编辑的计算 */ var pagination = (0, _react.useMemo)(function () { var newPropsPagination = propsPagination === false ? false : (0, _objectSpread4.default)({}, propsPagination); var pageConfig = (0, _objectSpread4.default)((0, _objectSpread4.default)({}, action.pageInfo), {}, { setPageInfo: function setPageInfo(_ref4) { var pageSize = _ref4.pageSize, current = _ref4.current; var pageInfo = action.pageInfo; // pageSize 发生改变,并且你不是在第一页,切回到第一页 // 这样可以防止出现 跳转到一个空的数据页的问题 if (pageSize === pageInfo.pageSize || pageInfo.current === 1) { action.setPageInfo({ pageSize: pageSize, current: current }); return; } // 通过request的时候清空数据,然后刷新不然可能会导致 pageSize 没有数据多 if (request) action.setDataSource([]); action.setPageInfo({ pageSize: pageSize, // 目前只有 List 和 Table 支持分页, List 有分页的时候 还是使用之前的当前页码 current: type === 'list' ? current : 1 }); } }); if (request && newPropsPagination) { delete newPropsPagination.onChange; delete newPropsPagination.onShowSizeChange; } return (0, _utils.mergePagination)(newPropsPagination, pageConfig, intl); // eslint-disable-next-line react-hooks/exhaustive-deps }, [propsPagination, action, intl]); (0, _proUtils.useDeepCompareEffect)(function () { var _action$pageInfo; // request 存在且params不为空,且已经请求过数据才需要设置。 if (props.request && !(0, _isEmpty.default)(params) && action.dataSource && !(0, _isEqual.default)(action.dataSource, defaultData) && (action === null || action === void 0 || (_action$pageInfo = action.pageInfo) === null || _action$pageInfo === void 0 ? void 0 : _action$pageInfo.current) !== 1) { action.setPageInfo({ current: 1 }); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [params]); // 设置 name 到 store 中,里面用了 ref ,所以不用担心直接 set counter.setPrefixName(props.name); /** 清空所有的选中项 */ var _onCleanSelected = (0, _react.useCallback)(function () { if (propsRowSelection && propsRowSelection.onChange) { propsRowSelection.onChange([], [], { type: 'none' }); } setSelectedRowKeys([]); }, [propsRowSelection, setSelectedRowKeys]); counter.propsRef.current = props; /** 可编辑行的相关配置 */ var editableUtils = (0, _proUtils.useEditableArray)((0, _objectSpread4.default)((0, _objectSpread4.default)({}, props.editable), {}, { tableName: props.name, getRowKey: getRowKey, childrenColumnName: ((_props$expandable2 = props.expandable) === null || _props$expandable2 === void 0 ? void 0 : _props$expandable2.childrenColumnName) || 'children', dataSource: action.dataSource || [], setDataSource: function setDataSource(data) { var _props$editable4, _props$editable4$onVa; (_props$editable4 = props.editable) === null || _props$editable4 === void 0 || (_props$editable4$onVa = _props$editable4.onValuesChange) === null || _props$editable4$onVa === void 0 || _props$editable4$onVa.call(_props$editable4, undefined, data); action.setDataSource(data); } })); // ============================ Render ============================ var _proTheme$useToken = _proProvider.proTheme === null || _proProvider.proTheme === void 0 ? void 0 : _proProvider.proTheme.useToken(), token = _proTheme$useToken.token; /** 绑定 action */ (0, _utils.useActionType)(actionRef, action, { fullScreen: function fullScreen() { var _counter$rootDomRef; if (!((_counter$rootDomRef = counter.rootDomRef) !== null && _counter$rootDomRef !== void 0 && _counter$rootDomRef.current) || !document.fullscreenEnabled) { return; } if (document.fullscreenElement) { document.exitFullscreen(); } else { var _counter$rootDomRef2; (_counter$rootDomRef2 = counter.rootDomRef) === null || _counter$rootDomRef2 === void 0 || _counter$rootDomRef2.current.requestFullscreen(); } }, onCleanSelected: function onCleanSelected() { // 清空选中行 _onCleanSelected(); }, resetAll: function resetAll() { var _formRef$current; // 清空选中行 _onCleanSelected(); var _parseDefaultColumnCo2 = (0, _utils.parseDefaultColumnConfig)(propsColumns), sort = _parseDefaultColumnCo2.sort, filter = _parseDefaultColumnCo2.filter; // 清空筛选 setProFilter(filter); // 清空排序 setProSort(sort); // 清空 toolbar 搜索 counter.setKeyWords(undefined); // 重置页码 action.setPageInfo({ current: 1 }); // 重置表单 formRef === null || formRef === void 0 || (_formRef$current = formRef.current) === null || _formRef$current === void 0 || _formRef$current.resetFields(); setFormSearch({}); }, editableUtils: editableUtils }); /** 同步 action */ counter.setAction(actionRef.current); // ---------- 列计算相关 start ----------------- var tableColumn = (0, _react.useMemo)(function () { var _props$expandable3; return (0, _genProColumnToColumn.genProColumnToColumn)({ columns: propsColumns, counter: counter, columnEmptyText: columnEmptyText, type: type, marginSM: token.marginSM, editableUtils: editableUtils, rowKey: rowKey, childrenColumnName: (_props$expandable3 = props.expandable) === null || _props$expandable3 === void 0 ? void 0 : _props$expandable3.childrenColumnName, proFilter: proFilter, proSort: proSort }).sort((0, _columnSort.columnSort)(counter.columnsMap)); // eslint-disable-next-line react-hooks/exhaustive-deps }, [propsColumns, counter === null || counter === void 0 ? void 0 : counter.sortKeyColumns, counter === null || counter === void 0 ? void 0 : counter.columnsMap, columnEmptyText, type, // eslint-disable-next-line react-hooks/exhaustive-deps editableUtils.editableKeys && editableUtils.editableKeys.join(','), proFilter, proSort]); /** Table Column 变化的时候更新一下,这个参数将会用于渲染 */ (0, _proUtils.useDeepCompareEffectDebounce)(function () { if (tableColumn && tableColumn.length > 0) { // 重新生成key的字符串用于排序 var columnKeys = tableColumn.map(function (item) { return (0, _utils.genColumnKey)(item.key, item.index); }); counter.setSortKeyColumns(columnKeys); } }, [tableColumn], ['render', 'renderFormItem'], 100); /** 同步 Pagination,支持受控的 页码 和 pageSize */ (0, _proUtils.useDeepCompareEffect)(function () { var pageInfo = action.pageInfo; var _ref5 = propsPagination || {}, _ref5$current = _ref5.current, current = _ref5$current === void 0 ? pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.current : _ref5$current, _ref5$pageSize = _ref5.pageSize, pageSize = _ref5$pageSize === void 0 ? pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.pageSize : _ref5$pageSize; if (propsPagination && (current || pageSize) && (pageSize !== (pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.pageSize) || current !== (pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.current))) { action.setPageInfo({ pageSize: pageSize || pageInfo.pageSize, current: current || pageInfo.current }); } }, [propsPagination && propsPagination.pageSize, propsPagination && propsPagination.current]); /** 行选择相关的问题 */ var rowSelection = (0, _objectSpread4.default)((0, _objectSpread4.default)({ selectedRowKeys: selectedRowKeys }, propsRowSelection), {}, { onChange: function onChange(keys, rows, info) { if (propsRowSelection && propsRowSelection.onChange) { propsRowSelection.onChange(keys, rows, info); } setSelectedRowKeys(keys); } }); /** 是不是 LightFilter, LightFilter 有一些特殊的处理 */ var isLightFilter = search !== false && (search === null || search === void 0 ? void 0 : search.filterType) === 'light'; var _onFormSearchSubmit = (0, _react.useCallback)(function (values) { // 判断search.onSearch返回值决定是否更新formSearch if (options && options.search) { var _options$search, _options$search$onSea; var _ref6 = options.search === true ? {} : options.search, _ref6$name = _ref6.name, name = _ref6$name === void 0 ? 'keyword' : _ref6$name; /** 如果传入的 onSearch 返回值为 false,则不要把options.search.name对应的值set到formSearch */ var success = (_options$search = options.search) === null || _options$search === void 0 || (_options$search$onSea = _options$search.onSearch) === null || _options$search$onSea === void 0 ? void 0 : _options$search$onSea.call(_options$search, counter.keyWords); if (success !== false) { setFormSearch((0, _objectSpread4.default)((0, _objectSpread4.default)({}, values), {}, (0, _defineProperty2.default)({}, name, counter.keyWords))); return; } } setFormSearch(values); }, [counter.keyWords, options, setFormSearch]); var loading = (0, _react.useMemo)(function () { if ((0, _typeof2.default)(action.loading) === 'object') { var _action$loading; return ((_action$loading = action.loading) === null || _action$loading === void 0 ? void 0 : _action$loading.spinning) || false; } return action.loading; }, [action.loading]); var searchNode = (0, _react.useMemo)(function () { var node = search === false && type !== 'form' ? null : /*#__PURE__*/(0, _jsxRuntime.jsx)(_Form.default, { pagination: pagination, beforeSearchSubmit: beforeSearchSubmit, action: actionRef, columns: propsColumns, onFormSearchSubmit: function onFormSearchSubmit(values) { _onFormSearchSubmit(values); }, ghost: ghost, onReset: props.onReset, onSubmit: props.onSubmit, loading: !!loading, manualRequest: manualRequest, search: search, form: props.form, formRef: formRef, type: props.type || 'table', cardBordered: props.cardBordered, dateFormatter: props.dateFormatter }); if (searchFormRender && node) { return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, { children: searchFormRender(props, node) }); } else { return node; } }, [beforeSearchSubmit, formRef, ghost, loading, manualRequest, _onFormSearchSubmit, pagination, props, propsColumns, search, searchFormRender, type]); var selectedRows = (0, _react.useMemo)(function () { return selectedRowKeys === null || selectedRowKeys === void 0 ? void 0 : selectedRowKeys.map(function (key) { var _preserveRecordsRef$c; return (_preserveRecordsRef$c = preserveRecordsRef.current) === null || _preserveRecordsRef$c === void 0 ? void 0 : _preserveRecordsRef$c.get(key); }); }, [action.dataSource, selectedRowKeys]); var hideToolbar = (0, _react.useMemo)(function () { return options === false && !headerTitle && !toolBarRender && !toolbar && !isLightFilter; }, [options, headerTitle, toolBarRender, toolbar, isLightFilter]); /** 内置的工具栏 */ var toolbarDom = toolBarRender === false ? null : /*#__PURE__*/(0, _jsxRuntime.jsx)(_ToolBar.default, { headerTitle: headerTitle, hideToolbar: hideToolbar, selectedRows: selectedRows, selectedRowKeys: selectedRowKeys, tableColumn: tableColumn, tooltip: tooltip, toolbar: toolbar, onFormSearchSubmit: function onFormSearchSubmit(newValues) { setFormSearch((0, _objectSpread4.default)((0, _objectSpread4.default)({}, formSearch), newValues)); }, searchNode: isLightFilter ? searchNode : null, options: options, optionsRender: optionsRender, actionRef: actionRef, toolBarRender: toolBarRender }); /** 内置的多选操作栏 */ var alertDom = propsRowSelection !== false ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Alert.default, { selectedRowKeys: selectedRowKeys, selectedRows: selectedRows, onCleanSelected: _onCleanSelected, alertOptionRender: rest.tableAlertOptionRender, alertInfoRender: tableAlertRender, alwaysShowAlert: propsRowSelection === null || propsRowSelection === void 0 ? void 0 : propsRowSelection.alwaysShowAlert }) : null; return wrapSSR( /*#__PURE__*/(0, _jsxRuntime.jsx)(TableRender, (0, _objectSpread4.default)((0, _objectSpread4.default)({}, props), {}, { name: isEditorTable, defaultClassName: defaultClassName, size: counter.tableSize, onSizeChange: counter.setTableSize, pagination: pagination, searchNode: searchNode, rowSelection: propsRowSelection !== false ? rowSelection : undefined, className: className, tableColumn: tableColumn, isLightFilter: isLightFilter, action: action, alertDom: alertDom, toolbarDom: toolbarDom, hideToolbar: hideToolbar, onSortChange: function onSortChange(sortConfig) { if (useLocaleSorter || sortConfig === proSort) return; setProSort(sortConfig); }, onFilterChange: function onFilterChange(filterConfig) { if (useLocaleFilter || filterConfig === proFilter) return; setProFilter(filterConfig); }, editableUtils: editableUtils, getRowKey: getRowKey }))); }; /** * 🏆 Use Ant Design Table like a Pro! 更快 更好 更方便 * * @param props */ var ProviderTableContainer = function ProviderTableContainer(props) { var _useContext = (0, _react.useContext)(_antd.ConfigProvider.ConfigContext), getPrefixCls = _useContext.getPrefixCls; var ErrorComponent = props.ErrorBoundary === false ? _react.default.Fragment : props.ErrorBoundary || _proUtils.ErrorBoundary; return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Provide.Container, { initValue: props, children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_proProvider.ProConfigProvider, { needDeps: true, children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ErrorComponent, { children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ProTable, (0, _objectSpread4.default)({ defaultClassName: "".concat(getPrefixCls('pro-table')) }, props)) }) }) }); }; ProviderTableContainer.Summary = _antd.Table.Summary; var _default = exports.default = ProviderTableContainer;