[fix] allow Dimensions.set to be called on the server

Fix #566
This commit is contained in:
Nicolas Gallagher
2017-07-31 16:09:36 -07:00
parent 1225b00cdb
commit cc077e9019
3 changed files with 24 additions and 6 deletions

View File

@@ -6,7 +6,7 @@ describe('apis/Dimensions', () => {
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);
});
});

View File

@@ -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);
}