Skip to content

Commit 5cd530e

Browse files
authored
refactor: rewrite useMatchMedia in typescript (#18890)
* refactor: port useMatchMedia to typescript * refactor: delete deprecated method calls and checks for methods
1 parent f836396 commit 5cd530e

File tree

2 files changed

+38
-46
lines changed

2 files changed

+38
-46
lines changed

packages/react/src/internal/useMatchMedia.js

Lines changed: 0 additions & 46 deletions
This file was deleted.
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/**
2+
* Copyright IBM Corp. 2016, 2025
3+
*
4+
* This source code is licensed under the Apache-2.0 license found in the
5+
* LICENSE file in the root directory of this source tree.
6+
*/
7+
8+
import { useState, useEffect } from 'react';
9+
import { canUseDOM } from './environment';
10+
11+
/** Listens to changes in a media query and returns whether it matches. */
12+
export const useMatchMedia = (mediaQuery: string) => {
13+
const [matches, setMatches] = useState(() => {
14+
if (canUseDOM) {
15+
const mediaQueryList = window.matchMedia(mediaQuery);
16+
return mediaQueryList.matches;
17+
}
18+
return false;
19+
});
20+
21+
useEffect(() => {
22+
const listener = (event: MediaQueryListEvent) => {
23+
setMatches(event.matches);
24+
};
25+
26+
const mediaQueryList = window.matchMedia(mediaQuery);
27+
28+
mediaQueryList.addEventListener('change', listener);
29+
30+
setMatches(mediaQueryList.matches);
31+
32+
return () => {
33+
mediaQueryList.removeEventListener('change', listener);
34+
};
35+
}, [mediaQuery]);
36+
37+
return matches;
38+
};

0 commit comments

Comments
 (0)