@lifaon/rx-js-light
Version:
Blazing fast Observables
40 lines (39 loc) • 1.28 kB
JavaScript
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);
}
};
};
}