c0abe4d77f416e91758bae88f4cf63e5e7aae516e7e5126ea9ff841792360df75e05287c3d2b13a087a81e8799c347102d5bee7a4154ac0ff77916eba77719 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', { value: true });
  3. var vue = require('vue');
  4. var useColumns = require('./composables/use-columns.js');
  5. var useScrollbar = require('./composables/use-scrollbar.js');
  6. var useRow = require('./composables/use-row.js');
  7. var useData = require('./composables/use-data.js');
  8. var useStyles = require('./composables/use-styles.js');
  9. var index = require('../../../hooks/use-namespace/index.js');
  10. var types = require('../../../utils/types.js');
  11. var shared = require('@vue/shared');
  12. function useTable(props) {
  13. const mainTableRef = vue.ref();
  14. const leftTableRef = vue.ref();
  15. const rightTableRef = vue.ref();
  16. const {
  17. columns,
  18. columnsStyles,
  19. columnsTotalWidth,
  20. fixedColumnsOnLeft,
  21. fixedColumnsOnRight,
  22. hasFixedColumns,
  23. mainColumns,
  24. onColumnSorted
  25. } = useColumns.useColumns(props, vue.toRef(props, "columns"), vue.toRef(props, "fixed"));
  26. const {
  27. scrollTo,
  28. scrollToLeft,
  29. scrollToTop,
  30. scrollToRow,
  31. onScroll,
  32. onVerticalScroll,
  33. scrollPos
  34. } = useScrollbar.useScrollbar(props, {
  35. mainTableRef,
  36. leftTableRef,
  37. rightTableRef,
  38. onMaybeEndReached
  39. });
  40. const ns = index.useNamespace("table-v2");
  41. const instance = vue.getCurrentInstance();
  42. const isScrolling = vue.shallowRef(false);
  43. const {
  44. expandedRowKeys,
  45. lastRenderedRowIndex,
  46. isDynamic,
  47. isResetting,
  48. rowHeights,
  49. resetAfterIndex,
  50. onRowExpanded,
  51. onRowHeightChange,
  52. onRowHovered,
  53. onRowsRendered
  54. } = useRow.useRow(props, {
  55. mainTableRef,
  56. leftTableRef,
  57. rightTableRef,
  58. tableInstance: instance,
  59. ns,
  60. isScrolling
  61. });
  62. const { data, depthMap } = useData.useData(props, {
  63. expandedRowKeys,
  64. lastRenderedRowIndex,
  65. resetAfterIndex
  66. });
  67. const rowsHeight = vue.computed(() => {
  68. const { estimatedRowHeight, rowHeight } = props;
  69. const _data = vue.unref(data);
  70. if (types.isNumber(estimatedRowHeight)) {
  71. return Object.values(vue.unref(rowHeights)).reduce((acc, curr) => acc + curr, 0);
  72. }
  73. return _data.length * rowHeight;
  74. });
  75. const {
  76. bodyWidth,
  77. fixedTableHeight,
  78. mainTableHeight,
  79. leftTableWidth,
  80. rightTableWidth,
  81. windowHeight,
  82. footerHeight,
  83. emptyStyle,
  84. rootStyle,
  85. headerHeight
  86. } = useStyles.useStyles(props, {
  87. columnsTotalWidth,
  88. fixedColumnsOnLeft,
  89. fixedColumnsOnRight,
  90. rowsHeight
  91. });
  92. const containerRef = vue.ref();
  93. const showEmpty = vue.computed(() => {
  94. const noData = vue.unref(data).length === 0;
  95. return shared.isArray(props.fixedData) ? props.fixedData.length === 0 && noData : noData;
  96. });
  97. function getRowHeight(rowIndex) {
  98. const { estimatedRowHeight, rowHeight, rowKey } = props;
  99. if (!estimatedRowHeight)
  100. return rowHeight;
  101. return vue.unref(rowHeights)[vue.unref(data)[rowIndex][rowKey]] || estimatedRowHeight;
  102. }
  103. const isEndReached = vue.ref(false);
  104. function onMaybeEndReached() {
  105. const { onEndReached } = props;
  106. if (!onEndReached)
  107. return;
  108. const { scrollTop } = vue.unref(scrollPos);
  109. const _totalHeight = vue.unref(rowsHeight);
  110. const clientHeight = vue.unref(windowHeight);
  111. const remainDistance = _totalHeight - (scrollTop + clientHeight) + props.hScrollbarSize;
  112. if (!isEndReached.value && vue.unref(lastRenderedRowIndex) >= 0 && _totalHeight <= scrollTop + vue.unref(mainTableHeight) - vue.unref(headerHeight)) {
  113. isEndReached.value = true;
  114. onEndReached(remainDistance);
  115. } else {
  116. isEndReached.value = false;
  117. }
  118. }
  119. vue.watch(() => vue.unref(rowsHeight), () => isEndReached.value = false);
  120. vue.watch(() => props.expandedRowKeys, (val) => expandedRowKeys.value = val, {
  121. deep: true
  122. });
  123. return {
  124. columns,
  125. containerRef,
  126. mainTableRef,
  127. leftTableRef,
  128. rightTableRef,
  129. isDynamic,
  130. isResetting,
  131. isScrolling,
  132. hasFixedColumns,
  133. columnsStyles,
  134. columnsTotalWidth,
  135. data,
  136. expandedRowKeys,
  137. depthMap,
  138. fixedColumnsOnLeft,
  139. fixedColumnsOnRight,
  140. mainColumns,
  141. bodyWidth,
  142. emptyStyle,
  143. rootStyle,
  144. footerHeight,
  145. mainTableHeight,
  146. fixedTableHeight,
  147. leftTableWidth,
  148. rightTableWidth,
  149. showEmpty,
  150. getRowHeight,
  151. onColumnSorted,
  152. onRowHovered,
  153. onRowExpanded,
  154. onRowsRendered,
  155. onRowHeightChange,
  156. scrollTo,
  157. scrollToLeft,
  158. scrollToTop,
  159. scrollToRow,
  160. onScroll,
  161. onVerticalScroll
  162. };
  163. }
  164. exports.useTable = useTable;
  165. //# sourceMappingURL=use-table.js.map