{"version":3,"file":"useTableScroll2.mjs","sources":["../../../../../../../../packages/components/table/src/hooks/useTableScroll.ts"],"sourcesContent":["import { computed, nextTick, ref, unref, watch } from 'vue'\nimport { useDebounceFn } from '@vueuse/core'\nimport { useWindowSizeFn } from '@tav-ui/hooks/event/useWindowSizeFn'\nimport { getViewportOffset } from '@tav-ui/utils/domUtils'\nimport { isBoolean } from '@tav-ui/utils/is'\nimport { useModalContext } from '@tav-ui/components/modal/src/hooks/useModalContext'\nimport { useKeepScroll } from '@tav-ui/hooks/event/useKeepScroll'\nimport type { ComputedRef, Ref } from 'vue'\nimport type { BasicColumn, BasicTableProps, TableRowSelection } from '../types/table'\n\ntype Nullable<T> = T | null\ntype Recordable<T = any> = Record<string, T>\ninterface ComponentElRef<T extends HTMLElement = HTMLDivElement> {\n  $el: T\n}\ntype ComponentRef<T extends HTMLElement = HTMLDivElement> = ComponentElRef<T> | null\n\nexport function useTableScroll(\n  propsRef: ComputedRef<BasicTableProps>,\n  tableElRef: Ref<ComponentRef>,\n  columnsRef: ComputedRef<BasicColumn[]>,\n  rowSelectionRef: ComputedRef<TableRowSelection | null>,\n  getDataSourceRef: ComputedRef<Recordable[]>,\n  slots: any,\n  wrapRef: Ref<HTMLElement | null>,\n  formRef: Ref<HTMLElement | null>,\n  actionRef: Ref<HTMLElement | null>\n) {\n  const tableHeightRef: Ref<Nullable<number>> = ref(null)\n\n  const modalFn = useModalContext()\n\n  // Greater than animation time 280\n  const debounceRedoHeight = useDebounceFn(redoHeight, 100)\n\n  const getCanResize = computed(() => {\n    const { canResize, scroll } = unref(propsRef)\n    return canResize && !(scroll || {}).y\n  })\n\n  watch(\n    () => [unref(getCanResize), unref(getDataSourceRef)?.length],\n    () => {\n      debounceRedoHeight()\n    },\n    {\n      flush: 'post',\n    }\n  )\n\n  function redoHeight() {\n    nextTick(() => {\n      calcTableHeight()\n    })\n  }\n\n  function setHeight(height: number) {\n    tableHeightRef.value = height\n    //  Solve the problem of modal adaptive height calculation when the form is placed in the modal\n    modalFn?.redoModalHeight?.()\n  }\n\n  // No need to repeat queries\n  // let paginationEl: HTMLElement | null\n  let footerEl: HTMLElement | null\n  let bodyEl: HTMLElement | null\n  const keepScrollIns = ref<{ onScroll: () => void; scrollFn: () => void } | null>(null)\n  async function calcTableHeight() {\n    const {\n      resizeHeightOffset,\n      pagination,\n      maxHeight,\n      isCanResizeParent,\n      formRefMarginTopDistance,\n      tablePaddingDistance,\n    } = unref(propsRef)\n    // const tableData = unref(getDataSourceRef)\n    const table = unref(tableElRef)\n    if (!table) return\n    // debugger;\n    const tableEl: Element = table.$el\n    if (!tableEl) return\n\n    if (!bodyEl) {\n      bodyEl = tableEl.querySelector('.ant-table-body')\n      if (!bodyEl) return\n    }\n    if (unref(propsRef).keepScrollTop) {\n      keepScrollIns.value = useKeepScroll({ scrollEl: bodyEl })\n    }\n    const hasScrollBarY = bodyEl.scrollHeight > bodyEl.clientHeight\n    const hasScrollBarX = bodyEl.scrollWidth > bodyEl.clientWidth\n    if (hasScrollBarY) {\n      tableEl.classList.contains('hide-scrollbar-y') && tableEl.classList.remove('hide-scrollbar-y')\n    } else {\n      !tableEl.classList.contains('hide-scrollbar-y') && tableEl.classList.add('hide-scrollbar-y')\n    }\n    if (hasScrollBarX) {\n      tableEl.classList.contains('hide-scrollbar-x') && tableEl.classList.remove('hide-scrollbar-x')\n    } else {\n      !tableEl.classList.contains('hide-scrollbar-x') && tableEl.classList.add('hide-scrollbar-x')\n    }\n    bodyEl!.style.height = '100%'\n    // if (!unref(getCanResize) || tableData.length === 0) return;\n    if (isCanResizeParent) {\n      // console.log(isCanResizeParent, 'isCanResizeParent111111')\n      bodyEl!.style.height = '100%'\n      if (!unref(getCanResize)) return\n    } else {\n      // console.log(isCanResizeParent, 'isCanResizeParent22222')\n      bodyEl!.style.height = 'unset'\n      if (!unref(getCanResize)) return\n    }\n    await nextTick()\n    //Add a delay to get the correct bottomIncludeBody paginationHeight footerHeight headerHeight\n    const headEl = tableEl.querySelector('.ant-table-thead')\n    if (!headEl) return\n    // Table height from bottom\n    // hack:底部padding + table底部padding\n    // Pager height\n    let paginationHeight = 32 // 默认高度？\n    if (!isBoolean(pagination)) {\n      // paginationEl = tableEl.querySelector('.ant-pagination') as HTMLElement\n      paginationHeight = 32\n    } else {\n      paginationHeight = 0\n    }\n    let footerHeight = 0\n    if (!isBoolean(pagination)) {\n      if (!footerEl) {\n        footerEl = tableEl.querySelector('.ant-table-footer') as HTMLElement\n      } else {\n        const offsetHeight = footerEl.offsetHeight\n        footerHeight += offsetHeight || 0\n      }\n    }\n    let headerHeight = 0\n    if (headEl) {\n      headerHeight = (headEl as HTMLElement).offsetHeight\n    }\n    let bottomIncludeBody = 0\n    let height = 0\n    const tablePadding = tablePaddingDistance\n    if (unref(wrapRef) && isCanResizeParent) {\n      const formMargin = formRefMarginTopDistance\n      const TableMargin = 0\n      const wrapHeight = unref(wrapRef)?.offsetHeight ?? 0\n      let formHeight = unref(formRef)?.offsetHeight ?? 0\n      const actionHeight = unref(actionRef)?.offsetHeight ?? 0\n      formHeight = formHeight > actionHeight ? formHeight : actionHeight\n      if (formHeight && formMargin) {\n        formHeight += formMargin\n      }\n      let paginationMargin = 0\n      if (isBoolean(pagination) && !pagination) {\n        paginationMargin = 0\n      }\n      const headerCellHeight =\n        (tableEl.querySelector('.ant-table-title') as HTMLElement)?.offsetHeight ?? 0\n      //表格高度 - formHeight (搜素或者自定义的slots) - 0 - TableMargin(外间距) - 内间距\n      bottomIncludeBody =\n        wrapHeight -\n        formHeight -\n        headerCellHeight -\n        (tablePadding ? tablePadding : 0) -\n        paginationMargin -\n        TableMargin\n      height = bottomIncludeBody - paginationHeight - footerHeight - headerHeight\n    } else {\n      // Table height from bottom\n      bottomIncludeBody = getViewportOffset(headEl).bottomIncludeBody\n      height =\n        bottomIncludeBody -\n        (resizeHeightOffset || 0) -\n        (tablePadding ? tablePadding : 0) -\n        paginationHeight -\n        footerHeight -\n        headerHeight\n    }\n    height = (height > maxHeight! ? (maxHeight as number) : height) ?? height\n    setHeight(height)\n    // debugger\n    // console.log(bodyEl!.style.height, 'beforeCHange')\n    if (isCanResizeParent) {\n      bodyEl!.style.height = `${height}px`\n    } else {\n      if (!slots.footer) {\n        bodyEl!.style.height = `${height}px`\n      }\n    }\n  }\n  const fnInit = () => {\n    calcTableHeight()\n    nextTick(() => {\n      debounceRedoHeight()\n    })\n  }\n  useWindowSizeFn(calcTableHeight, 280)\n\n  const getScrollX = computed(() => {\n    let width = 0\n    if (unref(rowSelectionRef)) {\n      width += 60\n    }\n\n    // TODO props ?? 0;\n    const NORMAL_WIDTH = 150\n\n    const columns = unref(columnsRef).filter((item) => !item.defaultHidden)\n    columns.forEach((item) => {\n      width += Number.parseInt(item.width as string) || 0\n    })\n    const unsetWidthColumns = columns.filter((item) => !Reflect.has(item, 'width'))\n\n    const len = unsetWidthColumns.length\n    if (len !== 0) {\n      width += len * NORMAL_WIDTH\n    }\n\n    const table = unref(tableElRef)\n    const tableWidth = table?.$el?.offsetWidth ?? 0\n    return tableWidth > width ? '100%' : width\n  })\n  const getScrollRef = computed(() => {\n    const tableHeight = unref(tableHeightRef)\n    const { canResize, scroll } = unref(propsRef)\n    return {\n      x: unref(getScrollX),\n      y: canResize ? tableHeight || 1 : null,\n      scrollToFirstRowOnChange: true,\n      ...scroll,\n    }\n  })\n  return { getScrollRef, redoHeight, fnInit, keepScrollIns }\n}\n"],"names":[],"mappings":"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"}