Skip to content

Commit 93e64d7

Browse files
fix: handle missing window.matchMedia in useTrackColorSchemeChoice (#448)
1 parent 5ebe607 commit 93e64d7

File tree

3 files changed

+15
-9
lines changed

3 files changed

+15
-9
lines changed

jest.config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ module.exports = createConfig('jest', {
44
setupFiles: [
55
'<rootDir>/src/setupTest.js',
66
],
7+
testTimeout: 20000,
78
});

src/react/hooks.js

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,18 @@ export const useTrackColorSchemeChoice = () => {
3333
useEffect(() => {
3434
const trackColorSchemeChoice = ({ matches }) => {
3535
const preferredColorScheme = matches ? 'dark' : 'light';
36-
3736
sendTrackEvent('openedx.ui.frontend-platform.prefers-color-scheme.selected', { preferredColorScheme });
3837
};
39-
40-
const colorSchemeQuery = window.matchMedia('(prefers-color-scheme: dark)');
41-
42-
// send user's initial choice
43-
trackColorSchemeChoice(colorSchemeQuery);
44-
45-
colorSchemeQuery.addEventListener('change', trackColorSchemeChoice);
46-
return () => colorSchemeQuery.removeEventListener('change', trackColorSchemeChoice);
38+
const colorSchemeQuery = window.matchMedia?.('(prefers-color-scheme: dark)');
39+
if (colorSchemeQuery) {
40+
// send user's initial choice
41+
trackColorSchemeChoice(colorSchemeQuery);
42+
colorSchemeQuery.addEventListener('change', trackColorSchemeChoice);
43+
}
44+
return () => {
45+
if (colorSchemeQuery) {
46+
colorSchemeQuery.removeEventListener('change', trackColorSchemeChoice);
47+
}
48+
};
4749
}, []);
4850
};

src/react/hooks.test.jsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,21 @@ import { sendTrackEvent } from '../analytics';
55
jest.mock('../analytics');
66

77
const mockAddEventListener = jest.fn();
8+
const mockRemoveEventListener = jest.fn();
89
let matchesMock;
910

1011
Object.defineProperty(window, 'matchMedia', {
1112
value: jest.fn(() => ({
1213
addEventListener: mockAddEventListener,
14+
removeEventListener: mockRemoveEventListener,
1315
matches: matchesMock,
1416
})),
1517
});
1618

1719
describe('useTrackColorSchemeChoice hook', () => {
1820
afterEach(() => {
1921
mockAddEventListener.mockClear();
22+
mockRemoveEventListener.mockClear();
2023
sendTrackEvent.mockClear();
2124
});
2225

0 commit comments

Comments
 (0)