{"version":3,"file":"index.mjs","sources":["../../../../../../../../packages/components/table/src/table-body/index.ts"],"sourcesContent":["import {\n  defineComponent,\n  getCurrentInstance,\n  h,\n  inject,\n  onUnmounted,\n  watch,\n} from 'vue'\nimport { addClass, isClient, rAF, removeClass } from '@hd-front-end/utils'\nimport { useNamespace } from '@hd-front-end/hooks'\nimport useLayoutObserver from '../layout-observer'\nimport { removePopper } from '../util'\nimport { TABLE_INJECTION_KEY } from '../tokens'\nimport useRender from './render-helper'\nimport defaultProps from './defaults'\n\nimport type { VNode } from 'vue'\n\nexport default defineComponent({\n  name: 'ElTableBody',\n  props: defaultProps,\n  setup(props) {\n    const instance = getCurrentInstance()\n    const parent = inject(TABLE_INJECTION_KEY)\n    const ns = useNamespace('table')\n    const { wrappedRowRender, tooltipContent, tooltipTrigger } =\n      useRender(props)\n    const { onColumnsChange, onScrollableChange } = useLayoutObserver(parent!)\n\n    const hoveredCellList: HTMLTableCellElement[] = []\n    watch(props.store?.states.hoverRow, (newVal: any, oldVal: any) => {\n      const el = instance?.vnode.el as HTMLElement\n      const rows = Array.from(el?.children || []).filter((e) =>\n        e?.classList.contains(`${ns.e('row')}`)\n      )\n\n      // hover rowSpan > 1 choose the whole row\n      let rowNum = newVal\n      const childNodes = rows[rowNum]\n        ?.childNodes as NodeListOf<HTMLTableCellElement>\n      if (childNodes?.length) {\n        let control = 0\n        const indexes = Array.from(childNodes).reduce((acc, item, index) => {\n          // drop colsSpan\n          if (childNodes[index]?.colSpan > 1) {\n            control = childNodes[index]?.colSpan\n          }\n          if (item.nodeName !== 'TD' && control === 0) {\n            acc.push(index)\n          }\n          control > 0 && control--\n          return acc\n        }, [] as number[])\n\n        indexes.forEach((rowIndex) => {\n          rowNum = newVal\n          while (rowNum > 0) {\n            // find from previous\n            const preChildNodes = rows[rowNum - 1]\n              ?.childNodes as NodeListOf<HTMLTableCellElement>\n\n            if (\n              preChildNodes[rowIndex] &&\n              preChildNodes[rowIndex].nodeName === 'TD' &&\n              preChildNodes[rowIndex].rowSpan > 1\n            ) {\n              addClass(preChildNodes[rowIndex], 'hover-cell')\n              hoveredCellList.push(preChildNodes[rowIndex])\n              break\n            }\n            rowNum--\n          }\n        })\n      } else {\n        hoveredCellList.forEach((item) => removeClass(item, 'hover-cell'))\n        hoveredCellList.length = 0\n      }\n      if (!props.store?.states.isComplex.value || !isClient) return\n\n      rAF(() => {\n        // just get first level children; fix #9723\n        const oldRow = rows[oldVal]\n        const newRow = rows[newVal]\n        // when there is fixed row, hover on rowSpan > 1 should not clear the class\n        if (oldRow && !oldRow.classList.contains('hover-fixed-row')) {\n          removeClass(oldRow, 'hover-row')\n        }\n        if (newRow) {\n          addClass(newRow, 'hover-row')\n        }\n      })\n    })\n\n    onUnmounted(() => {\n      removePopper?.()\n    })\n\n    return {\n      ns,\n      onColumnsChange,\n      onScrollableChange,\n      wrappedRowRender,\n      tooltipContent,\n      tooltipTrigger,\n    }\n  },\n  render() {\n    const { wrappedRowRender, store } = this\n    const data = store?.states.data.value || []\n    // Why do we need tabIndex: -1 ?\n    // If you set the tabindex attribute on an element ,\n    // then its child content cannot be scrolled with the arrow keys,\n    // unless you set tabindex on the content too\n    // See https://github.com/facebook/react/issues/25462#issuecomment-1274775248 or https://developer.mozilla.org/zh-CN/docs/Web/HTML/Global_attributes/tabindex\n    return h('tbody', { tabIndex: -1 }, [\n      data.reduce((acc: VNode[], row) => {\n        return acc.concat(wrappedRowRender(row, acc.length) as VNode[])\n      }, []),\n    ])\n  },\n})\n"],"names":["_a","_b"],"mappings":"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"}