Skip to content

Commit 02fd793

Browse files
authored
fix(react-native): bring back check for window.addEventListener (#3345)
because it does not exist in RN, but window is defined
1 parent f426899 commit 02fd793

File tree

4 files changed

+32
-2
lines changed

4 files changed

+32
-2
lines changed

src/core/focusManager.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ export class FocusManager extends Subscribable {
1414
constructor() {
1515
super()
1616
this.setup = onFocus => {
17-
if (!isServer) {
17+
// addEventListener does not exist in React Native, but window does
18+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
19+
if (!isServer && window.addEventListener) {
1820
const listener = () => onFocus()
1921
// Listen to visibillitychange and focus
2022
window.addEventListener('visibilitychange', listener, false)

src/core/onlineManager.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ export class OnlineManager extends Subscribable {
1414
constructor() {
1515
super()
1616
this.setup = onOnline => {
17-
if (!isServer) {
17+
// addEventListener does not exist in React Native, but window does
18+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
19+
if (!isServer && window.addEventListener) {
1820
const listener = () => onOnline()
1921
// Listen to online
2022
window.addEventListener('online', listener, false)

src/core/tests/focusManager.test.tsx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,19 @@ describe('focusManager', () => {
7373
restoreIsServer()
7474
})
7575

76+
test('cleanup should still be undefined if window.addEventListener is not defined', async () => {
77+
const { addEventListener } = globalThis.window
78+
79+
// @ts-expect-error
80+
globalThis.window.addEventListener = undefined
81+
82+
const unsubscribe = focusManager.subscribe(() => undefined)
83+
expect(focusManager['cleanup']).toBeUndefined()
84+
85+
unsubscribe()
86+
globalThis.window.addEventListener = addEventListener
87+
})
88+
7689
it('should replace default window listener when a new event listener is set', async () => {
7790
const addEventListenerSpy = jest.spyOn(
7891
globalThis.window,

src/core/tests/onlineManager.test.tsx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,19 @@ describe('onlineManager', () => {
6767
restoreIsServer()
6868
})
6969

70+
test('cleanup should still be undefined if window.addEventListener is not defined', async () => {
71+
const { addEventListener } = globalThis.window
72+
73+
// @ts-expect-error
74+
globalThis.window.addEventListener = undefined
75+
76+
const unsubscribe = onlineManager.subscribe(() => undefined)
77+
expect(onlineManager['cleanup']).toBeUndefined()
78+
79+
unsubscribe()
80+
globalThis.window.addEventListener = addEventListener
81+
})
82+
7083
test('it should replace default window listener when a new event listener is set', async () => {
7184
const addEventListenerSpy = jest.spyOn(
7285
globalThis.window,

0 commit comments

Comments
 (0)