mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-04 06:58:02 +00:00
93fb48ea1c
* feat: operator view * chore: smoke test operator * refactor: small improvements from deepsource --------- Co-authored-by: arihanv <arihanvaranasi@gmail.com> Co-authored-by: arihanv <63890951+arihanv@users.noreply.github.com>
33 lines
917 B
TypeScript
33 lines
917 B
TypeScript
// roughly from https://github.com/juliencrn/usehooks-ts/blob/master/packages/usehooks-ts/src/useMediaQuery/useMediaQuery.ts
|
|
|
|
import { useCallback, useEffect, useState } from 'react';
|
|
|
|
function getMatches(query: string): boolean {
|
|
return window.matchMedia(query).matches;
|
|
}
|
|
|
|
// TODO: debounce handleChange
|
|
export default function useMediaQuery(query: string): boolean {
|
|
const [matches, setMatches] = useState<boolean>(getMatches(query));
|
|
|
|
const handleChange = useCallback(() => {
|
|
setMatches(getMatches(query));
|
|
}, [query]);
|
|
|
|
useEffect(() => {
|
|
const matchMedia = window.matchMedia(query);
|
|
|
|
// Triggered at the first client-side load and if query changes
|
|
handleChange();
|
|
|
|
// Listen matchMedia
|
|
matchMedia.addEventListener('change', handleChange);
|
|
|
|
return () => {
|
|
matchMedia.removeEventListener('change', handleChange);
|
|
};
|
|
}, [handleChange, query]);
|
|
|
|
return matches;
|
|
}
|