aboutsummaryrefslogtreecommitdiffstats
path: root/src/utils/hooks/use-match-media/use-match-media.ts
blob: 50ac0385fdf7a276b2358782b4ccaf7cf954458a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import { useEffect } from 'react';

export type UseMatchMediaCallback = (ev: MediaQueryListEvent) => void;

/**
 * React hook to watch for media changes based on the given query.
 *
 * @param {string} query - A media query.
 * @param {UseMatchMediaCallback} cb - A callback function to execute on change.
 */
export const useMatchMedia = (query: string, cb: UseMatchMediaCallback) => {
  useEffect(() => {
    window.matchMedia(query).addEventListener('change', cb);

    return () => window.matchMedia(query).removeEventListener('change', cb);
  }, [cb, query]);
};