@@ -7,18 +7,18 @@ import {
7
7
} from 'react' ;
8
8
9
9
function getVpWidth ( ) {
10
- return ( typeof window != 'undefined' ) ? Math . max (
11
- window . document . documentElement . clientWidth ,
12
- window . innerWidth || 0
13
- ) : 0 ;
10
+ return Math . max (
11
+ globalThis ? .document ? .documentElement ? .clientWidth || 0 ,
12
+ globalThis ? .innerWidth || 0
13
+ ) ;
14
14
}
15
15
16
16
17
17
function getVpHeight ( ) {
18
- return ( typeof window != 'undefined' ) ? Math . max (
19
- window . document . documentElement . clientHeight ,
20
- window . innerHeight || 0
21
- ) : 0 ;
18
+ return Math . max (
19
+ globalThis ? .document ? .documentElement ? .clientHeight || 0 ,
20
+ globalThis ? .innerHeight || 0
21
+ ) ;
22
22
}
23
23
24
24
// Avoid useLayoutEffect warning during SSR
@@ -68,14 +68,11 @@ let vpHeight = getVpHeight();
68
68
*/
69
69
function triggerResizeListener ( listener , vpWidth , vpHeight ) {
70
70
const params = { vpW : vpWidth , vpH : vpHeight } ;
71
-
72
- let shouldRun = false ;
73
71
let hash ;
74
72
75
73
const { options, prevHash= undefined } = resolverMap ?. get ( listener ) || { } ;
76
- const { hasher } = options ;
77
74
78
- if ( ! hasher ) {
75
+ if ( ! options . hasher ) {
79
76
switch ( options ?. dimension ) {
80
77
case 'w' :
81
78
hash = vpWidth ;
@@ -89,18 +86,17 @@ function triggerResizeListener(listener, vpWidth, vpHeight) {
89
86
}
90
87
}
91
88
else {
92
- hash = hasher ( params ) ;
89
+ hash = options . hasher ( params ) ;
93
90
}
94
91
95
- if ( hash != prevHash ) { shouldRun = true }
96
-
97
- if ( shouldRun ) {
92
+ if ( hash != prevHash ) {
98
93
const state = { ...params , options, hash } ;
99
94
resolverMap . set ( listener , {
100
95
options,
101
96
prevHash : hash ,
102
97
prevState : state
103
98
} ) ;
99
+
104
100
listener ( state ) ;
105
101
}
106
102
}
@@ -125,13 +121,6 @@ function onResize() {
125
121
// the Hook //
126
122
// =============== //
127
123
128
- function getInitialState ( options , vpW , vpH ) {
129
- return ( ! options . hasher ?
130
- { vpW, vpH } :
131
- options . hasher ( { vpW : vpWidth , vpH : vpHeight } )
132
- )
133
- }
134
-
135
124
export default function useViewportSizes ( input ) {
136
125
const hasher = ( ( typeof input == 'function' ) ?
137
126
input :
@@ -155,7 +144,10 @@ export default function useViewportSizes(input) {
155
144
hasher
156
145
} ;
157
146
158
- const [ state , setState ] = useState ( ( ) => getInitialState ( options ) ) ;
147
+ const [ state , setState ] = useState ( ( ) => {
148
+ const defaultState = { vpW : vpWidth , vpH : vpHeight } ;
149
+ return options . hasher ? options . hasher ( defaultState ) : defaultState ;
150
+ } ) ;
159
151
const debounceTimeoutRef = useRef ( undefined ) ;
160
152
const throttleTimeoutRef = useRef ( undefined ) ;
161
153
const lastThrottledRef = useRef ( undefined ) ;
@@ -246,25 +238,24 @@ export default function useViewportSizes(input) {
246
238
switch ( dimension ) {
247
239
default :
248
240
case 'both' : {
249
- dimensionHash = `${ state ? .vpW } _${ state . vpH } ` ;
241
+ dimensionHash = `${ state . vpW } _${ state . vpH } ` ;
250
242
break ;
251
243
}
252
244
case 'w' : {
253
- dimensionHash = state ? .vpW || 0 ;
245
+ dimensionHash = state . vpW || 0 ;
254
246
break ;
255
247
}
256
248
case 'h' : {
257
- dimensionHash = state ? .vpH || 0 ;
249
+ dimensionHash = state . vpH || 0 ;
258
250
break ;
259
251
}
260
252
}
261
253
262
254
const returnValue = useMemo ( ( ) => {
263
255
switch ( dimension ) {
264
- default :
265
- case 'both' : { return [ state ?. vpW || 0 , state ?. vpH || 0 , onResize ] }
266
- case 'w' : { return [ state ?. vpW || 0 , onResize ] }
267
- case 'h' : { return [ state ?. vpH || 0 , onResize ] }
256
+ default : { return [ state . vpW || 0 , state . vpH || 0 , onResize ] }
257
+ case 'w' : { return [ state . vpW || 0 , onResize ] }
258
+ case 'h' : { return [ state . vpH || 0 , onResize ] }
268
259
}
269
260
} , [ dimensionHash , onResize , dimension ] ) ;
270
261
0 commit comments