{"version":3,"file":"use-row.mjs","sources":["../../../../../../../packages/components/table-v2/src/composables/use-row.ts"],"sourcesContent":["import {\n  computed,\n  getCurrentInstance,\n  ref,\n  shallowRef,\n  unref,\n  watch,\n} from 'vue'\nimport { debounce } from 'lodash-unified'\nimport { isNumber } from '@bigin/utils'\nimport { FixedDir } from '../constants'\n\nimport type { Ref } 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'\n\ntype Heights = Record<KeyType, number>\ntype GridInstanceRef = Ref<TableGridInstance | undefined>\n\ntype UseRowProps = {\n  mainTableRef: GridInstanceRef\n  leftTableRef: GridInstanceRef\n  rightTableRef: GridInstanceRef\n\n  onMaybeEndReached: () => void\n}\n\nexport const useRow = (\n  props: TableV2Props,\n  { mainTableRef, leftTableRef, rightTableRef, onMaybeEndReached }: UseRowProps\n) => {\n  const vm = getCurrentInstance()!\n  const { emit } = vm\n  const isResetting = shallowRef(false)\n  const hoveringRowKey = shallowRef<KeyType | null>(null)\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    hoveringRowKey.value = hovered ? rowKey : null\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\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  // when rendered row changes, maybe reaching the bottom\n  watch(lastRenderedRowIndex, () => onMaybeEndReached())\n\n  return {\n    hoveringRowKey,\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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"}