UNPKG

apollo-client-rxjs

Version:
53 lines 2.09 kB
import { Observable } from 'rxjs/Observable'; import { switchMap } from 'rxjs/operator/switchMap'; import { combineLatest } from 'rxjs/observable/combineLatest'; import { omit } from './helpers'; import { ObservableQueryRef } from './ObservableQueryRef'; import { RxObservableQuery } from '../RxObservableQuery'; export function createWithObservableVariables(options, mapFn) { var observableQueryRef = new ObservableQueryRef(); var varObs = observeVariables(options.variables); return new RxObservableQuery(observableQueryRef, function (subscriber) { var sub = switchMap.call(varObs, (function (newVariables) { var cleanOptions = omit(options, 'variables'); var newOptions = Object.assign(cleanOptions, { variables: newVariables }); observableQueryRef.setRef(mapFn(newOptions)); return observableQueryRef.getRef(); })).subscribe(subscriber); return function () { return sub.unsubscribe(); }; }); } export function observeVariables(variables) { var keys = Object.keys(variables); return Observable.create(function (observer) { combineLatest.call(undefined, mapVariablesToObservables(variables)) .subscribe(function (values) { var resultVariables = {}; values.forEach(function (value, i) { var key = keys[i]; resultVariables[key] = value; }); observer.next(resultVariables); }); }); } function mapVariablesToObservables(variables) { return Object.keys(variables) .map(function (key) { return getVariableToObservable(variables[key]); }); } function getVariableToObservable(variable) { if (variable instanceof Observable) { return variable; } else if (typeof variable !== 'undefined') { return new Observable(function (subscriber) { subscriber.next(variable); }); } else { return new Observable(function (subscriber) { subscriber.next(null); }); } } //# sourceMappingURL=variables.js.map