{"version":3,"file":"use-table.mjs","names":[],"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"],"mappings":";;;;;;;;;;AAsBA,SAAS,SAAS,OAAqB;CACrC,MAAM,eAAe,KAAwB;CAC7C,MAAM,eAAe,KAAwB;CAC7C,MAAM,gBAAgB,KAAwB;CAC9C,MAAM,EACJ,SACA,eACA,mBACA,oBACA,qBACA,iBACA,aAEA,mBACE,WAAW,OAAO,MAAM,OAAO,UAAU,EAAE,MAAM,OAAO,QAAQ,CAAC;CAErE,MAAM,EACJ,UACA,cACA,aACA,aACA,UACA,kBACA,cACE,aAAa,OAAO;EACtB;EACA;EACA;EAEA;EACD,CAAC;CAEF,MAAM,KAAK,aAAa,WAAW;CACnC,MAAM,WAAW,oBAAoB;CAGrC,MAAM,cAAc,WAAW,MAAM;CAErC,MAAM,EACJ,iBACA,sBACA,WACA,aACA,YACA,iBACA,eACA,mBACA,cACA,mBACE,OAAO,OAAO;EAChB;EACA;EACA;EACA,eAAe;EACf;EACA;EACD,CAAC;CAEF,MAAM,EAAE,MAAM,aAAa,QAAQ,OAAO;EACxC;EACA;EACA;EACD,CAAC;CAEF,MAAM,aAAa,eAAe;EAChC,MAAM,EAAE,oBAAoB,cAAc;EAC1C,MAAM,QAAQ,MAAM,KAAK;AACzB,MAAI,SAAS,mBAAmB,CAE9B,QAAO,OAAO,OAAO,MAAM,WAAW,CAAC,CAAC,QACrC,KAAK,SAAS,MAAM,MACrB,EACD;AAGH,SAAO,MAAM,SAAS;GACtB;CAEF,MAAM,EACJ,WACA,kBACA,iBACA,gBACA,iBACA,cACA,cACA,YACA,WACA,iBACE,UAAU,OAAO;EACnB;EACA;EACA;EACA;EACD,CAAC;CAGF,MAAM,eAAe,KAAK;CAE1B,MAAM,YAAY,eAAe;EAC/B,MAAM,SAAS,MAAM,KAAK,CAAC,WAAW;AAEtC,SAAO,QAAQ,MAAM,UAAU,GAC3B,MAAM,UAAU,WAAW,KAAK,SAChC;GACJ;CAEF,SAAS,aAAa,UAAkB;EACtC,MAAM,EAAE,oBAAoB,WAAW,WAAW;AAElD,MAAI,CAAC,mBAAoB,QAAO;AAEhC,SACE,MAAM,WAAW,CAAC,MAAM,KAAK,CAAC,UAAU,YAAY;;CAIxD,MAAM,eAAe,IAAI,MAAM;CAC/B,SAAS,oBAAoB;EAC3B,MAAM,EAAE,iBAAiB;AACzB,MAAI,CAAC,aAAc;EAEnB,MAAM,EAAE,cAAc,MAAM,UAAU;EAEtC,MAAM,eAAe,MAAM,WAAW;EAGtC,MAAM,iBACJ,gBAAgB,YAHG,MAAM,aAAa,IAGM,MAAM;AAEpD,MACE,CAAC,aAAa,SACd,MAAM,qBAAqB,IAAI,KAC/B,gBAAgB,YAAY,MAAM,gBAAgB,GAAG,MAAM,aAAa,EACxE;AACA,gBAAa,QAAQ;AACrB,gBAAa,eAAe;QAE5B,cAAa,QAAQ;;AAMzB,aACQ,MAAM,WAAW,QAChB,aAAa,QAAQ,MAC7B;AAED,aACQ,MAAM,kBACX,QAAS,gBAAgB,QAAQ,KAClC,EACE,MAAM,MACP,CACF;AAED,QAAO;EAEL;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAGA;EAGA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACD"}