UNPKG

apollo-angular

Version:

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

85 lines 11.5 kB
import { NetworkStatus } from '@apollo/client/core'; import { Observable, from } from 'rxjs'; import { wrapWithZone, fixObservable } 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 { 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcmVmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3F1ZXJ5LXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFXQSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFdEMsT0FBTyxFQUFDLFlBQVksRUFBRSxhQUFhLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFHcEQsU0FBUyxpQkFBaUIsQ0FBa0MsUUFBK0I7SUFDekYsT0FBTyxTQUFTLHlCQUF5QixDQUN2QyxNQUFxQjtRQUVyQixPQUFPLElBQUksVUFBVSxDQUFDLFNBQVMsNkJBQTZCLENBQUMsVUFBVTtZQUNyRSxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNsRCxNQUFNLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBQyxHQUFHLGFBQWEsQ0FBQztZQUM5RCxNQUFNLEVBQUMsY0FBYyxFQUFFLFdBQVcsRUFBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFFdkQsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLEtBQUssQ0FBQztZQUVqQyxJQUNFLGNBQWM7Z0JBQ2QsT0FBTztnQkFDUCxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztnQkFDekMsV0FBVyxLQUFLLFlBQVk7Z0JBQzVCLENBQUMsT0FBTztnQkFDUixDQUFDLFFBQVEsRUFDVDtnQkFDQSxVQUFVLENBQUMsSUFBSSxDQUFDO29CQUNkLEdBQUcsYUFBYTtvQkFDaEIsT0FBTyxFQUFFLElBQUk7b0JBQ2IsYUFBYSxFQUFFLGFBQWEsQ0FBQyxPQUFPO2lCQUM5QixDQUFDLENBQUM7YUFDWDtZQUVELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNKLENBQUM7QUFNRCxNQUFNLE9BQU8sUUFBUTtJQUluQixZQUNVLFFBQStCLEVBQ3ZDLE1BQWMsRUFDZCxPQUFnQztRQUZ4QixhQUFRLEdBQVIsUUFBUSxDQUF1QjtRQUl2QyxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUV6RSxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxpQkFBaUI7WUFDM0MsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hELENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDWixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCw0QkFBNEI7SUFFNUIsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQVcsU0FBUztRQUNsQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO0lBQ2pDLENBQUM7SUFFTSxNQUFNO1FBQ1gsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVNLGFBQWE7UUFDbEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFTSxZQUFZO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFTSxPQUFPLENBQUMsU0FBYTtRQUMxQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTSxTQUFTLENBQ2QsZ0JBQTZDO1FBRTdDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRU0sZUFBZSxDQUNwQixPQUEwQztRQUUxQyw4Q0FBOEM7UUFDOUMsbURBQW1EO1FBQ25ELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsT0FBYyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUNNLFdBQVcsQ0FDaEIsS0FBb0U7UUFFcEUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU0sV0FBVztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVNLFlBQVksQ0FBQyxZQUFvQjtRQUN0QyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTSxVQUFVLENBQUMsSUFBUztRQUN6QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTSxZQUFZLENBQUMsU0FBWTtRQUM5QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Tmdab25lfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHtcbiAgQXBvbGxvUXVlcnlSZXN1bHQsXG4gIE9ic2VydmFibGVRdWVyeSxcbiAgQXBvbGxvRXJyb3IsXG4gIEZldGNoTW9yZVF1ZXJ5T3B0aW9ucyxcbiAgU3Vic2NyaWJlVG9Nb3JlT3B0aW9ucyxcbiAgVXBkYXRlUXVlcnlPcHRpb25zLFxuICBUeXBlZERvY3VtZW50Tm9kZSxcbiAgT3BlcmF0aW9uVmFyaWFibGVzLFxufSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlJztcbmltcG9ydCB7TmV0d29ya1N0YXR1c30gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQge09ic2VydmFibGUsIGZyb219IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge3dyYXBXaXRoWm9uZSwgZml4T2JzZXJ2YWJsZX0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQge1dhdGNoUXVlcnlPcHRpb25zLCBFbXB0eU9iamVjdH0gZnJvbSAnLi90eXBlcyc7XG5cbmZ1bmN0aW9uIHVzZUluaXRpYWxMb2FkaW5nPFQsIFYgZXh0ZW5kcyBPcGVyYXRpb25WYXJpYWJsZXM+KG9ic1F1ZXJ5OiBPYnNlcnZhYmxlUXVlcnk8VCwgVj4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVzZUluaXRpYWxMb2FkaW5nT3BlcmF0b3I8VD4oXG4gICAgc291cmNlOiBPYnNlcnZhYmxlPFQ+LFxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gdXNlSW5pdGlhbExvYWRpbmdTdWJzY3JpcHRpb24oc3Vic2NyaWJlcikge1xuICAgICAgY29uc3QgY3VycmVudFJlc3VsdCA9IG9ic1F1ZXJ5LmdldEN1cnJlbnRSZXN1bHQoKTtcbiAgICAgIGNvbnN0IHtsb2FkaW5nLCBlcnJvcnMsIGVycm9yLCBwYXJ0aWFsLCBkYXRhfSA9IGN1cnJlbnRSZXN1bHQ7XG4gICAgICBjb25zdCB7cGFydGlhbFJlZmV0Y2gsIGZldGNoUG9saWN5fSA9IG9ic1F1ZXJ5Lm9wdGlvbnM7XG5cbiAgICAgIGNvbnN0IGhhc0Vycm9yID0gZXJyb3JzIHx8IGVycm9yO1xuXG4gICAgICBpZiAoXG4gICAgICAgIHBhcnRpYWxSZWZldGNoICYmXG4gICAgICAgIHBhcnRpYWwgJiZcbiAgICAgICAgKCFkYXRhIHx8IE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMCkgJiZcbiAgICAgICAgZmV0Y2hQb2xpY3kgIT09ICdjYWNoZS1vbmx5JyAmJlxuICAgICAgICAhbG9hZGluZyAmJlxuICAgICAgICAhaGFzRXJyb3JcbiAgICAgICkge1xuICAgICAgICBzdWJzY3JpYmVyLm5leHQoe1xuICAgICAgICAgIC4uLmN1cnJlbnRSZXN1bHQsXG4gICAgICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICBuZXR3b3JrU3RhdHVzOiBOZXR3b3JrU3RhdHVzLmxvYWRpbmcsXG4gICAgICAgIH0gYXMgYW55KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfSk7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5UmVmRnJvbURvY3VtZW50PFQgZXh0ZW5kcyBUeXBlZERvY3VtZW50Tm9kZT4gPSBUIGV4dGVuZHMgVHlwZWREb2N1bWVudE5vZGU8aW5mZXIgUiwgaW5mZXIgVj5cbiAgPyBRdWVyeVJlZjxSLCBWICYgT3BlcmF0aW9uVmFyaWFibGVzPlxuICA6IG5ldmVyO1xuXG5leHBvcnQgY2xhc3MgUXVlcnlSZWY8VCwgViBleHRlbmRzIE9wZXJhdGlvblZhcmlhYmxlcyA9IEVtcHR5T2JqZWN0PiB7XG4gIHB1YmxpYyB2YWx1ZUNoYW5nZXM6IE9ic2VydmFibGU8QXBvbGxvUXVlcnlSZXN1bHQ8VD4+O1xuICBwdWJsaWMgcXVlcnlJZDogT2JzZXJ2YWJsZVF1ZXJ5PFQsIFY+WydxdWVyeUlkJ107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBvYnNRdWVyeTogT2JzZXJ2YWJsZVF1ZXJ5PFQsIFY+LFxuICAgIG5nWm9uZTogTmdab25lLFxuICAgIG9wdGlvbnM6IFdhdGNoUXVlcnlPcHRpb25zPFYsIFQ+LFxuICApIHtcbiAgICBjb25zdCB3cmFwcGVkID0gd3JhcFdpdGhab25lKGZyb20oZml4T2JzZXJ2YWJsZSh0aGlzLm9ic1F1ZXJ5KSksIG5nWm9uZSk7XG5cbiAgICB0aGlzLnZhbHVlQ2hhbmdlcyA9IG9wdGlvbnMudXNlSW5pdGlhbExvYWRpbmdcbiAgICAgID8gd3JhcHBlZC5waXBlKHVzZUluaXRpYWxMb2FkaW5nKHRoaXMub2JzUXVlcnkpKVxuICAgICAgOiB3cmFwcGVkO1xuICAgIHRoaXMucXVlcnlJZCA9IHRoaXMub2JzUXVlcnkucXVlcnlJZDtcbiAgfVxuXG4gIC8vIE9ic2VydmFibGVRdWVyeSdzIG1ldGhvZHNcblxuICBwdWJsaWMgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMub2JzUXVlcnkub3B0aW9ucztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmFyaWFibGVzKCkge1xuICAgIHJldHVybiB0aGlzLm9ic1F1ZXJ5LnZhcmlhYmxlcztcbiAgfVxuXG4gIHB1YmxpYyByZXN1bHQoKTogUHJvbWlzZTxBcG9sbG9RdWVyeVJlc3VsdDxUPj4ge1xuICAgIHJldHVybiB0aGlzLm9ic1F1ZXJ5LnJlc3VsdCgpO1xuICB9XG5cbiAgcHVibGljIGdldEN1cnJlbnRSZXN1bHQoKTogQXBvbGxvUXVlcnlSZXN1bHQ8VD4ge1xuICAgIHJldHVybiB0aGlzLm9ic1F1ZXJ5LmdldEN1cnJlbnRSZXN1bHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRMYXN0UmVzdWx0KCk6IEFwb2xsb1F1ZXJ5UmVzdWx0PFQ+IHtcbiAgICByZXR1cm4gdGhpcy5vYnNRdWVyeS5nZXRMYXN0UmVzdWx0KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TGFzdEVycm9yKCk6IEFwb2xsb0Vycm9yIHtcbiAgICByZXR1cm4gdGhpcy5vYnNRdWVyeS5nZXRMYXN0RXJyb3IoKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldExhc3RSZXN1bHRzKCk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLm9ic1F1ZXJ5LnJlc2V0TGFzdFJlc3VsdHMoKTtcbiAgfVxuXG4gIHB1YmxpYyByZWZldGNoKHZhcmlhYmxlcz86IFYpOiBQcm9taXNlPEFwb2xsb1F1ZXJ5UmVzdWx0PFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMub2JzUXVlcnkucmVmZXRjaCh2YXJpYWJsZXMpO1xuICB9XG5cbiAgcHVibGljIGZldGNoTW9yZTxLID0gVj4oXG4gICAgZmV0Y2hNb3JlT3B0aW9uczogRmV0Y2hNb3JlUXVlcnlPcHRpb25zPEssIFQ+LFxuICApOiBQcm9taXNlPEFwb2xsb1F1ZXJ5UmVzdWx0PFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMub2JzUXVlcnkuZmV0Y2hNb3JlKGZldGNoTW9yZU9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZVRvTW9yZTxNVCA9IGFueSwgTVYgPSBFbXB0eU9iamVjdD4oXG4gICAgb3B0aW9uczogU3Vic2NyaWJlVG9Nb3JlT3B0aW9uczxULCBNViwgTVQ+LFxuICApOiAoKSA9PiB2b2lkIHtcbiAgICAvLyBYWFg6IHRoZXJlJ3MgYSBidWcgaW4gYXBvbGxvLWNsaWVudCB0eXBpbmdzXG4gICAgLy8gaXQgc2hvdWxkIG5vdCBpbmhlcml0IHR5cGVzIGZyb20gT2JzZXJ2YWJsZVF1ZXJ5XG4gICAgcmV0dXJuIHRoaXMub2JzUXVlcnkuc3Vic2NyaWJlVG9Nb3JlKG9wdGlvbnMgYXMgYW55KTtcbiAgfVxuICBwdWJsaWMgdXBkYXRlUXVlcnkoXG4gICAgbWFwRm46IChwcmV2aW91c1F1ZXJ5UmVzdWx0OiBULCBvcHRpb25zOiBVcGRhdGVRdWVyeU9wdGlvbnM8Vj4pID0+IFQsXG4gICk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLm9ic1F1ZXJ5LnVwZGF0ZVF1ZXJ5KG1hcEZuKTtcbiAgfVxuXG4gIHB1YmxpYyBzdG9wUG9sbGluZygpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5vYnNRdWVyeS5zdG9wUG9sbGluZygpO1xuICB9XG5cbiAgcHVibGljIHN0YXJ0UG9sbGluZyhwb2xsSW50ZXJ2YWw6IG51bWJlcik6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLm9ic1F1ZXJ5LnN0YXJ0UG9sbGluZyhwb2xsSW50ZXJ2YWwpO1xuICB9XG5cbiAgcHVibGljIHNldE9wdGlvbnMob3B0czogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMub2JzUXVlcnkuc2V0T3B0aW9ucyhvcHRzKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRWYXJpYWJsZXModmFyaWFibGVzOiBWKSB7XG4gICAgcmV0dXJuIHRoaXMub2JzUXVlcnkuc2V0VmFyaWFibGVzKHZhcmlhYmxlcyk7XG4gIH1cbn1cbiJdfQ==