Skip to content

Commit 7078fb9

Browse files
committed
include onResize in return interface, debounce timeout fix
1 parent b5edd2d commit 7078fb9

File tree

2 files changed

+20
-15
lines changed

2 files changed

+20
-15
lines changed

src/index.d.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,7 @@ declare module 'use-viewport-sizes' {
1313
*/
1414
export default function(
1515
input:number | VPSizesHasher | VPSizesOptions
16-
):[vpW: number, vpH: number] | number;
16+
):([vpW: number, vpH: number, triggerResize: Function] |
17+
[dimension: number, triggerResize:Function]
18+
);
1719
}

src/index.js

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,13 @@ const resolverMap = new Map();
4444
let vpWidth = getVpWidth();
4545
let vpHeight = getVpHeight();
4646

47-
// should only be called by *one* component once;
48-
// will iterate through all subscribers
49-
// afterwards
50-
47+
/**
48+
* called to update resize dimensions;
49+
* only called once throughout hooks so if
50+
* using SSR, may be expensive to trigger in all
51+
* components with effect on paint as described in
52+
* readme
53+
*/
5154
function onResize() {
5255
vpWidth = getVpWidth();
5356
vpHeight = getVpHeight();
@@ -97,12 +100,12 @@ function useViewportSizes(input) {
97100
input?.hasher
98101
) || undefined;
99102

100-
const debounceTimeout = input?.debounceTimeout || undefined;
101-
102-
const throttleTimeout = ((typeof input == 'number') ?
103+
const debounceTimeout = ((typeof input == 'number') ?
103104
input :
104-
input?.throttleTimeout
105-
) || undefined;
105+
input?.debounceTimeout
106+
) || 0;
107+
108+
const throttleTimeout = input?.throttleTimeout || 0;
106109

107110
const dimension = input?.dimension || 'both';
108111

@@ -117,7 +120,7 @@ function useViewportSizes(input) {
117120
hasher && hasher({ vpW: vpWidth, vpH: vpHeight })
118121
));
119122
const debounceTimeoutRef = useRef(undefined);
120-
const listener = useCallback((!hasher ?
123+
const listener = useCallback((!debounceTimeout ?
121124
state => setState(state) :
122125
state => {
123126
if(debounceTimeoutRef.current) {
@@ -126,7 +129,7 @@ function useViewportSizes(input) {
126129

127130
debounceTimeoutRef.current = setTimeout(() => {
128131
setState(state);
129-
}, debounceTimeoutRef);
132+
}, debounceTimeout);
130133
}
131134
), [debounceTimeoutRef, hasher, dimension]);
132135

@@ -176,9 +179,9 @@ function useViewportSizes(input) {
176179
const returnValue = useMemo(() => {
177180
switch (dimension) {
178181
default:
179-
case 'both': { return [state?.vpW || 0, state?.vpH || 0] }
180-
case 'w': { return state?.vpW || 0 }
181-
case 'h': { return state?.vpH || 0 }
182+
case 'both': { return [state?.vpW || 0, state?.vpH || 0, onResize] }
183+
case 'w': { return [state?.vpW || 0, onResize] }
184+
case 'h': { return [state?.vpH || 0, onResize] }
182185
}
183186
}, [dimensionHash, onResize, dimension]);
184187

0 commit comments

Comments
 (0)