@@ -46,11 +46,41 @@ const listeners = {};
4646
4747let shouldInit = canUseDOM ;
4848
49+ function update ( ) {
50+ if ( ! canUseDOM ) {
51+ return ;
52+ }
53+
54+ const win = window ;
55+ const docEl = win . document . documentElement ;
56+
57+ dimensions . window = {
58+ fontScale : 1 ,
59+ height : docEl . clientHeight ,
60+ scale : win . devicePixelRatio || 1 ,
61+ width : docEl . clientWidth
62+ } ;
63+
64+ dimensions . screen = {
65+ fontScale : 1 ,
66+ height : win . screen . height ,
67+ scale : win . devicePixelRatio || 1 ,
68+ width : win . screen . width
69+ } ;
70+ }
71+
72+ function handleResize ( ) {
73+ update ( ) ;
74+ if ( Array . isArray ( listeners [ 'change' ] ) ) {
75+ listeners [ 'change' ] . forEach ( ( handler ) => handler ( dimensions ) ) ;
76+ }
77+ }
78+
4979export default class Dimensions {
5080 static get ( dimension : DimensionKey ) : DisplayMetrics {
5181 if ( shouldInit ) {
5282 shouldInit = false ;
53- Dimensions . _update ( ) ;
83+ update ( ) ;
5484 }
5585 invariant ( dimensions [ dimension ] , `No dimension set for key ${ dimension } ` ) ;
5686 return dimensions [ dimension ] ;
@@ -71,33 +101,6 @@ export default class Dimensions {
71101 }
72102 }
73103
74- static _update ( ) {
75- if ( ! canUseDOM ) {
76- return ;
77- }
78-
79- const win = window ;
80- const docEl = win . document . documentElement ;
81-
82- dimensions . window = {
83- fontScale : 1 ,
84- height : docEl . clientHeight ,
85- scale : win . devicePixelRatio || 1 ,
86- width : docEl . clientWidth
87- } ;
88-
89- dimensions . screen = {
90- fontScale : 1 ,
91- height : win . screen . height ,
92- scale : win . devicePixelRatio || 1 ,
93- width : win . screen . width
94- } ;
95-
96- if ( Array . isArray ( listeners [ 'change' ] ) ) {
97- listeners [ 'change' ] . forEach ( ( handler ) => handler ( dimensions ) ) ;
98- }
99- }
100-
101104 static addEventListener (
102105 type : DimensionEventListenerType ,
103106 handler : ( DimensionsValue ) = > void
@@ -125,5 +128,5 @@ export default class Dimensions {
125128}
126129
127130if ( canUseDOM ) {
128- window . addEventListener ( 'resize' , Dimensions . _update , false ) ;
131+ window . addEventListener ( 'resize' , handleResize , false ) ;
129132}
0 commit comments