Skip to content

Commit 1b2bb16

Browse files
javascripternecolas
authored andcommitted
[fix] Use MediaQuery event listener fallback
'addEventListener' is not supported by Safari <= 13, needs to fallback to 'addListener' Close #1823
1 parent 5f19b41 commit 1b2bb16

File tree

1 file changed

+22
-8
lines changed
  • packages/react-native-web/src/exports/AccessibilityInfo

1 file changed

+22
-8
lines changed

packages/react-native-web/src/exports/AccessibilityInfo/index.js

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,33 @@ function isScreenReaderEnabled(): Promise<*> {
1515
});
1616
}
1717

18-
const prefersReducedMotionMedia = canUseDOM
19-
? typeof window.matchMedia === 'function' && window.matchMedia('(prefers-reduced-motion: reduce)')
20-
: null;
18+
const prefersReducedMotionMedia =
19+
canUseDOM && typeof window.matchMedia === 'function'
20+
? window.matchMedia('(prefers-reduced-motion: reduce)')
21+
: null;
2122

2223
function isReduceMotionEnabled(): Promise<*> {
2324
return new Promise((resolve, reject) => {
2425
resolve(prefersReducedMotionMedia ? prefersReducedMotionMedia.matches : true);
2526
});
2627
}
2728

29+
function addChangeListener(fn) {
30+
if (prefersReducedMotionMedia != null) {
31+
prefersReducedMotionMedia.addEventListener != null
32+
? prefersReducedMotionMedia.addEventListener('change', fn)
33+
: prefersReducedMotionMedia.addListener(fn);
34+
}
35+
}
36+
37+
function removeChangeListener(fn) {
38+
if (prefersReducedMotionMedia != null) {
39+
prefersReducedMotionMedia.removeEventListener != null
40+
? prefersReducedMotionMedia.removeEventListener('change', fn)
41+
: prefersReducedMotionMedia.removeListener(fn);
42+
}
43+
}
44+
2845
const handlers = {};
2946

3047
const AccessibilityInfo = {
@@ -57,11 +74,10 @@ const AccessibilityInfo = {
5774
if (!prefersReducedMotionMedia) {
5875
return;
5976
}
60-
6177
const listener = event => {
6278
handler(event.matches);
6379
};
64-
prefersReducedMotionMedia.addEventListener('change', listener);
80+
addChangeListener(listener);
6581
handlers[handler] = listener;
6682
}
6783

@@ -89,10 +105,8 @@ const AccessibilityInfo = {
89105
if (!listener || !prefersReducedMotionMedia) {
90106
return;
91107
}
92-
93-
prefersReducedMotionMedia.removeEventListener('change', listener);
108+
removeChangeListener(listener);
94109
}
95-
96110
return;
97111
}
98112
};

0 commit comments

Comments
 (0)