{"version":3,"file":"use-table.mjs","sources":["../../../../../../packages/components/table-v2/src/use-table.ts"],"sourcesContent":["import { computed, ref, shallowRef, toRef, unref, watch } from 'vue'\nimport { isArray } from '@bigin/utils'\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 {\n    expandedRowKeys,\n    hoveringRowKey,\n    lastRenderedRowIndex,\n    isDynamic,\n    isResetting,\n    rowHeights,\n\n    resetAfterIndex,\n    onRowExpanded,\n    onRowHeightChange,\n    onRowHovered,\n    onRowsRendered,\n  } = useRow(props, {\n    mainTableRef,\n    leftTableRef,\n    rightTableRef,\n\n    onMaybeEndReached,\n  })\n\n  const { data, depthMap } = useData(props, {\n    expandedRowKeys,\n    lastRenderedRowIndex,\n    resetAfterIndex,\n  })\n\n  const {\n    bodyWidth,\n    fixedTableHeight,\n    mainTableHeight,\n    leftTableWidth,\n    rightTableWidth,\n    headerWidth,\n    rowsHeight,\n    windowHeight,\n    footerHeight,\n    emptyStyle,\n    rootStyle,\n  } = useStyles(props, {\n    columnsTotalWidth,\n    data,\n    fixedColumnsOnLeft,\n    fixedColumnsOnRight,\n  })\n  // state\n  const isScrolling = shallowRef(false)\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  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 heightUntilEnd =\n      _totalHeight - (scrollTop + clientHeight) + props.hScrollbarSize\n\n    if (\n      unref(lastRenderedRowIndex) >= 0 &&\n      _totalHeight !== unref(rowsHeight)\n    ) {\n      onEndReached(heightUntilEnd)\n    }\n  }\n\n  // events\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    hoveringRowKey,\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    headerWidth,\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":";;;;;;;;;;AAaA,SAAS,SAAS,KAAqB,EAAA;AACrC,EAAA,MAAM,eAAe,GAAuB,EAAA,CAAA;AAC5C,EAAA,MAAM,eAAe,GAAuB,EAAA,CAAA;AAC5C,EAAA,MAAM,gBAAgB,GAAuB,EAAA,CAAA;AAC7C,EAAM,MAAA;AAAA,IACJ,OAAA;AAAA,IACA,aAAA;AAAA,IACA,iBAAA;AAAA,IACA,kBAAA;AAAA,IACA,mBAAA;AAAA,IACA,eAAA;AAAA,IACA,WAAA;AAAA,IAEA,cAAA;AAAA,GACF,GAAI,UAAW,CAAA,KAAA,EAAO,KAAM,CAAA,KAAA,EAAO,SAAS,CAAG,EAAA,KAAA,CAAM,KAAO,EAAA,OAAO,CAAC,CAAA,CAAA;AAEpE,EAAM,MAAA;AAAA,IACJ,QAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,gBAAA;AAAA,IACA,SAAA;AAAA,GACF,GAAI,aAAa,KAAO,EAAA;AAAA,IACtB,YAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IAEA,iBAAA;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA;AAAA,IACJ,eAAA;AAAA,IACA,cAAA;AAAA,IACA,oBAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IAEA,eAAA;AAAA,IACA,aAAA;AAAA,IACA,iBAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA;AAAA,GACF,GAAI,OAAO,KAAO,EAAA;AAAA,IAChB,YAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IAEA,iBAAA;AAAA,GACD,CAAA,CAAA;AAED,EAAA,MAAM,EAAE,IAAA,EAAM,QAAS,EAAA,GAAI,QAAQ,KAAO,EAAA;AAAA,IACxC,eAAA;AAAA,IACA,oBAAA;AAAA,IACA,eAAA;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA;AAAA,IACJ,SAAA;AAAA,IACA,gBAAA;AAAA,IACA,eAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,GACF,GAAI,UAAU,KAAO,EAAA;AAAA,IACnB,iBAAA;AAAA,IACA,IAAA;AAAA,IACA,kBAAA;AAAA,IACA,mBAAA;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,WAAA,GAAc,WAAW,KAAK,CAAA,CAAA;AAGpC,EAAA,MAAM,eAAe,GAAI,EAAA,CAAA;AAEzB,EAAM,MAAA,SAAA,GAAY,SAAS,MAAM;AAC/B,IAAA,MAAM,MAAS,GAAA,KAAA,CAAM,IAAI,CAAA,CAAE,MAAW,KAAA,CAAA,CAAA;AAEtC,IAAO,OAAA,OAAA,CAAQ,MAAM,SAAS,CAAA,GAC1B,MAAM,SAAU,CAAA,MAAA,KAAW,KAAK,MAChC,GAAA,MAAA,CAAA;AAAA,GACL,CAAA,CAAA;AAED,EAAA,SAAS,aAAa,QAAkB,EAAA;AACtC,IAAA,MAAM,EAAE,kBAAA,EAAoB,SAAW,EAAA,MAAA,EAAW,GAAA,KAAA,CAAA;AAElD,IAAA,IAAI,CAAC,kBAAA;AAAoB,MAAO,OAAA,SAAA,CAAA;AAEhC,IAAA,OACE,MAAM,UAAU,CAAA,CAAE,MAAM,IAAI,CAAA,CAAE,UAAU,MAAY,CAAA,CAAA,IAAA,kBAAA,CAAA;AAAA,GAExD;AAEA,EAAA,SAAS,iBAAoB,GAAA;AAC3B,IAAM,MAAA,EAAE,cAAiB,GAAA,KAAA,CAAA;AACzB,IAAA,IAAI,CAAC,YAAA;AAAc,MAAA,OAAA;AAEnB,IAAA,MAAM,EAAE,SAAA,EAAc,GAAA,KAAA,CAAM,SAAS,CAAA,CAAA;AAErC,IAAM,MAAA,YAAA,GAAe,MAAM,UAAU,CAAA,CAAA;AACrC,IAAM,MAAA,YAAA,GAAe,MAAM,YAAY,CAAA,CAAA;AAEvC,IAAA,MAAM,cACJ,GAAA,YAAA,IAAgB,SAAY,GAAA,YAAA,CAAA,GAAgB,KAAM,CAAA,cAAA,CAAA;AAEpD,IAAA,IACE,MAAM,oBAAoB,CAAA,IAAK,KAC/B,YAAiB,KAAA,KAAA,CAAM,UAAU,CACjC,EAAA;AACA,MAAA,YAAA,CAAa,cAAc,CAAA,CAAA;AAAA,KAC7B;AAAA,GACF;AAIA,EAAA,KAAA;AAAA,IACE,MAAM,KAAM,CAAA,eAAA;AAAA,IACZ,CAAC,GAAS,KAAA,eAAA,CAAgB,KAAQ,GAAA,GAAA;AAAA,IAClC;AAAA,MACE,IAAM,EAAA,IAAA;AAAA,KACR;AAAA,GACF,CAAA;AAEA,EAAO,OAAA;AAAA,IAEL,OAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IAEA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IAEA,aAAA;AAAA,IACA,iBAAA;AAAA,IACA,IAAA;AAAA,IACA,eAAA;AAAA,IACA,QAAA;AAAA,IACA,kBAAA;AAAA,IACA,mBAAA;AAAA,IACA,WAAA;AAAA,IAEA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IAEA,SAAA;AAAA,IAGA,YAAA;AAAA,IAGA,cAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IAEA,QAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,gBAAA;AAAA,GACF,CAAA;AACF;;;;"}