UNPKG

@lifaon/rx-js-light

Version:

Blazing fast Observables

40 lines (39 loc) 1.28 kB
import {createMulticastSource} from "../../../../../../observer-observable-pair/build-in/source/built-in/multicast-source/create-multicast-source.mjs"; import {freeze} from "../../../../../../misc/helpers/freeze.mjs"; let RESIZE_OBSERVER_AND_SUBSCRIPTION_CACHED; function getResizeObserverAndSubscription() { if (RESIZE_OBSERVER_AND_SUBSCRIPTION_CACHED === void 0) { const source = createMulticastSource(); const observer = new ResizeObserver(entries => { source.emit(entries); }); RESIZE_OBSERVER_AND_SUBSCRIPTION_CACHED = freeze({ subscribe: source.subscribe, observer }); } return RESIZE_OBSERVER_AND_SUBSCRIPTION_CACHED; } export function fromResizeObserver(element, options) { return emit => { let running = true; const {subscribe, observer} = getResizeObserverAndSubscription(); const unsubscribe = subscribe(entries => { for (let i = 0, l = entries.length; i < l; i++) { const entry = entries[i]; if (running && entry.target === element) { emit(entry); break; } } }); observer.observe(element, options); return () => { if (running) { running = false; unsubscribe(); observer.unobserve(element); } }; }; }