UNPKG

element-plus

Version:

A Component Library for Vue 3

124 lines (121 loc) 4.13 kB
import { getCurrentInstance, shallowRef, ref, computed, unref, watch } from 'vue'; import { debounce } from 'lodash-unified'; import '../../../../utils/index.mjs'; import { FixedDir } from '../constants.mjs'; import { isNumber } from '@vueuse/core'; const useRow = (props, { mainTableRef, leftTableRef, rightTableRef, onMaybeEndReached }) => { const vm = getCurrentInstance(); const { emit } = vm; const isResetting = shallowRef(false); const hoveringRowKey = shallowRef(null); const expandedRowKeys = ref(props.defaultExpandedRowKeys || []); const lastRenderedRowIndex = ref(-1); const resetIndex = shallowRef(null); const rowHeights = ref({}); const pendingRowHeights = ref({}); const leftTableHeights = shallowRef({}); const mainTableHeights = shallowRef({}); const rightTableHeights = shallowRef({}); const isDynamic = computed(() => isNumber(props.estimatedRowHeight)); function onRowsRendered(params) { var _a; (_a = props.onRowsRendered) == null ? void 0 : _a.call(props, params); if (params.rowCacheEnd > unref(lastRenderedRowIndex)) { lastRenderedRowIndex.value = params.rowCacheEnd; } } function onRowHovered({ hovered, rowKey }) { hoveringRowKey.value = hovered ? rowKey : null; } function onRowExpanded({ expanded, rowData, rowIndex, rowKey }) { var _a, _b; const _expandedRowKeys = [...unref(expandedRowKeys)]; const currentKeyIndex = _expandedRowKeys.indexOf(rowKey); if (expanded) { if (currentKeyIndex === -1) _expandedRowKeys.push(rowKey); } else { if (currentKeyIndex > -1) _expandedRowKeys.splice(currentKeyIndex, 1); } expandedRowKeys.value = _expandedRowKeys; emit("update:expandedRowKeys", _expandedRowKeys); (_a = props.onRowExpand) == null ? void 0 : _a.call(props, { expanded, rowData, rowIndex, rowKey }); (_b = props.onExpandedRowsChange) == null ? void 0 : _b.call(props, _expandedRowKeys); } const flushingRowHeights = debounce(() => { var _a, _b, _c, _d; isResetting.value = true; rowHeights.value = { ...unref(rowHeights), ...unref(pendingRowHeights) }; resetAfterIndex(unref(resetIndex), false); pendingRowHeights.value = {}; resetIndex.value = null; (_a = mainTableRef.value) == null ? void 0 : _a.forceUpdate(); (_b = leftTableRef.value) == null ? void 0 : _b.forceUpdate(); (_c = rightTableRef.value) == null ? void 0 : _c.forceUpdate(); (_d = vm.proxy) == null ? void 0 : _d.$forceUpdate(); isResetting.value = false; }, 0); function resetAfterIndex(index, forceUpdate = false) { if (!unref(isDynamic)) return; [mainTableRef, leftTableRef, rightTableRef].forEach((tableRef) => { const table = unref(tableRef); if (table) table.resetAfterRowIndex(index, forceUpdate); }); } function resetHeights(rowKey, height, rowIdx) { const resetIdx = unref(resetIndex); if (resetIdx === null) { resetIndex.value = rowIdx; } else { if (resetIdx > rowIdx) { resetIndex.value = rowIdx; } } pendingRowHeights.value[rowKey] = height; } function onRowHeightChange({ rowKey, height, rowIndex }, fixedDir) { if (!fixedDir) { mainTableHeights.value[rowKey] = height; } else { if (fixedDir === FixedDir.RIGHT) { rightTableHeights.value[rowKey] = height; } else { leftTableHeights.value[rowKey] = height; } } const maximumHeight = Math.max(...[leftTableHeights, rightTableHeights, mainTableHeights].map((records) => records.value[rowKey] || 0)); if (unref(rowHeights)[rowKey] !== maximumHeight) { resetHeights(rowKey, maximumHeight, rowIndex); flushingRowHeights(); } } watch(lastRenderedRowIndex, () => onMaybeEndReached()); return { hoveringRowKey, expandedRowKeys, lastRenderedRowIndex, isDynamic, isResetting, rowHeights, resetAfterIndex, onRowExpanded, onRowHovered, onRowsRendered, onRowHeightChange }; }; export { useRow }; //# sourceMappingURL=use-row.mjs.map