UNPKG

apollo-angular

Version:

Use your GraphQL data in your Angular app, with the Apollo Client

88 lines 11.6 kB
import { from, Observable } from 'rxjs'; import { NetworkStatus } from '@apollo/client/core'; import { fixObservable, wrapWithZone } from './utils'; function useInitialLoading(obsQuery) { return function useInitialLoadingOperator(source) { return new Observable(function useInitialLoadingSubscription(subscriber) { const currentResult = obsQuery.getCurrentResult(); const { loading, errors, error, partial, data } = currentResult; const { partialRefetch, fetchPolicy } = obsQuery.options; const hasError = errors || error; if (partialRefetch && partial && (!data || Object.keys(data).length === 0) && fetchPolicy !== 'cache-only' && !loading && !hasError) { subscriber.next({ ...currentResult, loading: true, networkStatus: NetworkStatus.loading, }); } return source.subscribe(subscriber); }); }; } export class QueryRef { obsQuery; valueChanges; queryId; constructor(obsQuery, ngZone, options) { this.obsQuery = obsQuery; const wrapped = wrapWithZone(from(fixObservable(this.obsQuery)), ngZone); this.valueChanges = options.useInitialLoading ? wrapped.pipe(useInitialLoading(this.obsQuery)) : wrapped; this.queryId = this.obsQuery.queryId; } // ObservableQuery's methods get options() { return this.obsQuery.options; } get variables() { return this.obsQuery.variables; } result() { return this.obsQuery.result(); } getCurrentResult() { return this.obsQuery.getCurrentResult(); } getLastResult() { return this.obsQuery.getLastResult(); } getLastError() { return this.obsQuery.getLastError(); } resetLastResults() { return this.obsQuery.resetLastResults(); } refetch(variables) { return this.obsQuery.refetch(variables); } fetchMore(fetchMoreOptions) { return this.obsQuery.fetchMore(fetchMoreOptions); } subscribeToMore(options) { // XXX: there's a bug in apollo-client typings // it should not inherit types from ObservableQuery return this.obsQuery.subscribeToMore(options); } updateQuery(mapFn) { return this.obsQuery.updateQuery(mapFn); } stopPolling() { return this.obsQuery.stopPolling(); } startPolling(pollInterval) { return this.obsQuery.startPolling(pollInterval); } setOptions(opts) { return this.obsQuery.setOptions(opts); } setVariables(variables) { return this.obsQuery.setVariables(variables); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcmVmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3F1ZXJ5LXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVl4QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFdEQsU0FBUyxpQkFBaUIsQ0FBa0MsUUFBK0I7SUFDekYsT0FBTyxTQUFTLHlCQUF5QixDQUFJLE1BQXFCO1FBQ2hFLE9BQU8sSUFBSSxVQUFVLENBQUMsU0FBUyw2QkFBNkIsQ0FBQyxVQUFVO1lBQ3JFLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2xELE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsYUFBYSxDQUFDO1lBQ2hFLE1BQU0sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUV6RCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksS0FBSyxDQUFDO1lBRWpDLElBQ0UsY0FBYztnQkFDZCxPQUFPO2dCQUNQLENBQUMsQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO2dCQUN6QyxXQUFXLEtBQUssWUFBWTtnQkFDNUIsQ0FBQyxPQUFPO2dCQUNSLENBQUMsUUFBUSxFQUNUO2dCQUNBLFVBQVUsQ0FBQyxJQUFJLENBQUM7b0JBQ2QsR0FBRyxhQUFhO29CQUNoQixPQUFPLEVBQUUsSUFBSTtvQkFDYixhQUFhLEVBQUUsYUFBYSxDQUFDLE9BQU87aUJBQzlCLENBQUMsQ0FBQzthQUNYO1lBRUQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQVNELE1BQU0sT0FBTyxRQUFRO0lBS1Q7SUFKSCxZQUFZLENBQW1DO0lBQy9DLE9BQU8sQ0FBbUM7SUFFakQsWUFDVSxRQUErQixFQUN2QyxNQUFjLEVBQ2QsT0FBZ0M7UUFGeEIsYUFBUSxHQUFSLFFBQVEsQ0FBdUI7UUFJdkMsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFekUsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsaUJBQWlCO1lBQzNDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoRCxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ1osSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUN2QyxDQUFDO0lBRUQsNEJBQTRCO0lBRTVCLElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztJQUNqQyxDQUFDO0lBRU0sTUFBTTtRQUNYLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFTSxhQUFhO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRU0sWUFBWTtRQUNqQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVNLGdCQUFnQjtRQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRU0sT0FBTyxDQUFDLFNBQWE7UUFDMUIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU0sU0FBUyxDQUNkLGdCQUE2QztRQUU3QyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVNLGVBQWUsQ0FDcEIsT0FBMEM7UUFFMUMsOENBQThDO1FBQzlDLG1EQUFtRDtRQUNuRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLE9BQWMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFDTSxXQUFXLENBQUMsS0FBb0U7UUFDckYsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU0sV0FBVztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVNLFlBQVksQ0FBQyxZQUFvQjtRQUN0QyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTSxVQUFVLENBQUMsSUFBUztRQUN6QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTSxZQUFZLENBQUMsU0FBWTtRQUM5QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZyb20sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUge1xuICBBcG9sbG9FcnJvcixcbiAgQXBvbGxvUXVlcnlSZXN1bHQsXG4gIEZldGNoTW9yZVF1ZXJ5T3B0aW9ucyxcbiAgT2JzZXJ2YWJsZVF1ZXJ5LFxuICBPcGVyYXRpb25WYXJpYWJsZXMsXG4gIFN1YnNjcmliZVRvTW9yZU9wdGlvbnMsXG4gIFR5cGVkRG9jdW1lbnROb2RlLFxuICBVcGRhdGVRdWVyeU9wdGlvbnMsXG59IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xuaW1wb3J0IHsgTmV0d29ya1N0YXR1cyB9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xuaW1wb3J0IHsgRW1wdHlPYmplY3QsIFdhdGNoUXVlcnlPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBmaXhPYnNlcnZhYmxlLCB3cmFwV2l0aFpvbmUgfSBmcm9tICcuL3V0aWxzJztcblxuZnVuY3Rpb24gdXNlSW5pdGlhbExvYWRpbmc8VCwgViBleHRlbmRzIE9wZXJhdGlvblZhcmlhYmxlcz4ob2JzUXVlcnk6IE9ic2VydmFibGVRdWVyeTxULCBWPikge1xuICByZXR1cm4gZnVuY3Rpb24gdXNlSW5pdGlhbExvYWRpbmdPcGVyYXRvcjxUPihzb3VyY2U6IE9ic2VydmFibGU8VD4pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gdXNlSW5pdGlhbExvYWRpbmdTdWJzY3JpcHRpb24oc3Vic2NyaWJlcikge1xuICAgICAgY29uc3QgY3VycmVudFJlc3VsdCA9IG9ic1F1ZXJ5LmdldEN1cnJlbnRSZXN1bHQoKTtcbiAgICAgIGNvbnN0IHsgbG9hZGluZywgZXJyb3JzLCBlcnJvciwgcGFydGlhbCwgZGF0YSB9ID0gY3VycmVudFJlc3VsdDtcbiAgICAgIGNvbnN0IHsgcGFydGlhbFJlZmV0Y2gsIGZldGNoUG9saWN5IH0gPSBvYnNRdWVyeS5vcHRpb25zO1xuXG4gICAgICBjb25zdCBoYXNFcnJvciA9IGVycm9ycyB8fCBlcnJvcjtcblxuICAgICAgaWYgKFxuICAgICAgICBwYXJ0aWFsUmVmZXRjaCAmJlxuICAgICAgICBwYXJ0aWFsICYmXG4gICAgICAgICghZGF0YSB8fCBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPT09IDApICYmXG4gICAgICAgIGZldGNoUG9saWN5ICE9PSAnY2FjaGUtb25seScgJiZcbiAgICAgICAgIWxvYWRpbmcgJiZcbiAgICAgICAgIWhhc0Vycm9yXG4gICAgICApIHtcbiAgICAgICAgc3Vic2NyaWJlci5uZXh0KHtcbiAgICAgICAgICAuLi5jdXJyZW50UmVzdWx0LFxuICAgICAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICAgICAgbmV0d29ya1N0YXR1czogTmV0d29ya1N0YXR1cy5sb2FkaW5nLFxuICAgICAgICB9IGFzIGFueSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH0pO1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBRdWVyeVJlZkZyb21Eb2N1bWVudDxUIGV4dGVuZHMgVHlwZWREb2N1bWVudE5vZGU+ID0gVCBleHRlbmRzIFR5cGVkRG9jdW1lbnROb2RlPFxuICBpbmZlciBSLFxuICBpbmZlciBWXG4+XG4gID8gUXVlcnlSZWY8UiwgViAmIE9wZXJhdGlvblZhcmlhYmxlcz5cbiAgOiBuZXZlcjtcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5UmVmPFQsIFYgZXh0ZW5kcyBPcGVyYXRpb25WYXJpYWJsZXMgPSBFbXB0eU9iamVjdD4ge1xuICBwdWJsaWMgdmFsdWVDaGFuZ2VzOiBPYnNlcnZhYmxlPEFwb2xsb1F1ZXJ5UmVzdWx0PFQ+PjtcbiAgcHVibGljIHF1ZXJ5SWQ6IE9ic2VydmFibGVRdWVyeTxULCBWPlsncXVlcnlJZCddO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgb2JzUXVlcnk6IE9ic2VydmFibGVRdWVyeTxULCBWPixcbiAgICBuZ1pvbmU6IE5nWm9uZSxcbiAgICBvcHRpb25zOiBXYXRjaFF1ZXJ5T3B0aW9uczxWLCBUPixcbiAgKSB7XG4gICAgY29uc3Qgd3JhcHBlZCA9IHdyYXBXaXRoWm9uZShmcm9tKGZpeE9ic2VydmFibGUodGhpcy5vYnNRdWVyeSkpLCBuZ1pvbmUpO1xuXG4gICAgdGhpcy52YWx1ZUNoYW5nZXMgPSBvcHRpb25zLnVzZUluaXRpYWxMb2FkaW5nXG4gICAgICA/IHdyYXBwZWQucGlwZSh1c2VJbml0aWFsTG9hZGluZyh0aGlzLm9ic1F1ZXJ5KSlcbiAgICAgIDogd3JhcHBlZDtcbiAgICB0aGlzLnF1ZXJ5SWQgPSB0aGlzLm9ic1F1ZXJ5LnF1ZXJ5SWQ7XG4gIH1cblxuICAvLyBPYnNlcnZhYmxlUXVlcnkncyBtZXRob2RzXG5cbiAgcHVibGljIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLm9ic1F1ZXJ5Lm9wdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZhcmlhYmxlcygpIHtcbiAgICByZXR1cm4gdGhpcy5vYnNRdWVyeS52YXJpYWJsZXM7XG4gIH1cblxuICBwdWJsaWMgcmVzdWx0KCk6IFByb21pc2U8QXBvbGxvUXVlcnlSZXN1bHQ8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5vYnNRdWVyeS5yZXN1bHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDdXJyZW50UmVzdWx0KCk6IEFwb2xsb1F1ZXJ5UmVzdWx0PFQ+IHtcbiAgICByZXR1cm4gdGhpcy5vYnNRdWVyeS5nZXRDdXJyZW50UmVzdWx0KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TGFzdFJlc3VsdCgpOiBBcG9sbG9RdWVyeVJlc3VsdDxUPiB7XG4gICAgcmV0dXJuIHRoaXMub2JzUXVlcnkuZ2V0TGFzdFJlc3VsdCgpO1xuICB9XG5cbiAgcHVibGljIGdldExhc3RFcnJvcigpOiBBcG9sbG9FcnJvciB7XG4gICAgcmV0dXJuIHRoaXMub2JzUXVlcnkuZ2V0TGFzdEVycm9yKCk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRMYXN0UmVzdWx0cygpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5vYnNRdWVyeS5yZXNldExhc3RSZXN1bHRzKCk7XG4gIH1cblxuICBwdWJsaWMgcmVmZXRjaCh2YXJpYWJsZXM/OiBWKTogUHJvbWlzZTxBcG9sbG9RdWVyeVJlc3VsdDxUPj4ge1xuICAgIHJldHVybiB0aGlzLm9ic1F1ZXJ5LnJlZmV0Y2godmFyaWFibGVzKTtcbiAgfVxuXG4gIHB1YmxpYyBmZXRjaE1vcmU8SyA9IFY+KFxuICAgIGZldGNoTW9yZU9wdGlvbnM6IEZldGNoTW9yZVF1ZXJ5T3B0aW9uczxLLCBUPixcbiAgKTogUHJvbWlzZTxBcG9sbG9RdWVyeVJlc3VsdDxUPj4ge1xuICAgIHJldHVybiB0aGlzLm9ic1F1ZXJ5LmZldGNoTW9yZShmZXRjaE1vcmVPcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJzY3JpYmVUb01vcmU8TVQgPSBhbnksIE1WID0gRW1wdHlPYmplY3Q+KFxuICAgIG9wdGlvbnM6IFN1YnNjcmliZVRvTW9yZU9wdGlvbnM8VCwgTVYsIE1UPixcbiAgKTogKCkgPT4gdm9pZCB7XG4gICAgLy8gWFhYOiB0aGVyZSdzIGEgYnVnIGluIGFwb2xsby1jbGllbnQgdHlwaW5nc1xuICAgIC8vIGl0IHNob3VsZCBub3QgaW5oZXJpdCB0eXBlcyBmcm9tIE9ic2VydmFibGVRdWVyeVxuICAgIHJldHVybiB0aGlzLm9ic1F1ZXJ5LnN1YnNjcmliZVRvTW9yZShvcHRpb25zIGFzIGFueSk7XG4gIH1cbiAgcHVibGljIHVwZGF0ZVF1ZXJ5KG1hcEZuOiAocHJldmlvdXNRdWVyeVJlc3VsdDogVCwgb3B0aW9uczogVXBkYXRlUXVlcnlPcHRpb25zPFY+KSA9PiBUKTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMub2JzUXVlcnkudXBkYXRlUXVlcnkobWFwRm4pO1xuICB9XG5cbiAgcHVibGljIHN0b3BQb2xsaW5nKCk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLm9ic1F1ZXJ5LnN0b3BQb2xsaW5nKCk7XG4gIH1cblxuICBwdWJsaWMgc3RhcnRQb2xsaW5nKHBvbGxJbnRlcnZhbDogbnVtYmVyKTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMub2JzUXVlcnkuc3RhcnRQb2xsaW5nKHBvbGxJbnRlcnZhbCk7XG4gIH1cblxuICBwdWJsaWMgc2V0T3B0aW9ucyhvcHRzOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5vYnNRdWVyeS5zZXRPcHRpb25zKG9wdHMpO1xuICB9XG5cbiAgcHVibGljIHNldFZhcmlhYmxlcyh2YXJpYWJsZXM6IFYpIHtcbiAgICByZXR1cm4gdGhpcy5vYnNRdWVyeS5zZXRWYXJpYWJsZXModmFyaWFibGVzKTtcbiAgfVxufVxuIl19