Build NapCat Artifacts / Windows Loader Test (push) Canceled after 0s
Build NapCat Artifacts / Type Check & Test (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Framework (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Shell (push) Canceled after 0s
49 lines
1.1 KiB
Plaintext
49 lines
1.1 KiB
Plaintext
|
|
import {RefObject} from '@react-types/shared';
|
|
import {useEffect} from 'react';
|
|
|
|
function hasResizeObserver() {
|
|
return typeof window.ResizeObserver !== 'undefined';
|
|
}
|
|
|
|
type useResizeObserverOptionsType<T> = {
|
|
ref: RefObject<T | undefined | null> | undefined,
|
|
box?: ResizeObserverBoxOptions,
|
|
onResize: () => void
|
|
}
|
|
|
|
export function useResizeObserver<T extends Element>(options: useResizeObserverOptionsType<T>) {
|
|
const {ref, box, onResize} = options;
|
|
|
|
useEffect(() => {
|
|
let element = ref?.current;
|
|
if (!element) {
|
|
return;
|
|
}
|
|
|
|
if (!hasResizeObserver()) {
|
|
window.addEventListener('resize', onResize, false);
|
|
return () => {
|
|
window.removeEventListener('resize', onResize, false);
|
|
};
|
|
} else {
|
|
|
|
const resizeObserverInstance = new window.ResizeObserver((entries) => {
|
|
if (!entries.length) {
|
|
return;
|
|
}
|
|
|
|
onResize();
|
|
});
|
|
resizeObserverInstance.observe(element, {box});
|
|
|
|
return () => {
|
|
if (element) {
|
|
resizeObserverInstance.unobserve(element);
|
|
}
|
|
};
|
|
}
|
|
|
|
}, [onResize, ref, box]);
|
|
}
|