element-plus
Version:
A Component Library for Vue 3
121 lines (119 loc) • 4.52 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
const require_runtime = require('../../../_virtual/_rolldown/runtime.js');
const require_types = require('../../../utils/types.js');
const require_index = require('../../../hooks/use-namespace/index.js');
const require_use_columns = require('./composables/use-columns.js');
const require_use_scrollbar = require('./composables/use-scrollbar.js');
const require_use_row = require('./composables/use-row.js');
const require_use_data = require('./composables/use-data.js');
const require_use_styles = require('./composables/use-styles.js');
let vue = require("vue");
let _vue_shared = require("@vue/shared");
//#region ../../packages/components/table-v2/src/use-table.ts
function useTable(props) {
const mainTableRef = (0, vue.ref)();
const leftTableRef = (0, vue.ref)();
const rightTableRef = (0, vue.ref)();
const { columns, columnsStyles, columnsTotalWidth, fixedColumnsOnLeft, fixedColumnsOnRight, hasFixedColumns, mainColumns, onColumnSorted } = require_use_columns.useColumns(props, (0, vue.toRef)(props, "columns"), (0, vue.toRef)(props, "fixed"));
const { scrollTo, scrollToLeft, scrollToTop, scrollToRow, onScroll, onVerticalScroll, scrollPos } = require_use_scrollbar.useScrollbar(props, {
mainTableRef,
leftTableRef,
rightTableRef,
onMaybeEndReached
});
const ns = require_index.useNamespace("table-v2");
const instance = (0, vue.getCurrentInstance)();
const isScrolling = (0, vue.shallowRef)(false);
const { expandedRowKeys, lastRenderedRowIndex, isDynamic, isResetting, rowHeights, resetAfterIndex, onRowExpanded, onRowHeightChange, onRowHovered, onRowsRendered } = require_use_row.useRow(props, {
mainTableRef,
leftTableRef,
rightTableRef,
tableInstance: instance,
ns,
isScrolling
});
const { data, depthMap } = require_use_data.useData(props, {
expandedRowKeys,
lastRenderedRowIndex,
resetAfterIndex
});
const rowsHeight = (0, vue.computed)(() => {
const { estimatedRowHeight, rowHeight } = props;
const _data = (0, vue.unref)(data);
if (require_types.isNumber(estimatedRowHeight)) return Object.values((0, vue.unref)(rowHeights)).reduce((acc, curr) => acc + curr, 0);
return _data.length * rowHeight;
});
const { bodyWidth, fixedTableHeight, mainTableHeight, leftTableWidth, rightTableWidth, windowHeight, footerHeight, emptyStyle, rootStyle, headerHeight } = require_use_styles.useStyles(props, {
columnsTotalWidth,
fixedColumnsOnLeft,
fixedColumnsOnRight,
rowsHeight
});
const containerRef = (0, vue.ref)();
const showEmpty = (0, vue.computed)(() => {
const noData = (0, vue.unref)(data).length === 0;
return (0, _vue_shared.isArray)(props.fixedData) ? props.fixedData.length === 0 && noData : noData;
});
function getRowHeight(rowIndex) {
const { estimatedRowHeight, rowHeight, rowKey } = props;
if (!estimatedRowHeight) return rowHeight;
return (0, vue.unref)(rowHeights)[(0, vue.unref)(data)[rowIndex][rowKey]] || estimatedRowHeight;
}
const isEndReached = (0, vue.ref)(false);
function onMaybeEndReached() {
const { onEndReached } = props;
if (!onEndReached) return;
const { scrollTop } = (0, vue.unref)(scrollPos);
const _totalHeight = (0, vue.unref)(rowsHeight);
const remainDistance = _totalHeight - (scrollTop + (0, vue.unref)(windowHeight)) + props.hScrollbarSize;
if (!isEndReached.value && (0, vue.unref)(lastRenderedRowIndex) >= 0 && _totalHeight <= scrollTop + (0, vue.unref)(mainTableHeight) - (0, vue.unref)(headerHeight)) {
isEndReached.value = true;
onEndReached(remainDistance);
} else isEndReached.value = false;
}
(0, vue.watch)(() => (0, vue.unref)(rowsHeight), () => isEndReached.value = false);
(0, vue.watch)(() => props.expandedRowKeys, (val) => expandedRowKeys.value = val, { deep: true });
return {
columns,
containerRef,
mainTableRef,
leftTableRef,
rightTableRef,
isDynamic,
isResetting,
isScrolling,
hasFixedColumns,
columnsStyles,
columnsTotalWidth,
data,
expandedRowKeys,
depthMap,
fixedColumnsOnLeft,
fixedColumnsOnRight,
mainColumns,
bodyWidth,
emptyStyle,
rootStyle,
footerHeight,
mainTableHeight,
fixedTableHeight,
leftTableWidth,
rightTableWidth,
showEmpty,
getRowHeight,
onColumnSorted,
onRowHovered,
onRowExpanded,
onRowsRendered,
onRowHeightChange,
scrollTo,
scrollToLeft,
scrollToTop,
scrollToRow,
onScroll,
onVerticalScroll
};
}
//#endregion
exports.useTable = useTable;
//# sourceMappingURL=use-table.js.map