import * as d3 from 'd3' import { Observable, merge, distinctUntilChanged, fromEvent } from 'rxjs' export function d3EventObservable(selection: d3.Selection, event: any) { // Start with an observable that will never emit let obs: Observable = new Observable(() => {}); selection.each(function () { // Create observables from each of the elements const events: Observable = fromEvent(this, event); // Merge the observables into one obs = merge(obs, events); }); return obs; }