()
| 6 | const observedElements = new Map<HTMLElement, Array<ResizeObserverCallback>>(); |
| 7 | |
| 8 | const getResizeObserver = () => { |
| 9 | if (!resizeObserver) { |
| 10 | resizeObserver = new window.ResizeObserver(entries => { |
| 11 | window.requestAnimationFrame(() => { |
| 12 | entries.forEach(entry => { |
| 13 | const callbacks = observedElements.get(entry.target as HTMLElement); |
| 14 | // Callbacks could be async and we need to handle returned promises to comply with the eslint "no-misused-promises" rule. |
| 15 | // Although Promise.all awaits all, we don't await the additional task after calling the callbacks and should not make any difference. |
| 16 | callbacks && Promise.all(callbacks.map((callback: ResizeObserverCallback) => callback())); |
| 17 | }); |
| 18 | }); |
| 19 | }); |
| 20 | } |
| 21 | return resizeObserver; |
| 22 | }; |
| 23 | |
| 24 | const observe = (element: HTMLElement, callback: ResizeObserverCallback) => { |
| 25 | const callbacks = observedElements.get(element) || []; |
no test coverage detected
searching dependent graphs…