@@ -15,16 +15,33 @@ function isScreenReaderEnabled(): Promise<*> {
15
15
} ) ;
16
16
}
17
17
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 ;
21
22
22
23
function isReduceMotionEnabled ( ) : Promise < * > {
23
24
return new Promise ( ( resolve , reject ) => {
24
25
resolve ( prefersReducedMotionMedia ? prefersReducedMotionMedia . matches : true ) ;
25
26
} ) ;
26
27
}
27
28
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
+
28
45
const handlers = { } ;
29
46
30
47
const AccessibilityInfo = {
@@ -57,11 +74,10 @@ const AccessibilityInfo = {
57
74
if ( ! prefersReducedMotionMedia ) {
58
75
return ;
59
76
}
60
-
61
77
const listener = event => {
62
78
handler ( event . matches ) ;
63
79
} ;
64
- prefersReducedMotionMedia . addEventListener ( 'change' , listener ) ;
80
+ addChangeListener ( listener ) ;
65
81
handlers [ handler ] = listener ;
66
82
}
67
83
@@ -89,10 +105,8 @@ const AccessibilityInfo = {
89
105
if ( ! listener || ! prefersReducedMotionMedia ) {
90
106
return ;
91
107
}
92
-
93
- prefersReducedMotionMedia . removeEventListener ( 'change' , listener ) ;
108
+ removeChangeListener ( listener ) ;
94
109
}
95
-
96
110
return ;
97
111
}
98
112
} ;
0 commit comments