index.js 4.2 KB

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