VirtualCell.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. var _typeof = require("@babel/runtime/helpers/typeof");
  4. Object.defineProperty(exports, "__esModule", {
  5. value: true
  6. });
  7. exports.default = void 0;
  8. exports.getColumnWidth = getColumnWidth;
  9. var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  10. var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  11. var _context = require("@rc-component/context");
  12. var _classnames = _interopRequireDefault(require("classnames"));
  13. var React = _interopRequireWildcard(require("react"));
  14. var _BodyRow = require("../Body/BodyRow");
  15. var _Cell = _interopRequireDefault(require("../Cell"));
  16. var _context2 = require("./context");
  17. function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
  18. function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
  19. /**
  20. * Return the width of the column by `colSpan`.
  21. * When `colSpan` is `0` will be trade as `1`.
  22. */
  23. function getColumnWidth(colIndex, colSpan, columnsOffset) {
  24. var mergedColSpan = colSpan || 1;
  25. return columnsOffset[colIndex + mergedColSpan] - (columnsOffset[colIndex] || 0);
  26. }
  27. function VirtualCell(props) {
  28. var rowInfo = props.rowInfo,
  29. column = props.column,
  30. colIndex = props.colIndex,
  31. indent = props.indent,
  32. index = props.index,
  33. component = props.component,
  34. renderIndex = props.renderIndex,
  35. record = props.record,
  36. style = props.style,
  37. className = props.className,
  38. inverse = props.inverse,
  39. getHeight = props.getHeight;
  40. var render = column.render,
  41. dataIndex = column.dataIndex,
  42. columnClassName = column.className,
  43. colWidth = column.width;
  44. var _useContext = (0, _context.useContext)(_context2.GridContext, ['columnsOffset']),
  45. columnsOffset = _useContext.columnsOffset;
  46. // TODO: support `expandableRowOffset`
  47. var _getCellProps = (0, _BodyRow.getCellProps)(rowInfo, column, colIndex, indent, index),
  48. key = _getCellProps.key,
  49. fixedInfo = _getCellProps.fixedInfo,
  50. appendCellNode = _getCellProps.appendCellNode,
  51. additionalCellProps = _getCellProps.additionalCellProps;
  52. var cellStyle = additionalCellProps.style,
  53. _additionalCellProps$ = additionalCellProps.colSpan,
  54. colSpan = _additionalCellProps$ === void 0 ? 1 : _additionalCellProps$,
  55. _additionalCellProps$2 = additionalCellProps.rowSpan,
  56. rowSpan = _additionalCellProps$2 === void 0 ? 1 : _additionalCellProps$2;
  57. // ========================= ColWidth =========================
  58. // column width
  59. var startColIndex = colIndex - 1;
  60. var concatColWidth = getColumnWidth(startColIndex, colSpan, columnsOffset);
  61. // margin offset
  62. var marginOffset = colSpan > 1 ? colWidth - concatColWidth : 0;
  63. // ========================== Style ===========================
  64. var mergedStyle = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, cellStyle), style), {}, {
  65. flex: "0 0 ".concat(concatColWidth, "px"),
  66. width: "".concat(concatColWidth, "px"),
  67. marginRight: marginOffset,
  68. pointerEvents: 'auto'
  69. });
  70. // When `colSpan` or `rowSpan` is `0`, should skip render.
  71. var needHide = React.useMemo(function () {
  72. if (inverse) {
  73. return rowSpan <= 1;
  74. } else {
  75. return colSpan === 0 || rowSpan === 0 || rowSpan > 1;
  76. }
  77. }, [rowSpan, colSpan, inverse]);
  78. // 0 rowSpan or colSpan should not render
  79. if (needHide) {
  80. mergedStyle.visibility = 'hidden';
  81. } else if (inverse) {
  82. mergedStyle.height = getHeight === null || getHeight === void 0 ? void 0 : getHeight(rowSpan);
  83. }
  84. var mergedRender = needHide ? function () {
  85. return null;
  86. } : render;
  87. // ========================== Render ==========================
  88. var cellSpan = {};
  89. // Virtual should reset `colSpan` & `rowSpan`
  90. if (rowSpan === 0 || colSpan === 0) {
  91. cellSpan.rowSpan = 1;
  92. cellSpan.colSpan = 1;
  93. }
  94. return /*#__PURE__*/React.createElement(_Cell.default, (0, _extends2.default)({
  95. className: (0, _classnames.default)(columnClassName, className),
  96. ellipsis: column.ellipsis,
  97. align: column.align,
  98. scope: column.rowScope,
  99. component: component,
  100. prefixCls: rowInfo.prefixCls,
  101. key: key,
  102. record: record,
  103. index: index,
  104. renderIndex: renderIndex,
  105. dataIndex: dataIndex,
  106. render: mergedRender,
  107. shouldCellUpdate: column.shouldCellUpdate
  108. }, fixedInfo, {
  109. appendNode: appendCellNode,
  110. additionalProps: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, additionalCellProps), {}, {
  111. style: mergedStyle
  112. }, cellSpan)
  113. }));
  114. }
  115. var _default = exports.default = VirtualCell;