DataTableHeaderLayout.tsx 902 B

1234567891011121314151617181920212223242526272829303132333435
  1. import { forwardRef, PropsWithChildren, useEffect, useRef } from 'react'
  2. import { cn } from 'ui'
  3. export const DataTableHeaderLayout = forwardRef<
  4. HTMLDivElement,
  5. PropsWithChildren<{
  6. setTopBarHeight: (height: number) => void
  7. }>
  8. >(({ setTopBarHeight, ...props }, _ref) => {
  9. const topBarRef = useRef<HTMLDivElement>(null)
  10. useEffect(() => {
  11. const observer = new ResizeObserver(() => {
  12. const rect = topBarRef.current?.getBoundingClientRect()
  13. if (rect) {
  14. setTopBarHeight(rect.height)
  15. }
  16. })
  17. const topBar = topBarRef.current
  18. if (!topBar) return
  19. observer.observe(topBar)
  20. return () => observer.unobserve(topBar)
  21. }, [topBarRef])
  22. return (
  23. <div
  24. ref={topBarRef}
  25. className={cn('flex flex-col gap-4 bg-background p-2', 'top-0 z-10 pb-4')}
  26. {...props}
  27. />
  28. )
  29. })
  30. DataTableHeaderLayout.displayName = 'DataTableHeaderLayout'