hooks.ts 1.0 KB

12345678910111213141516171819202122232425262728293031
  1. import { useEffect } from 'react'
  2. import { useMarketplaceContext } from '@/app/components/plugins/marketplace/context'
  3. export const useScrollIntersection = (
  4. anchorRef: React.RefObject<HTMLDivElement>,
  5. intersectionContainerId = 'marketplace-container',
  6. ) => {
  7. const intersected = useMarketplaceContext(v => v.intersected)
  8. const setIntersected = useMarketplaceContext(v => v.setIntersected)
  9. useEffect(() => {
  10. const container = document.getElementById(intersectionContainerId)
  11. let observer: IntersectionObserver | undefined
  12. if (container && anchorRef.current) {
  13. observer = new IntersectionObserver((entries) => {
  14. const isIntersecting = entries[0].isIntersecting
  15. if (isIntersecting && !intersected)
  16. setIntersected(true)
  17. if (!isIntersecting && intersected)
  18. setIntersected(false)
  19. }, {
  20. root: container,
  21. })
  22. observer.observe(anchorRef.current)
  23. }
  24. return () => observer?.disconnect()
  25. }, [anchorRef, intersected, setIntersected, intersectionContainerId])
  26. }