use-table.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
  2. require("../../../_virtual/_rolldown/runtime.js");
  3. const require_types = require("../../../utils/types.js");
  4. const require_index = require("../../../hooks/use-namespace/index.js");
  5. const require_use_columns = require("./composables/use-columns.js");
  6. const require_use_scrollbar = require("./composables/use-scrollbar.js");
  7. const require_use_row = require("./composables/use-row.js");
  8. const require_use_data = require("./composables/use-data.js");
  9. const require_use_styles = require("./composables/use-styles.js");
  10. let vue = require("vue");
  11. let _vue_shared = require("@vue/shared");
  12. //#region ../../packages/components/table-v2/src/use-table.ts
  13. function useTable(props) {
  14. const mainTableRef = (0, vue.ref)();
  15. const leftTableRef = (0, vue.ref)();
  16. const rightTableRef = (0, vue.ref)();
  17. const { columns, columnsStyles, columnsTotalWidth, fixedColumnsOnLeft, fixedColumnsOnRight, hasFixedColumns, mainColumns, onColumnSorted } = require_use_columns.useColumns(props, (0, vue.toRef)(props, "columns"), (0, vue.toRef)(props, "fixed"));
  18. const { scrollTo, scrollToLeft, scrollToTop, scrollToRow, onScroll, onVerticalScroll, scrollPos } = require_use_scrollbar.useScrollbar(props, {
  19. mainTableRef,
  20. leftTableRef,
  21. rightTableRef,
  22. onMaybeEndReached
  23. });
  24. const ns = require_index.useNamespace("table-v2");
  25. const instance = (0, vue.getCurrentInstance)();
  26. const isScrolling = (0, vue.shallowRef)(false);
  27. const { expandedRowKeys, lastRenderedRowIndex, isDynamic, isResetting, rowHeights, resetAfterIndex, onRowExpanded, onRowHeightChange, onRowHovered, onRowsRendered } = require_use_row.useRow(props, {
  28. mainTableRef,
  29. leftTableRef,
  30. rightTableRef,
  31. tableInstance: instance,
  32. ns,
  33. isScrolling
  34. });
  35. const { data, depthMap } = require_use_data.useData(props, {
  36. expandedRowKeys,
  37. lastRenderedRowIndex,
  38. resetAfterIndex
  39. });
  40. const rowsHeight = (0, vue.computed)(() => {
  41. const { estimatedRowHeight, rowHeight } = props;
  42. const _data = (0, vue.unref)(data);
  43. if (require_types.isNumber(estimatedRowHeight)) return Object.values((0, vue.unref)(rowHeights)).reduce((acc, curr) => acc + curr, 0);
  44. return _data.length * rowHeight;
  45. });
  46. const { bodyWidth, fixedTableHeight, mainTableHeight, leftTableWidth, rightTableWidth, windowHeight, footerHeight, emptyStyle, rootStyle, headerHeight } = require_use_styles.useStyles(props, {
  47. columnsTotalWidth,
  48. fixedColumnsOnLeft,
  49. fixedColumnsOnRight,
  50. rowsHeight
  51. });
  52. const containerRef = (0, vue.ref)();
  53. const showEmpty = (0, vue.computed)(() => {
  54. const noData = (0, vue.unref)(data).length === 0;
  55. return (0, _vue_shared.isArray)(props.fixedData) ? props.fixedData.length === 0 && noData : noData;
  56. });
  57. function getRowHeight(rowIndex) {
  58. const { estimatedRowHeight, rowHeight, rowKey } = props;
  59. if (!estimatedRowHeight) return rowHeight;
  60. return (0, vue.unref)(rowHeights)[(0, vue.unref)(data)[rowIndex][rowKey]] || estimatedRowHeight;
  61. }
  62. const isEndReached = (0, vue.ref)(false);
  63. function onMaybeEndReached() {
  64. const { onEndReached } = props;
  65. if (!onEndReached) return;
  66. const { scrollTop } = (0, vue.unref)(scrollPos);
  67. const _totalHeight = (0, vue.unref)(rowsHeight);
  68. const remainDistance = _totalHeight - (scrollTop + (0, vue.unref)(windowHeight)) + props.hScrollbarSize;
  69. if (!isEndReached.value && (0, vue.unref)(lastRenderedRowIndex) >= 0 && _totalHeight <= scrollTop + (0, vue.unref)(mainTableHeight) - (0, vue.unref)(headerHeight)) {
  70. isEndReached.value = true;
  71. onEndReached(remainDistance);
  72. } else isEndReached.value = false;
  73. }
  74. (0, vue.watch)(() => (0, vue.unref)(rowsHeight), () => isEndReached.value = false);
  75. (0, vue.watch)(() => props.expandedRowKeys, (val) => expandedRowKeys.value = val, { deep: true });
  76. return {
  77. columns,
  78. containerRef,
  79. mainTableRef,
  80. leftTableRef,
  81. rightTableRef,
  82. isDynamic,
  83. isResetting,
  84. isScrolling,
  85. hasFixedColumns,
  86. columnsStyles,
  87. columnsTotalWidth,
  88. data,
  89. expandedRowKeys,
  90. depthMap,
  91. fixedColumnsOnLeft,
  92. fixedColumnsOnRight,
  93. mainColumns,
  94. bodyWidth,
  95. emptyStyle,
  96. rootStyle,
  97. footerHeight,
  98. mainTableHeight,
  99. fixedTableHeight,
  100. leftTableWidth,
  101. rightTableWidth,
  102. showEmpty,
  103. getRowHeight,
  104. onColumnSorted,
  105. onRowHovered,
  106. onRowExpanded,
  107. onRowsRendered,
  108. onRowHeightChange,
  109. scrollTo,
  110. scrollToLeft,
  111. scrollToTop,
  112. scrollToRow,
  113. onScroll,
  114. onVerticalScroll
  115. };
  116. }
  117. //#endregion
  118. exports.useTable = useTable;
  119. //# sourceMappingURL=use-table.js.map