apollo-angular
Version:
Use your GraphQL data in your Angular app, with the Apollo Client
85 lines • 11.5 kB
JavaScript
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==