Files
sentinel/static/app/utils/useDevicePixelRatio.tsx
2024-02-15 17:01:50 +00:00

33 lines
965 B
TypeScript

import {useCallback, useLayoutEffect, useState} from 'react';
/**
* Hook to retrieve dpr value of the device and monitor for changes
* (e.g. if user drags window to a screen with different dpr, we want to be notified).
* @returns dpr of the device
*/
function useDevicePixelRatio(): number {
const [devicePixelRatio, setDevicePixelRatio] = useState<number>(
window.devicePixelRatio
);
const updateDevicePixelRatio = useCallback(() => {
setDevicePixelRatio(window.devicePixelRatio);
}, []);
useLayoutEffect(() => {
window
.matchMedia(`(resolution: ${devicePixelRatio}dppx)`)
.addEventListener('change', updateDevicePixelRatio, {once: true});
return () => {
window
.matchMedia(`(resolution: ${window.devicePixelRatio}dppx)`)
.removeEventListener('change', updateDevicePixelRatio);
};
}, [devicePixelRatio, updateDevicePixelRatio]);
return devicePixelRatio;
}
export {useDevicePixelRatio};