UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 8.8 kB
{"version":3,"file":"use-table.mjs","sources":["../../../../../../packages/components/table-v2/src/use-table.ts"],"sourcesContent":["import {\n computed,\n getCurrentInstance,\n ref,\n shallowRef,\n toRef,\n unref,\n watch,\n} from 'vue'\nimport { isArray, isNumber } from '@element-plus/utils'\nimport { useNamespace } from '@element-plus/hooks'\nimport {\n useColumns,\n useData,\n useRow,\n useScrollbar,\n useStyles,\n} from './composables'\n\nimport type { TableV2Props } from './table'\nimport type { TableGridInstance } from './table-grid'\n\nfunction useTable(props: TableV2Props) {\n const mainTableRef = ref<TableGridInstance>()\n const leftTableRef = ref<TableGridInstance>()\n const rightTableRef = ref<TableGridInstance>()\n const {\n columns,\n columnsStyles,\n columnsTotalWidth,\n fixedColumnsOnLeft,\n fixedColumnsOnRight,\n hasFixedColumns,\n mainColumns,\n\n onColumnSorted,\n } = useColumns(props, toRef(props, 'columns'), toRef(props, 'fixed'))\n\n const {\n scrollTo,\n scrollToLeft,\n scrollToTop,\n scrollToRow,\n onScroll,\n onVerticalScroll,\n scrollPos,\n } = useScrollbar(props, {\n mainTableRef,\n leftTableRef,\n rightTableRef,\n\n onMaybeEndReached,\n })\n\n const ns = useNamespace('table-v2')\n const instance = getCurrentInstance()!\n\n // state\n const isScrolling = shallowRef(false)\n\n const {\n expandedRowKeys,\n lastRenderedRowIndex,\n isDynamic,\n isResetting,\n rowHeights,\n resetAfterIndex,\n onRowExpanded,\n onRowHeightChange,\n onRowHovered,\n onRowsRendered,\n } = useRow(props, {\n mainTableRef,\n leftTableRef,\n rightTableRef,\n tableInstance: instance,\n ns,\n isScrolling,\n })\n\n const { data, depthMap } = useData(props, {\n expandedRowKeys,\n lastRenderedRowIndex,\n resetAfterIndex,\n })\n\n const rowsHeight = computed(() => {\n const { estimatedRowHeight, rowHeight } = props\n const _data = unref(data)\n if (isNumber(estimatedRowHeight)) {\n // calculate the actual height\n return Object.values(unref(rowHeights)).reduce(\n (acc, curr) => acc + curr,\n 0\n )\n }\n\n return _data.length * rowHeight\n })\n\n const {\n bodyWidth,\n fixedTableHeight,\n mainTableHeight,\n leftTableWidth,\n rightTableWidth,\n windowHeight,\n footerHeight,\n emptyStyle,\n rootStyle,\n headerHeight,\n } = useStyles(props, {\n columnsTotalWidth,\n fixedColumnsOnLeft,\n fixedColumnsOnRight,\n rowsHeight,\n })\n\n // DOM/Component refs\n const containerRef = ref()\n\n const showEmpty = computed(() => {\n const noData = unref(data).length === 0\n\n return isArray(props.fixedData)\n ? props.fixedData.length === 0 && noData\n : noData\n })\n\n function getRowHeight(rowIndex: number) {\n const { estimatedRowHeight, rowHeight, rowKey } = props\n\n if (!estimatedRowHeight) return rowHeight\n\n return (\n unref(rowHeights)[unref(data)[rowIndex][rowKey]] || estimatedRowHeight\n )\n }\n\n const isEndReached = ref(false)\n function onMaybeEndReached() {\n const { onEndReached } = props\n if (!onEndReached) return\n\n const { scrollTop } = unref(scrollPos)\n\n const _totalHeight = unref(rowsHeight)\n const clientHeight = unref(windowHeight)\n\n const remainDistance =\n _totalHeight - (scrollTop + clientHeight) + props.hScrollbarSize\n\n if (\n !isEndReached.value &&\n unref(lastRenderedRowIndex) >= 0 &&\n _totalHeight <= scrollTop + unref(mainTableHeight) - unref(headerHeight)\n ) {\n isEndReached.value = true\n onEndReached(remainDistance)\n } else {\n isEndReached.value = false\n }\n }\n\n // events\n\n watch(\n () => unref(rowsHeight),\n () => (isEndReached.value = false)\n )\n\n watch(\n () => props.expandedRowKeys,\n (val) => (expandedRowKeys.value = val),\n {\n deep: true,\n }\n )\n\n return {\n // models\n columns,\n containerRef,\n mainTableRef,\n leftTableRef,\n rightTableRef,\n // states\n isDynamic,\n isResetting,\n isScrolling,\n hasFixedColumns,\n // records\n columnsStyles,\n columnsTotalWidth,\n data,\n expandedRowKeys,\n depthMap,\n fixedColumnsOnLeft,\n fixedColumnsOnRight,\n mainColumns,\n // metadata\n bodyWidth,\n emptyStyle,\n rootStyle,\n footerHeight,\n mainTableHeight,\n fixedTableHeight,\n leftTableWidth,\n rightTableWidth,\n // flags\n showEmpty,\n\n // methods\n getRowHeight,\n\n // event handlers\n onColumnSorted,\n onRowHovered,\n onRowExpanded,\n onRowsRendered,\n onRowHeightChange,\n // use scrollbars\n scrollTo,\n scrollToLeft,\n scrollToTop,\n scrollToRow,\n onScroll,\n onVerticalScroll,\n }\n}\n\nexport { useTable }\n\nexport type UseTableReturn = ReturnType<typeof useTable>\n"],"names":[],"mappings":"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"}