UNPKG

@schema-render/search-table-react

Version:
244 lines (243 loc) 10.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "default", { enumerable: true, get: function() { return _default; } }); var _jsxruntime = require("react/jsx-runtime"); var _corereact = require("@schema-render/core-react"); var _antd = require("antd"); var _react = require("react"); var _constants = require("./constants"); var _useColumns = require("./hooks/useColumns"); var _useOpenApi = /*#__PURE__*/ _interop_require_default(require("./hooks/useOpenApi")); var _useRequest = /*#__PURE__*/ _interop_require_default(require("./hooks/useRequest")); var _useScrollY = /*#__PURE__*/ _interop_require_default(require("./hooks/useScrollY")); var _useSearch = /*#__PURE__*/ _interop_require_default(require("./hooks/useSearch")); var _useSummary = /*#__PURE__*/ _interop_require_default(require("./hooks/useSummary")); var _useTitle = /*#__PURE__*/ _interop_require_default(require("./hooks/useTitle")); var _zh_CN = /*#__PURE__*/ _interop_require_default(require("./locale/zh_CN")); var _RootContext = /*#__PURE__*/ _interop_require_default(require("./RootContext")); function _define_property(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _object_spread(target) { for(var i = 1; i < arguments.length; i++){ var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === "function") { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function(key) { _define_property(target, key, source[key]); }); } return target; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function(sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _object_spread_props(target, source) { source = source != null ? source : {}; if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function(key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } var classNames = _corereact.utils.classNames, isPlainObject = _corereact.utils.isPlainObject, isNil = _corereact.utils.isNil; /** * 备注: * rawColumns: 原始列 * baseColumns: 基于 rawColumns 处理加工的基础列,如设置列宽、处理 valueType 等 * sortColumns: 基于 baseColumns 排序后的列(排序、显示/隐藏等配置)。 * finalColumns: 基于 sortColumns 最终渲染的列,1、过滤隐藏列,2、添加序号、操作列 * * ▕▔▔▔▔▔ 还原 ▔▔▔▔▏ * ↓ ↑ * 原始列 基础列 排序列 最终列 * rawColumns -> baseColumns -> sortColumns -> finalColumns */ var SearchTable = function(param, ref) { var className = param.className, style = param.style, locale = param.locale, request = param.request, _param_requestOnMounted = param.requestOnMounted, requestOnMounted = _param_requestOnMounted === void 0 ? true : _param_requestOnMounted, header = param.header, search = param.search, titleTop = param.titleTop, _param_title = param.title, title = _param_title === void 0 ? {} : _param_title, titleBottom = param.titleBottom, _param_table = param.table, table = _param_table === void 0 ? {} : _param_table, footer = param.footer; var rootElemRef = (0, _react.useRef)(null); var searchValueRef = (0, _react.useRef)(search === false ? {} : search.defaultValue || {}); // 国际化处理 var internalLocale = (0, _react.useMemo)(function() { return _object_spread({}, _zh_CN.default, locale); }, [ locale ]); /** * 解决存在 rowSelection 属性且数据源为空的情况下表头无宽度问题 * ref: https://github.com/ant-design/ant-design/issues/47114 */ if (table.rowSelection && isNil(table.rowSelection.columnWidth)) { table.rowSelection = _object_spread_props(_object_spread({}, table.rowSelection), { columnWidth: 32 }); } /** * 全局状态 */ var globalStateRef = (0, _react.useRef)({ isTabChanging: false }); // 表格列配置数据处理 var baseColumns = (0, _useColumns.useBaseColumns)({ table: table, globalStateRef: globalStateRef }).baseColumns; var _useSortColumns = (0, _useColumns.useSortColumns)({ table: table, baseColumns: baseColumns, globalStateRef: globalStateRef }), sortColumns = _useSortColumns.sortColumns, sortModalHolder = _useSortColumns.sortModalHolder, openSettingModal = _useSortColumns.openSettingModal; var finalColumns = (0, _useColumns.useFinalColumns)({ table: table, sortColumns: sortColumns, locale: internalLocale }).finalColumns; // 表格高度计算:“一屏显示”效果 var _useScrollY1 = (0, _useScrollY.default)({ table: table, rootElemRef: rootElemRef }), scrollY = _useScrollY1.scrollY, updateScrollY = _useScrollY1.updateScrollY; // 数据请求处理 var _useRequest1 = (0, _useRequest.default)({ searchValueRef: searchValueRef, table: table, request: request, updateScrollY: updateScrollY, locale: internalLocale }), loading = _useRequest1.loading, dataSource = _useRequest1.dataSource, updateDataSource = _useRequest1.updateDataSource, summaryData = _useRequest1.summaryData, updateSummaryData = _useRequest1.updateSummaryData, finalPagination = _useRequest1.finalPagination, runRequest = _useRequest1.runRequest, requestParamsRef = _useRequest1.requestParamsRef, requestExtraParamsRef = _useRequest1.requestExtraParamsRef, updateRequestExtraParams = _useRequest1.updateRequestExtraParams; // 搜索栏 var _useSearch1 = (0, _useSearch.default)({ locale: internalLocale, loading: loading, search: search, searchValueRef: searchValueRef, runRequest: runRequest, updateScrollY: updateScrollY }), searchNodeHolder = _useSearch1.searchNodeHolder, searchRef = _useSearch1.searchRef; // 标题栏 var titleNodeHolder = (0, _useTitle.default)({ locale: internalLocale, title: title, loading: loading, globalStateRef: globalStateRef, runRequest: runRequest, openSettingModal: openSettingModal }).titleNodeHolder; // 总结栏处理 var finalSummary = (0, _useSummary.default)({ table: table, finalColumns: finalColumns, summaryData: summaryData }).finalSummary; // 公共插槽参数 var comRenderParams = { loading: loading }; // 表格 onChange 事件处理 var handleTableChange = (0, _corereact.useMemoizedFn)(function(_p, filter, sorter, _e) { var _table_onChange; // 服务端排序发送请求 if (table.sortMode === 'service' || table.sortMode === 'service-all') { updateRequestExtraParams({ filter: filter, sorter: sorter }); runRequest(); } (_table_onChange = table.onChange) === null || _table_onChange === void 0 ? void 0 : _table_onChange.call(table, _p, filter, sorter, _e); }); // 组件加载完毕请求一次数据 (0, _corereact.useMounted)(function() { requestOnMounted && runRequest(); }); // 开放 API (0, _useOpenApi.default)({ ref: ref, rootElemRef: rootElemRef, searchRef: searchRef, requestParamsRef: requestParamsRef, requestExtraParamsRef: requestExtraParamsRef, searchValueRef: searchValueRef, dataSource: dataSource, updateDataSource: updateDataSource, updateSummaryData: updateSummaryData, updateScrollY: updateScrollY, openSettingModal: openSettingModal, runRequest: runRequest }); return /*#__PURE__*/ (0, _jsxruntime.jsx)(_RootContext.default.Provider, { value: { locale: internalLocale }, children: /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", { ref: rootElemRef, className: className, style: style, children: [ header === null || header === void 0 ? void 0 : header(comRenderParams), searchNodeHolder, titleTop === null || titleTop === void 0 ? void 0 : titleTop(comRenderParams), titleNodeHolder, titleBottom === null || titleBottom === void 0 ? void 0 : titleBottom(comRenderParams), /*#__PURE__*/ (0, _jsxruntime.jsx)(_antd.Table, _object_spread_props(_object_spread({ tableLayout: "fixed" }, table), { className: classNames(table.className, _constants.EClassNames.table), columns: finalColumns, dataSource: dataSource, loading: _object_spread({ spinning: loading }, isPlainObject(table === null || table === void 0 ? void 0 : table.loading) ? table.loading : undefined), scroll: _object_spread({ scrollToFirstRowOnChange: true, x: 'max-content', y: scrollY }, table === null || table === void 0 ? void 0 : table.scroll), summary: finalSummary, pagination: finalPagination, onChange: handleTableChange })), footer === null || footer === void 0 ? void 0 : footer(comRenderParams), sortModalHolder ] }) }); }; var _default = /*#__PURE__*/ (0, _react.forwardRef)(SearchTable);