index.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.default = void 0;
  7. var _vue = require("vue");
  8. var _ExpandedRow = _interopRequireDefault(require("./ExpandedRow"));
  9. var _valueUtil = require("../utils/valueUtil");
  10. var _MeasureCell = _interopRequireDefault(require("./MeasureCell"));
  11. var _BodyRow = _interopRequireDefault(require("./BodyRow"));
  12. var _useFlattenRecords = _interopRequireDefault(require("../hooks/useFlattenRecords"));
  13. var _ResizeContext = require("../context/ResizeContext");
  14. var _TableContext = require("../context/TableContext");
  15. var _BodyContext = require("../context/BodyContext");
  16. var _HoverContext = require("../context/HoverContext");
  17. var _default = exports.default = (0, _vue.defineComponent)({
  18. name: 'TableBody',
  19. props: ['data', 'getRowKey', 'measureColumnWidth', 'expandedKeys', 'customRow', 'rowExpandable', 'childrenColumnName'],
  20. setup(props, _ref) {
  21. let {
  22. slots
  23. } = _ref;
  24. const resizeContext = (0, _ResizeContext.useInjectResize)();
  25. const tableContext = (0, _TableContext.useInjectTable)();
  26. const bodyContext = (0, _BodyContext.useInjectBody)();
  27. const flattenData = (0, _useFlattenRecords.default)((0, _vue.toRef)(props, 'data'), (0, _vue.toRef)(props, 'childrenColumnName'), (0, _vue.toRef)(props, 'expandedKeys'), (0, _vue.toRef)(props, 'getRowKey'));
  28. const startRow = (0, _vue.shallowRef)(-1);
  29. const endRow = (0, _vue.shallowRef)(-1);
  30. let timeoutId;
  31. (0, _HoverContext.useProvideHover)({
  32. startRow,
  33. endRow,
  34. onHover: (start, end) => {
  35. clearTimeout(timeoutId);
  36. timeoutId = setTimeout(() => {
  37. startRow.value = start;
  38. endRow.value = end;
  39. }, 100);
  40. }
  41. });
  42. return () => {
  43. var _a;
  44. const {
  45. data,
  46. getRowKey,
  47. measureColumnWidth,
  48. expandedKeys,
  49. customRow,
  50. rowExpandable,
  51. childrenColumnName
  52. } = props;
  53. const {
  54. onColumnResize
  55. } = resizeContext;
  56. const {
  57. prefixCls,
  58. getComponent
  59. } = tableContext;
  60. const {
  61. flattenColumns
  62. } = bodyContext;
  63. const WrapperComponent = getComponent(['body', 'wrapper'], 'tbody');
  64. const trComponent = getComponent(['body', 'row'], 'tr');
  65. const tdComponent = getComponent(['body', 'cell'], 'td');
  66. let rows;
  67. if (data.length) {
  68. rows = flattenData.value.map((item, idx) => {
  69. const {
  70. record,
  71. indent,
  72. index: renderIndex
  73. } = item;
  74. const key = getRowKey(record, idx);
  75. return (0, _vue.createVNode)(_BodyRow.default, {
  76. "key": key,
  77. "rowKey": key,
  78. "record": record,
  79. "recordKey": key,
  80. "index": idx,
  81. "renderIndex": renderIndex,
  82. "rowComponent": trComponent,
  83. "cellComponent": tdComponent,
  84. "expandedKeys": expandedKeys,
  85. "customRow": customRow,
  86. "getRowKey": getRowKey,
  87. "rowExpandable": rowExpandable,
  88. "childrenColumnName": childrenColumnName,
  89. "indent": indent
  90. }, null);
  91. });
  92. } else {
  93. rows = (0, _vue.createVNode)(_ExpandedRow.default, {
  94. "expanded": true,
  95. "class": `${prefixCls}-placeholder`,
  96. "prefixCls": prefixCls,
  97. "component": trComponent,
  98. "cellComponent": tdComponent,
  99. "colSpan": flattenColumns.length,
  100. "isEmpty": true
  101. }, {
  102. default: () => [(_a = slots.emptyNode) === null || _a === void 0 ? void 0 : _a.call(slots)]
  103. });
  104. }
  105. const columnsKey = (0, _valueUtil.getColumnsKey)(flattenColumns);
  106. return (0, _vue.createVNode)(WrapperComponent, {
  107. "class": `${prefixCls}-tbody`
  108. }, {
  109. default: () => [measureColumnWidth && (0, _vue.createVNode)("tr", {
  110. "aria-hidden": "true",
  111. "class": `${prefixCls}-measure-row`,
  112. "style": {
  113. height: 0,
  114. fontSize: 0
  115. }
  116. }, [columnsKey.map(columnKey => (0, _vue.createVNode)(_MeasureCell.default, {
  117. "key": columnKey,
  118. "columnKey": columnKey,
  119. "onColumnResize": onColumnResize
  120. }, null))]), rows]
  121. });
  122. };
  123. }
  124. });