/
Bybaleshqa
/
Forktest
Обзор
Документация
Войти
/
Bybaleshqa
/
Forktest
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
packages/table/src/hooks/useFixedHeader.ts
47 строк
1 KB
Denis Svyatovets
v1.10.0
27 мар 2024, 13:48
27 мар 2024, 13:48
c9029ae
Код
Авторство
О чём код?
import * as React from 'react' export const useFixedHeader = ( headerRef: React.MutableRefObject<HTMLElement | undefined>, fixedHeader?: boolean ): number[] | undefined => { const [headerRowsTopOffsets, setHeaderRowsTopOffsets] = React.useState<number[]>() const calculateOffsets = React.useCallback(() => { const rowsCount = headerRef.current?.childElementCount if (rowsCount) { const rowsTopOffsets: number[] = [] for (let i = 0; i < rowsCount; i++) { rowsTopOffsets[i] = ( headerRef.current?.children.item(i) as HTMLElement ).offsetTop } setHeaderRowsTopOffsets(rowsTopOffsets) } }, [headerRef]) React.useLayoutEffect(() => { if (fixedHeader) { calculateOffsets() } }, [fixedHeader, calculateOffsets]) React.useEffect(() => { if (fixedHeader) { const container = headerRef.current let resizeObserver: ResizeObserver | undefined if ('ResizeObserver' in window && container) { resizeObserver = new ResizeObserver(calculateOffsets) resizeObserver.observe(container) } return () => { if (container) { resizeObserver?.unobserve(container) } } } }, [fixedHeader, headerRef, calculateOffsets]) return headerRowsTopOffsets }