UNPKG

@ccs-design/rc-pro

Version:

ccs design basic react component

205 lines (171 loc) 9.58 kB
import "antd/es/table/style"; import _Table from "antd/es/table"; import "antd/es/pagination/style"; import _Pagination from "antd/es/pagination"; import "antd/es/tooltip/style"; import _Tooltip from "antd/es/tooltip"; var _excluded = ["data", "style", "scroll", "event$", "rowKey", "columns", "fixedThead", "pagination", "rowSelection", "className"]; 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 _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else 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; } function _defineProperty(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 _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } import React, { useRef, useEffect, useState, useContext } from 'react'; import classNames from 'classnames'; import { useDebounceFn, useEventListener, useUpdate } from 'ahooks'; import { GlobalContext } from '../CcsBasicLayout/context'; import './index.less'; var CcsTable = function CcsTable(props) { var data = props.data, style = props.style, scroll = props.scroll, event$ = props.event$, rowKey = props.rowKey, columns = props.columns, fixedThead = props.fixedThead, pagination = props.pagination, rowSelection = props.rowSelection, _props$className = props.className, className = _props$className === void 0 ? '' : _props$className, restProps = _objectWithoutProperties(props, _excluded); // 固定表头获取table可视高度 var ref = useRef(null); var update = useUpdate(); var columnRef = useRef((columns === null || columns === void 0 ? void 0 : columns.filter(function (c) { return c.hidden; }).map(function (c) { return c.dataIndex; })) || []); var _useState = useState(scroll || {}), _useState2 = _slicedToArray(_useState, 2), newScroll = _useState2[0], setNewScroll = _useState2[1]; var _ref = data || { totalNum: 0, result: [], pageSize: 10, pageNo: 1 }, totalNum = _ref.totalNum, result = _ref.result, pageNo = _ref.pageNo, pageSize = _ref.pageSize; var _useContext = useContext(GlobalContext), IsCompact = _useContext.IsCompact; // table 固定表头,内容滚动 var _useDebounceFn = useDebounceFn(function () { if (fixedThead && !(scroll === null || scroll === void 0 ? void 0 : scroll.y)) { var _ref$current; var newSll = newScroll; var bounding = (ref === null || ref === void 0 ? void 0 : (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.getBoundingClientRect()) || { top: 0 }; // thead 高度,可以传入 // thead 高度,可以传入 var theadHeight = IsCompact ? 39 : 47; if (typeof fixedThead !== 'boolean' && fixedThead.theadHeight) { theadHeight = fixedThead.theadHeight; } newSll = _objectSpread(_objectSpread({}, newSll), {}, { y: document.body.clientHeight - bounding.top - 10 - theadHeight - (totalNum ? 56 : 0) }); setNewScroll(newSll); if (typeof fixedThead !== 'boolean' && fixedThead.tbody) { var _ref$current2; // 固定tbody高度 var tbody = (_ref$current2 = ref.current) === null || _ref$current2 === void 0 ? void 0 : _ref$current2.getElementsByClassName('ant-table-body'); if (tbody && tbody.length > 0 && tbody[0].style) { tbody[0].style.height = "".concat(newSll.y, "px"); } } } }, { wait: 500, leading: true }), onFixedThead = _useDebounceFn.run; useEffect(function () { onFixedThead(); }, [totalNum]); // 监听窗口变化 useEventListener('resize', onFixedThead, { target: window }); // 监听列筛选事件 event$ === null || event$ === void 0 ? void 0 : event$.useSubscription(function (e) { if (e.key === 'columnFilter') { columnRef.current = e.columnHiddenKeys || []; update(); } }); // 列过滤 var filterColumns = function filterColumns() { var cls = columns === null || columns === void 0 ? void 0 : columns.filter(function (t) { return !columnRef.current.includes(t.dataIndex); }); cls === null || cls === void 0 ? void 0 : cls.forEach(function (c) { if (c.ellipsis && !c.render) { var sc = c; sc.ellipsis = { showTitle: false }; sc.render = function (e) { return /*#__PURE__*/React.createElement(_Tooltip, { zIndex: 2020, title: e, placement: "bottomLeft", destroyTooltipOnHide: true }, e); }; } }); return cls; }; return /*#__PURE__*/React.createElement("div", { ref: ref, className: "ccs-table-card", style: _objectSpread({}, style) }, restProps.render ? /*#__PURE__*/React.createElement(React.Fragment, null, restProps.render(result || []), pagination === false ? null : /*#__PURE__*/React.createElement(_Pagination, _objectSpread({ total: totalNum, pageSize: pageSize, current: pageNo, showSizeChanger: true, showQuickJumper: true, showTotal: function showTotal() { return "\u5171".concat(totalNum, "\u6761\u8BB0\u5F55"); }, pageSizeOptions: ['10', '20', '30', '50', '100'], onChange: function onChange(page, size) { return restProps.onChange && restProps.onChange({ pageSize: size, current: page }, {}, {}, { currentDataSource: [], action: 'paginate' }); } }, pagination))) : /*#__PURE__*/React.createElement(_Table, _objectSpread(_objectSpread({ rowKey: rowKey, dataSource: result, pagination: pagination === false ? false : _objectSpread({ total: totalNum, pageSize: pageSize, current: pageNo, showSizeChanger: true, showQuickJumper: true, showTotal: function showTotal() { return "\u5171".concat(totalNum, "\u6761\u8BB0\u5F55"); }, pageSizeOptions: ['10', '20', '30', '50', '100'] }, pagination), rowSelection: rowSelection ? _objectSpread(_objectSpread({}, rowSelection), {}, { columnWidth: 60 }) : undefined, columns: filterColumns() }, restProps), {}, { size: IsCompact ? 'small' : restProps.size || 'middle', className: classNames("".concat(!rowSelection ? 'ccs-table-noselection' : ''), !totalNum ? 'ccs-table-nodata' : '', className), scroll: newScroll }))); }; export default CcsTable;