Skip to content

Commit a8a231a

Browse files
committed
comments
1 parent b7c60c7 commit a8a231a

File tree

3 files changed

+50
-8
lines changed

3 files changed

+50
-8
lines changed

packages/react-hooks/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,4 @@ export * from './useWindowedListData';
3838
export * from './useResizeObserver';
3939
export * from './useMergeRef';
4040
export * from './useUndoRedo';
41+
export * from './useWindowListener';

packages/react-hooks/src/useWindowListener.test.ts

Lines changed: 45 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,37 @@ describe('useWindowListener', () => {
5858
);
5959
});
6060

61+
it('should pass options to removeEventListener on unmount', () => {
62+
const options = { passive: true, capture: false };
63+
const { unmount } = renderHook(() =>
64+
useWindowListener('scroll', mockCallback, options)
65+
);
66+
67+
jest.clearAllMocks();
68+
unmount();
69+
70+
expect(window.removeEventListener).toHaveBeenCalledWith(
71+
'scroll',
72+
mockCallback,
73+
options
74+
);
75+
});
76+
77+
it('should pass boolean options to removeEventListener on unmount', () => {
78+
const { unmount } = renderHook(() =>
79+
useWindowListener('click', mockCallback, true)
80+
);
81+
82+
jest.clearAllMocks();
83+
unmount();
84+
85+
expect(window.removeEventListener).toHaveBeenCalledWith(
86+
'click',
87+
mockCallback,
88+
true
89+
);
90+
});
91+
6192
it('should remove event listener on unmount for single event', () => {
6293
const { unmount } = renderHook(() =>
6394
useWindowListener('resize', mockCallback)
@@ -68,7 +99,8 @@ describe('useWindowListener', () => {
6899

69100
expect(window.removeEventListener).toHaveBeenCalledWith(
70101
'resize',
71-
mockCallback
102+
mockCallback,
103+
undefined
72104
);
73105
});
74106

@@ -84,7 +116,8 @@ describe('useWindowListener', () => {
84116
events.forEach(event => {
85117
expect(window.removeEventListener).toHaveBeenCalledWith(
86118
event,
87-
mockCallback
119+
mockCallback,
120+
undefined
88121
);
89122
});
90123
});
@@ -100,7 +133,8 @@ describe('useWindowListener', () => {
100133

101134
expect(window.removeEventListener).toHaveBeenCalledWith(
102135
'resize',
103-
mockCallback
136+
mockCallback,
137+
undefined
104138
);
105139
expect(window.addEventListener).toHaveBeenCalledWith(
106140
'scroll',
@@ -120,7 +154,8 @@ describe('useWindowListener', () => {
120154

121155
expect(window.removeEventListener).toHaveBeenCalledWith(
122156
'resize',
123-
mockCallback
157+
mockCallback,
158+
undefined
124159
);
125160
expect(window.addEventListener).toHaveBeenCalledWith(
126161
'scroll',
@@ -146,7 +181,8 @@ describe('useWindowListener', () => {
146181

147182
expect(window.removeEventListener).toHaveBeenCalledWith(
148183
'resize',
149-
mockCallback
184+
mockCallback,
185+
undefined
150186
);
151187
expect(window.addEventListener).toHaveBeenCalledWith(
152188
'resize',
@@ -166,7 +202,8 @@ describe('useWindowListener', () => {
166202

167203
expect(window.removeEventListener).toHaveBeenCalledWith(
168204
'scroll',
169-
mockCallback
205+
mockCallback,
206+
{ passive: true }
170207
);
171208
expect(window.addEventListener).toHaveBeenCalledWith(
172209
'scroll',
@@ -210,7 +247,8 @@ describe('useWindowListener', () => {
210247
// Should re-register because events array reference changed
211248
expect(window.removeEventListener).toHaveBeenCalledWith(
212249
'resize',
213-
mockCallback
250+
mockCallback,
251+
undefined
214252
);
215253
expect(window.addEventListener).toHaveBeenCalledWith(
216254
'resize',

packages/react-hooks/src/useWindowListener.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,12 @@ export function useWindowListener(
1717
() => (typeof events === 'string' ? [events] : events),
1818
[events]
1919
);
20+
2021
useEffect(() => {
2122
eventsArray.forEach(e => window.addEventListener(e, callback, options));
2223
return () =>
23-
eventsArray.forEach(e => window.removeEventListener(e, callback));
24+
eventsArray.forEach(e =>
25+
window.removeEventListener(e, callback, options)
26+
);
2427
}, [eventsArray, callback, options]);
2528
}

0 commit comments

Comments
 (0)