File tree 2 files changed +28
-1
lines changed
2 files changed +28
-1
lines changed Original file line number Diff line number Diff line change @@ -69,4 +69,21 @@ describe('isMotionDisabled', () => {
69
69
const element = renderResult . container . querySelector ( '#test-element' ) as HTMLElement ;
70
70
expect ( isMotionDisabled ( element ) ) . toEqual ( true ) ;
71
71
} ) ;
72
+
73
+ test ( 'should default to false when an error is thrown and a warning is logged' , ( ) => {
74
+ matchMedia . mockReturnValue ( null ) ;
75
+
76
+ const warnSpy = jest . spyOn ( console , 'warn' ) ;
77
+
78
+ const renderResult = render (
79
+ < div >
80
+ < div id = "test-element" > Content</ div >
81
+ </ div >
82
+ ) ;
83
+ const element = renderResult . container . querySelector ( '#test-element' ) as HTMLElement ;
84
+
85
+ expect ( isMotionDisabled ( element ) ) . toEqual ( false ) ;
86
+
87
+ expect ( warnSpy ) . toHaveBeenCalled ( ) ;
88
+ } ) ;
72
89
} ) ;
Original file line number Diff line number Diff line change @@ -9,10 +9,20 @@ import { isDevelopment } from '../is-development';
9
9
import { warnOnce } from '../logging' ;
10
10
import { awsuiVisualRefreshFlag , getGlobal } from '../global-flags' ;
11
11
12
+ function safeMatchMedia ( element : HTMLElement , query : string ) {
13
+ try {
14
+ const targetWindow = element . ownerDocument ?. defaultView ?? window ;
15
+ return targetWindow . matchMedia ?.( query ) . matches ?? false ;
16
+ } catch ( error ) {
17
+ console . warn ( error ) ;
18
+ return false ;
19
+ }
20
+ }
21
+
12
22
export function isMotionDisabled ( element : HTMLElement ) : boolean {
13
23
return (
14
24
! ! findUpUntil ( element , node => node . classList . contains ( 'awsui-motion-disabled' ) ) ||
15
- ( window . matchMedia ?. ( '(prefers-reduced-motion: reduce)' ) . matches ?? false )
25
+ safeMatchMedia ( element , '(prefers-reduced-motion: reduce)' )
16
26
) ;
17
27
}
18
28
You can’t perform that action at this time.
0 commit comments