@ccs-design/rc-pro
Version:
ccs design basic react component
205 lines (171 loc) • 9.58 kB
JavaScript
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;