UNPKG

1 kBJavaScriptView Raw
1import ResizeObserver from 'resize-observer-polyfill';
2
3const isServer = typeof window === 'undefined';
4
5/* istanbul ignore next */
6const resizeHandler = function(entries) {
7 for (let entry of entries) {
8 const listeners = entry.target.__resizeListeners__ || [];
9 if (listeners.length) {
10 listeners.forEach(fn => {
11 fn();
12 });
13 }
14 }
15};
16
17/* istanbul ignore next */
18export const addResizeListener = function(element, fn) {
19 if (isServer) return;
20 if (!element.__resizeListeners__) {
21 element.__resizeListeners__ = [];
22 element.__ro__ = new ResizeObserver(resizeHandler);
23 element.__ro__.observe(element);
24 }
25 element.__resizeListeners__.push(fn);
26};
27
28/* istanbul ignore next */
29export const removeResizeListener = function(element, fn) {
30 if (!element || !element.__resizeListeners__) return;
31 element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);
32 if (!element.__resizeListeners__.length) {
33 element.__ro__.disconnect();
34 }
35};