{"version":3,"file":"index.mjs","sources":["../../../../../../../packages/vue-components/vc-table/src/FixedHolder/index.tsx"],"sourcesContent":["import type { Ref } from 'vue';\nimport type { HeaderProps } from '../Header/Header';\nimport type { ColumnsType, ColumnType, DefaultRecordType } from '../interface';\nimport { addEventListenerWrap, classNames } from '@antdv/utils';\nimport {\n  computed,\n  defineComponent,\n  nextTick,\n  onBeforeUnmount,\n  onMounted,\n  ref,\n  toRef,\n  watchEffect,\n} from 'vue';\nimport ColGroup from '../ColGroup';\nimport { useInjectTable } from '../context/TableContext';\n\nfunction useColumnWidth(colWidthsRef: Ref<readonly number[]>, columCountRef: Ref<number>) {\n  return computed(() => {\n    const cloneColumns: number[] = [];\n    const colWidths = colWidthsRef.value;\n    const columCount = columCountRef.value;\n    for (let i = 0; i < columCount; i += 1) {\n      const val = colWidths[i];\n      if (val !== undefined)\n        cloneColumns[i] = val;\n      else\n        return null;\n    }\n    return cloneColumns;\n  });\n}\n\nexport interface FixedHeaderProps<RecordType> extends HeaderProps<RecordType> {\n  noData: boolean;\n  maxContentScroll: boolean;\n  colWidths: readonly number[];\n  columCount: number;\n  direction: 'ltr' | 'rtl';\n  fixHeader: boolean;\n  stickyTopOffset?: number;\n  stickyBottomOffset?: number;\n  stickyClassName?: string;\n  onScroll: (info: { currentTarget: HTMLDivElement; scrollLeft?: number }) => void;\n}\n\nexport default defineComponent<FixedHeaderProps<DefaultRecordType>>({\n  name: 'FixedHolder',\n  inheritAttrs: false,\n  props: [\n    'columns',\n    'flattenColumns',\n    'stickyOffsets',\n    'customHeaderRow',\n    'noData',\n    'maxContentScroll',\n    'colWidths',\n    'columCount',\n    'direction',\n    'fixHeader',\n    'stickyTopOffset',\n    'stickyBottomOffset',\n    'stickyClassName',\n  ] as any,\n  emits: ['scroll'],\n  setup(props, { attrs, slots, emit }) {\n    const tableContext = useInjectTable();\n    const combinationScrollBarSize = computed(() =>\n      tableContext.isSticky && !props.fixHeader ? 0 : tableContext.scrollbarSize,\n    );\n    const scrollRef = ref();\n    const onWheel = (e: WheelEvent) => {\n      const { currentTarget, deltaX } = e;\n      if (deltaX) {\n        emit('scroll', { currentTarget, scrollLeft: (currentTarget as any).scrollLeft + deltaX });\n        e.preventDefault();\n      }\n    };\n    const wheelEvent = ref();\n    onMounted(() => {\n      nextTick(() => {\n        wheelEvent.value = addEventListenerWrap(scrollRef.value, 'wheel', onWheel);\n      });\n    });\n    onBeforeUnmount(() => {\n      wheelEvent.value?.remove();\n    });\n\n    // Check if all flattenColumns has width\n    const allFlattenColumnsWithWidth = computed(() =>\n      props.flattenColumns.every(\n        column => column.width && column.width !== 0 && column.width !== '0px',\n      ),\n    );\n\n    const columnsWithScrollbar = ref<ColumnsType<unknown>>([]);\n    const flattenColumnsWithScrollbar = ref<ColumnsType<unknown>>([]);\n\n    watchEffect(() => {\n      // Add scrollbar column\n      const lastColumn = props.flattenColumns[props.flattenColumns.length - 1];\n      const ScrollBarColumn: ColumnType<unknown> & { scrollbar: true } = {\n        fixed: lastColumn ? lastColumn.fixed : null,\n        scrollbar: true,\n        customHeaderCell: () => ({\n          class: `${tableContext.prefixCls}-cell-scrollbar`,\n        }),\n      };\n\n      columnsWithScrollbar.value = combinationScrollBarSize.value\n        ? [...props.columns, ScrollBarColumn]\n        : props.columns;\n\n      flattenColumnsWithScrollbar.value = combinationScrollBarSize.value\n        ? [...props.flattenColumns, ScrollBarColumn]\n        : props.flattenColumns;\n    });\n\n    // Calculate the sticky offsets\n    const headerStickyOffsets = computed(() => {\n      const { stickyOffsets, direction } = props;\n      const { right, left } = stickyOffsets;\n      return {\n        ...stickyOffsets,\n        left:\n          direction === 'rtl'\n            ? [...left.map(width => width + combinationScrollBarSize.value), 0]\n            : left,\n        right:\n          direction === 'rtl'\n            ? right\n            : [...right.map(width => width + combinationScrollBarSize.value), 0],\n        isSticky: tableContext.isSticky,\n      };\n    });\n\n    const mergedColumnWidth = useColumnWidth(toRef(props, 'colWidths'), toRef(props, 'columCount'));\n\n    return () => {\n      const {\n        noData,\n        columCount,\n        stickyTopOffset,\n        stickyBottomOffset,\n        stickyClassName,\n        maxContentScroll,\n      } = props;\n      const { isSticky } = tableContext;\n      return (\n        <div\n          style={{\n            overflow: 'hidden',\n            ...(isSticky ? { top: `${stickyTopOffset}px`, bottom: `${stickyBottomOffset}px` } : {}),\n          }}\n          ref={scrollRef}\n          class={classNames(attrs.class, {\n            [stickyClassName]: !!stickyClassName,\n          })}\n        >\n          <table\n            style={{\n              tableLayout: 'fixed',\n              visibility: noData || mergedColumnWidth.value ? null : 'hidden',\n            }}\n          >\n            {(!noData || !maxContentScroll || allFlattenColumnsWithWidth.value) && (\n              <ColGroup\n                colWidths={\n                  mergedColumnWidth.value\n                    ? [...mergedColumnWidth.value, combinationScrollBarSize.value]\n                    : []\n                }\n                columCount={columCount + 1}\n                columns={flattenColumnsWithScrollbar.value}\n              />\n            )}\n            {slots.default?.({\n              ...props,\n              stickyOffsets: headerStickyOffsets.value,\n              columns: columnsWithScrollbar.value,\n              flattenColumns: flattenColumnsWithScrollbar.value,\n            })}\n          </table>\n        </div>\n      );\n    };\n  },\n});\n"],"names":["useColumnWidth","colWidthsRef","columCountRef","computed","cloneColumns","colWidths","value","columCount","i","val","undefined","name","inheritAttrs","props","emits","setup","attrs","slots","emit","tableContext","useInjectTable","combinationScrollBarSize","isSticky","fixHeader","scrollbarSize","scrollRef","ref","onWheel","e","currentTarget","deltaX","scrollLeft","preventDefault","wheelEvent","onMounted","nextTick","addEventListenerWrap","onBeforeUnmount","remove","allFlattenColumnsWithWidth","flattenColumns","every","column","width","columnsWithScrollbar","flattenColumnsWithScrollbar","watchEffect","lastColumn","length","ScrollBarColumn","fixed","scrollbar","customHeaderCell","class","prefixCls","columns","headerStickyOffsets","stickyOffsets","direction","right","left","map","mergedColumnWidth","toRef","noData","stickyTopOffset","stickyBottomOffset","stickyClassName","maxContentScroll","_createVNode","overflow","top","bottom","classNames","tableLayout","visibility","ColGroup","default"],"mappings":"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"}