diff --git a/docs/storybook/2-apis/Dimensions/DimensionsScreen.js b/docs/storybook/2-apis/Dimensions/DimensionsScreen.js index 7faedf65..b1b92fed 100644 --- a/docs/storybook/2-apis/Dimensions/DimensionsScreen.js +++ b/docs/storybook/2-apis/Dimensions/DimensionsScreen.js @@ -34,6 +34,14 @@ const DimensionsScreen = () => }} /> + + { test('addEventListener', () => { const handler = jest.fn(); Dimensions.addEventListener('change', handler); - Dimensions.set(); + Dimensions._update(); expect(handler).toHaveBeenCalledTimes(1); expect(handler).toHaveBeenLastCalledWith({ window: Dimensions.get('window'), @@ -17,7 +17,7 @@ describe('apis/Dimensions', () => { test('removeEventListener', () => { const handler = jest.fn(); Dimensions.removeEventListener('change', handler); - Dimensions.set(); + Dimensions._update(); expect(handler).toHaveBeenCalledTimes(0); }); }); diff --git a/src/apis/Dimensions/index.js b/src/apis/Dimensions/index.js index 07264e2d..5b7489ce 100644 --- a/src/apis/Dimensions/index.js +++ b/src/apis/Dimensions/index.js @@ -35,7 +35,18 @@ export default class Dimensions { return dimensions[dimension]; } - static set(): void { + static set(initialDimensions: ?{ [key: string]: any }): void { + if (initialDimensions) { + if (canUseDOM) { + invariant(false, 'Dimensions cannot be set in the browser'); + } else { + dimensions.screen = initialDimensions.screen; + dimensions.window = initialDimensions.window; + } + } + } + + static _update() { dimensions.window = { fontScale: 1, height: win.innerHeight, @@ -67,8 +78,7 @@ export default class Dimensions { } } -Dimensions.set(); - if (canUseDOM) { - window.addEventListener('resize', debounce(Dimensions.set, 16), false); + Dimensions._update(); + window.addEventListener('resize', debounce(Dimensions._update, 16), false); }