UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 11 kB
{"version":3,"file":"use-row.mjs","sources":["../../../../../../../packages/components/table-v2/src/composables/use-row.ts"],"sourcesContent":["import {\n computed,\n getCurrentInstance,\n nextTick,\n ref,\n shallowRef,\n unref,\n} from 'vue'\nimport { debounce } from 'lodash-unified'\nimport { isNumber } from '@element-plus/utils'\nimport { FixedDir } from '../constants'\n\nimport type { ComponentInternalInstance, Ref, ShallowRef } from 'vue'\nimport type { TableV2Props } from '../table'\nimport type {\n RowExpandParams,\n RowHeightChangedParams,\n RowHoverParams,\n} from '../row'\nimport type { FixedDirection, KeyType } from '../types'\nimport type { onRowRenderedParams } from '../grid'\nimport type { TableGridInstance } from '../table-grid'\nimport type { UseNamespaceReturn } from '@element-plus/hooks'\n\ntype Heights = Record<KeyType, number>\ntype GridInstanceRef = Ref<TableGridInstance | undefined>\n\ntype UseRowProps = {\n mainTableRef: GridInstanceRef\n leftTableRef: GridInstanceRef\n rightTableRef: GridInstanceRef\n tableInstance: ComponentInternalInstance\n ns: UseNamespaceReturn\n isScrolling: ShallowRef<boolean>\n}\n\nexport const useRow = (\n props: TableV2Props,\n {\n mainTableRef,\n leftTableRef,\n rightTableRef,\n tableInstance,\n ns,\n isScrolling,\n }: UseRowProps\n) => {\n const vm = getCurrentInstance()!\n const { emit } = vm\n const isResetting = shallowRef(false)\n const expandedRowKeys = ref<KeyType[]>(props.defaultExpandedRowKeys || [])\n const lastRenderedRowIndex = ref(-1)\n const resetIndex = shallowRef<number | null>(null)\n const rowHeights = ref<Heights>({})\n const pendingRowHeights = ref<Heights>({})\n const leftTableHeights = shallowRef<Heights>({})\n const mainTableHeights = shallowRef<Heights>({})\n const rightTableHeights = shallowRef<Heights>({})\n const isDynamic = computed(() => isNumber(props.estimatedRowHeight))\n\n function onRowsRendered(params: onRowRenderedParams) {\n props.onRowsRendered?.(params)\n\n if (params.rowCacheEnd > unref(lastRenderedRowIndex)) {\n lastRenderedRowIndex.value = params.rowCacheEnd\n }\n }\n\n function onRowHovered({ hovered, rowKey }: RowHoverParams) {\n if (isScrolling.value) {\n return\n }\n const tableRoot = tableInstance!.vnode.el as HTMLElement\n const rows = tableRoot.querySelectorAll(`[rowkey=\"${String(rowKey)}\"]`)\n rows.forEach((row) => {\n if (hovered) {\n row.classList.add(ns.is('hovered'))\n } else {\n row.classList.remove(ns.is('hovered'))\n }\n })\n }\n\n function onRowExpanded({\n expanded,\n rowData,\n rowIndex,\n rowKey,\n }: RowExpandParams) {\n const _expandedRowKeys = [...unref(expandedRowKeys)]\n const currentKeyIndex = _expandedRowKeys.indexOf(rowKey)\n if (expanded) {\n if (currentKeyIndex === -1) _expandedRowKeys.push(rowKey)\n } else {\n if (currentKeyIndex > -1) _expandedRowKeys.splice(currentKeyIndex, 1)\n }\n expandedRowKeys.value = _expandedRowKeys\n\n emit('update:expandedRowKeys', _expandedRowKeys)\n props.onRowExpand?.({\n expanded,\n rowData,\n rowIndex,\n rowKey,\n })\n // If this is not controlled, then use this to notify changes\n props.onExpandedRowsChange?.(_expandedRowKeys)\n\n const tableRoot = tableInstance!.vnode.el as HTMLElement\n const hoverRow = tableRoot.querySelector(\n `.${ns.is('hovered')}[rowkey=\"${String(rowKey)}\"]`\n )\n if (hoverRow) {\n nextTick(() => onRowHovered({ hovered: true, rowKey }))\n }\n }\n\n const flushingRowHeights = debounce(() => {\n isResetting.value = true\n rowHeights.value = { ...unref(rowHeights), ...unref(pendingRowHeights) }\n resetAfterIndex(unref(resetIndex)!, false)\n pendingRowHeights.value = {}\n // force update\n resetIndex.value = null\n mainTableRef.value?.forceUpdate()\n leftTableRef.value?.forceUpdate()\n rightTableRef.value?.forceUpdate()\n vm.proxy?.$forceUpdate()\n isResetting.value = false\n }, 0)\n\n function resetAfterIndex(index: number, forceUpdate = false) {\n if (!unref(isDynamic)) return\n ;[mainTableRef, leftTableRef, rightTableRef].forEach((tableRef) => {\n const table = unref(tableRef)\n if (table) table.resetAfterRowIndex(index, forceUpdate)\n })\n }\n\n function resetHeights(rowKey: KeyType, height: number, rowIdx: number) {\n const resetIdx = unref(resetIndex)\n if (resetIdx === null) {\n resetIndex.value = rowIdx\n } else {\n if (resetIdx > rowIdx) {\n resetIndex.value = rowIdx\n }\n }\n\n pendingRowHeights.value[rowKey] = height\n }\n\n function onRowHeightChange(\n { rowKey, height, rowIndex }: RowHeightChangedParams,\n fixedDir: FixedDirection\n ) {\n if (!fixedDir) {\n mainTableHeights.value[rowKey] = height\n } else {\n if (fixedDir === FixedDir.RIGHT) {\n rightTableHeights.value[rowKey] = height\n } else {\n leftTableHeights.value[rowKey] = height\n }\n }\n\n const maximumHeight = Math.max(\n ...[leftTableHeights, rightTableHeights, mainTableHeights].map(\n (records) => records.value[rowKey] || 0\n )\n )\n\n if (unref(rowHeights)[rowKey] !== maximumHeight) {\n resetHeights(rowKey, maximumHeight, rowIndex)\n flushingRowHeights()\n }\n }\n\n return {\n expandedRowKeys,\n lastRenderedRowIndex,\n isDynamic,\n isResetting,\n rowHeights,\n\n resetAfterIndex,\n onRowExpanded,\n onRowHovered,\n onRowsRendered,\n onRowHeightChange,\n }\n}\n\nexport type UseRowReturn = ReturnType<typeof useRow>\n"],"names":[],"mappings":"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"}