[add] Dimensions event listeners

Close #511
This commit is contained in:
Vu Le
2017-07-08 20:04:39 -07:00
committed by Nicolas Gallagher
parent 1190ca20a7
commit 0bf6e893c6
5 changed files with 128 additions and 3 deletions
+19 -1
View File
@@ -1,5 +1,23 @@
/* eslint-env jasmine, jest */
import Dimensions from '..';
describe('apis/Dimensions', () => {
test.skip('NO TEST COVERAGE', () => {});
test('addEventListener', () => {
const handler = jest.fn();
Dimensions.addEventListener('change', handler);
Dimensions.set();
expect(handler).toHaveBeenCalledTimes(1);
expect(handler).toHaveBeenLastCalledWith({
window: Dimensions.get('window'),
screen: Dimensions.get('screen')
});
});
test('removeEventListener', () => {
const handler = jest.fn();
Dimensions.removeEventListener('change', handler);
Dimensions.set();
expect(handler).toHaveBeenCalledTimes(0);
});
});
+16
View File
@@ -27,6 +27,7 @@ const win = canUseDOM
};
const dimensions = {};
const listeners = {};
export default class Dimensions {
static get(dimension: string): Object {
@@ -48,6 +49,21 @@ export default class Dimensions {
scale: win.devicePixelRatio || 1,
width: win.screen.width
};
if (Array.isArray(listeners['change'])) {
listeners['change'].forEach(handler => handler(dimensions));
}
}
static addEventListener(type, handler): void {
listeners[type] = listeners[type] || [];
listeners[type].push(handler);
}
static removeEventListener(type, handler): void {
if (Array.isArray(listeners[type])) {
listeners[type] = listeners[type].filter(_handler => _handler !== handler);
}
}
}