UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 10.6 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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"}