Skip to content

Commit

Permalink
Merge ecbf35c into a1122e4
Browse files Browse the repository at this point in the history
  • Loading branch information
francinelucca authored Jan 29, 2025
2 parents a1122e4 + ecbf35c commit d230654
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 9 deletions.
5 changes: 5 additions & 0 deletions .changeset/cyan-shirts-drive.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@primer/react": patch
---

fix(useResizeObserver): undefined variable alternative
41 changes: 32 additions & 9 deletions packages/react/src/hooks/useResizeObserver.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import type {RefObject} from 'react'
import {useRef} from 'react'
import {useRef, useState} from 'react'
import useLayoutEffect from '../utils/useIsomorphicLayoutEffect'

// https://gist.github.com/strothj/708afcf4f01dd04de8f49c92e88093c3
Expand All @@ -14,6 +14,7 @@ export function useResizeObserver<T extends HTMLElement>(
target?: RefObject<T>,
depsArray: unknown[] = [],
) {
const [targetClientRect, setTargetClientRect] = useState<DOMRect | null>(null)
const savedCallback = useRef(callback)

useLayoutEffect(() => {
Expand All @@ -26,15 +27,37 @@ export function useResizeObserver<T extends HTMLElement>(
return
}

const observer = new ResizeObserver(entries => {
savedCallback.current(entries)
})

observer.observe(targetEl)

return () => {
observer.disconnect()
if (typeof ResizeObserver === 'function') {
const observer = new ResizeObserver(entries => {
savedCallback.current(entries)
})

observer.observe(targetEl)

return () => {
observer.disconnect()
}
} else {
const saveTargetDimensions = () => {
const currTargetRect = targetEl.getBoundingClientRect()

if (currTargetRect.width !== targetClientRect?.width || currTargetRect.height !== targetClientRect.height) {
savedCallback.current([
{
contentRect: currTargetRect,
},
])
}
setTargetClientRect(currTargetRect)
}
// eslint-disable-next-line github/prefer-observers
window.addEventListener('resize', saveTargetDimensions)

return () => {
window.removeEventListener('resize', saveTargetDimensions)
}
}

// eslint-disable-next-line react-hooks/exhaustive-deps
}, [target, ...depsArray])
}

0 comments on commit d230654

Please sign in to comment.