apollo-angular
Version:
Use your GraphQL data in your Angular app, with the Apollo Client
85 lines • 11.4 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcmVmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3F1ZXJ5LXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFdEMsT0FBTyxFQUFDLFlBQVksRUFBRSxhQUFhLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFHcEQsU0FBUyxpQkFBaUIsQ0FBTyxRQUErQjtJQUM5RCxPQUFPLFNBQVMseUJBQXlCLENBQ3ZDLE1BQXFCO1FBRXJCLE9BQU8sSUFBSSxVQUFVLENBQUMsU0FBUyw2QkFBNkIsQ0FBQyxVQUFVO1lBQ3JFLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2xELE1BQU0sRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFDLEdBQUcsYUFBYSxDQUFDO1lBQzlELE1BQU0sRUFBQyxjQUFjLEVBQUUsV0FBVyxFQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUV2RCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksS0FBSyxDQUFDO1lBRWpDLElBQ0UsY0FBYztnQkFDZCxPQUFPO2dCQUNQLENBQUMsQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO2dCQUN6QyxXQUFXLEtBQUssWUFBWTtnQkFDNUIsQ0FBQyxPQUFPO2dCQUNSLENBQUMsUUFBUSxFQUNUO2dCQUNBLFVBQVUsQ0FBQyxJQUFJLENBQUM7b0JBQ2QsR0FBRyxhQUFhO29CQUNoQixPQUFPLEVBQUUsSUFBSTtvQkFDYixhQUFhLEVBQUUsYUFBYSxDQUFDLE9BQU87aUJBQzlCLENBQUMsQ0FBQzthQUNYO1lBRUQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUtELE1BQU0sT0FBTyxRQUFRO0lBSW5CLFlBQ1UsUUFBK0IsRUFDdkMsTUFBYyxFQUNkLE9BQWdDO1FBRnhCLGFBQVEsR0FBUixRQUFRLENBQXVCO1FBSXZDLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXpFLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLGlCQUFpQjtZQUMzQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEQsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNaLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFDdkMsQ0FBQztJQUVELDRCQUE0QjtJQUU1QixJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7SUFDakMsQ0FBQztJQUVNLE1BQU07UUFDWCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVNLGdCQUFnQjtRQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRU0sYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVNLFlBQVk7UUFDakIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVNLE9BQU8sQ0FBQyxTQUFhO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLFNBQVMsQ0FDZCxnQkFBNkM7UUFFN0MsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTSxlQUFlLENBQ3BCLE9BQTBDO1FBRTFDLDhDQUE4QztRQUM5QyxtREFBbUQ7UUFDbkQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxPQUFjLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBQ00sV0FBVyxDQUNoQixLQUFvRTtRQUVwRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTSxXQUFXO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRU0sWUFBWSxDQUFDLFlBQW9CO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVNLFVBQVUsQ0FBQyxJQUFTO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVNLFlBQVksQ0FBQyxTQUFZO1FBQzlCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0MsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ1pvbmV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUge1xuICBBcG9sbG9RdWVyeVJlc3VsdCxcbiAgT2JzZXJ2YWJsZVF1ZXJ5LFxuICBBcG9sbG9FcnJvcixcbiAgRmV0Y2hNb3JlUXVlcnlPcHRpb25zLFxuICBTdWJzY3JpYmVUb01vcmVPcHRpb25zLFxuICBVcGRhdGVRdWVyeU9wdGlvbnMsXG4gIFR5cGVkRG9jdW1lbnROb2RlLFxufSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlJztcbmltcG9ydCB7TmV0d29ya1N0YXR1c30gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQge09ic2VydmFibGUsIGZyb219IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge3dyYXBXaXRoWm9uZSwgZml4T2JzZXJ2YWJsZX0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQge1dhdGNoUXVlcnlPcHRpb25zLCBFbXB0eU9iamVjdH0gZnJvbSAnLi90eXBlcyc7XG5cbmZ1bmN0aW9uIHVzZUluaXRpYWxMb2FkaW5nPFQsIFY+KG9ic1F1ZXJ5OiBPYnNlcnZhYmxlUXVlcnk8VCwgVj4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVzZUluaXRpYWxMb2FkaW5nT3BlcmF0b3I8VD4oXG4gICAgc291cmNlOiBPYnNlcnZhYmxlPFQ+LFxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gdXNlSW5pdGlhbExvYWRpbmdTdWJzY3JpcHRpb24oc3Vic2NyaWJlcikge1xuICAgICAgY29uc3QgY3VycmVudFJlc3VsdCA9IG9ic1F1ZXJ5LmdldEN1cnJlbnRSZXN1bHQoKTtcbiAgICAgIGNvbnN0IHtsb2FkaW5nLCBlcnJvcnMsIGVycm9yLCBwYXJ0aWFsLCBkYXRhfSA9IGN1cnJlbnRSZXN1bHQ7XG4gICAgICBjb25zdCB7cGFydGlhbFJlZmV0Y2gsIGZldGNoUG9saWN5fSA9IG9ic1F1ZXJ5Lm9wdGlvbnM7XG5cbiAgICAgIGNvbnN0IGhhc0Vycm9yID0gZXJyb3JzIHx8IGVycm9yO1xuXG4gICAgICBpZiAoXG4gICAgICAgIHBhcnRpYWxSZWZldGNoICYmXG4gICAgICAgIHBhcnRpYWwgJiZcbiAgICAgICAgKCFkYXRhIHx8IE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMCkgJiZcbiAgICAgICAgZmV0Y2hQb2xpY3kgIT09ICdjYWNoZS1vbmx5JyAmJlxuICAgICAgICAhbG9hZGluZyAmJlxuICAgICAgICAhaGFzRXJyb3JcbiAgICAgICkge1xuICAgICAgICBzdWJzY3JpYmVyLm5leHQoe1xuICAgICAgICAgIC4uLmN1cnJlbnRSZXN1bHQsXG4gICAgICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICBuZXR3b3JrU3RhdHVzOiBOZXR3b3JrU3RhdHVzLmxvYWRpbmcsXG4gICAgICAgIH0gYXMgYW55KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfSk7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5UmVmRnJvbURvY3VtZW50PFQgZXh0ZW5kcyBUeXBlZERvY3VtZW50Tm9kZT4gPVxuICBUIGV4dGVuZHMgVHlwZWREb2N1bWVudE5vZGU8aW5mZXIgUiwgaW5mZXIgVj4gPyBRdWVyeVJlZjxSLCBWPiA6IG5ldmVyO1xuXG5leHBvcnQgY2xhc3MgUXVlcnlSZWY8VCwgViA9IEVtcHR5T2JqZWN0PiB7XG4gIHB1YmxpYyB2YWx1ZUNoYW5nZXM6IE9ic2VydmFibGU8QXBvbGxvUXVlcnlSZXN1bHQ8VD4+O1xuICBwdWJsaWMgcXVlcnlJZDogT2JzZXJ2YWJsZVF1ZXJ5PFQsIFY+WydxdWVyeUlkJ107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBvYnNRdWVyeTogT2JzZXJ2YWJsZVF1ZXJ5PFQsIFY+LFxuICAgIG5nWm9uZTogTmdab25lLFxuICAgIG9wdGlvbnM6IFdhdGNoUXVlcnlPcHRpb25zPFYsIFQ+LFxuICApIHtcbiAgICBjb25zdCB3cmFwcGVkID0gd3JhcFdpdGhab25lKGZyb20oZml4T2JzZXJ2YWJsZSh0aGlzLm9ic1F1ZXJ5KSksIG5nWm9uZSk7XG5cbiAgICB0aGlzLnZhbHVlQ2hhbmdlcyA9IG9wdGlvbnMudXNlSW5pdGlhbExvYWRpbmdcbiAgICAgID8gd3JhcHBlZC5waXBlKHVzZUluaXRpYWxMb2FkaW5nKHRoaXMub2JzUXVlcnkpKVxuICAgICAgOiB3cmFwcGVkO1xuICAgIHRoaXMucXVlcnlJZCA9IHRoaXMub2JzUXVlcnkucXVlcnlJZDtcbiAgfVxuXG4gIC8vIE9ic2VydmFibGVRdWVyeSdzIG1ldGhvZHNcblxuICBwdWJsaWMgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMub2JzUXVlcnkub3B0aW9ucztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmFyaWFibGVzKCkge1xuICAgIHJldHVybiB0aGlzLm9ic1F1ZXJ5LnZhcmlhYmxlcztcbiAgfVxuXG4gIHB1YmxpYyByZXN1bHQoKTogUHJvbWlzZTxBcG9sbG9RdWVyeVJlc3VsdDxUPj4ge1xuICAgIHJldHVybiB0aGlzLm9ic1F1ZXJ5LnJlc3VsdCgpO1xuICB9XG5cbiAgcHVibGljIGdldEN1cnJlbnRSZXN1bHQoKTogQXBvbGxvUXVlcnlSZXN1bHQ8VD4ge1xuICAgIHJldHVybiB0aGlzLm9ic1F1ZXJ5LmdldEN1cnJlbnRSZXN1bHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRMYXN0UmVzdWx0KCk6IEFwb2xsb1F1ZXJ5UmVzdWx0PFQ+IHtcbiAgICByZXR1cm4gdGhpcy5vYnNRdWVyeS5nZXRMYXN0UmVzdWx0KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TGFzdEVycm9yKCk6IEFwb2xsb0Vycm9yIHtcbiAgICByZXR1cm4gdGhpcy5vYnNRdWVyeS5nZXRMYXN0RXJyb3IoKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldExhc3RSZXN1bHRzKCk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLm9ic1F1ZXJ5LnJlc2V0TGFzdFJlc3VsdHMoKTtcbiAgfVxuXG4gIHB1YmxpYyByZWZldGNoKHZhcmlhYmxlcz86IFYpOiBQcm9taXNlPEFwb2xsb1F1ZXJ5UmVzdWx0PFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMub2JzUXVlcnkucmVmZXRjaCh2YXJpYWJsZXMpO1xuICB9XG5cbiAgcHVibGljIGZldGNoTW9yZTxLID0gVj4oXG4gICAgZmV0Y2hNb3JlT3B0aW9uczogRmV0Y2hNb3JlUXVlcnlPcHRpb25zPEssIFQ+LFxuICApOiBQcm9taXNlPEFwb2xsb1F1ZXJ5UmVzdWx0PFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMub2JzUXVlcnkuZmV0Y2hNb3JlKGZldGNoTW9yZU9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZVRvTW9yZTxNVCA9IGFueSwgTVYgPSBFbXB0eU9iamVjdD4oXG4gICAgb3B0aW9uczogU3Vic2NyaWJlVG9Nb3JlT3B0aW9uczxULCBNViwgTVQ+LFxuICApOiAoKSA9PiB2b2lkIHtcbiAgICAvLyBYWFg6IHRoZXJlJ3MgYSBidWcgaW4gYXBvbGxvLWNsaWVudCB0eXBpbmdzXG4gICAgLy8gaXQgc2hvdWxkIG5vdCBpbmhlcml0IHR5cGVzIGZyb20gT2JzZXJ2YWJsZVF1ZXJ5XG4gICAgcmV0dXJuIHRoaXMub2JzUXVlcnkuc3Vic2NyaWJlVG9Nb3JlKG9wdGlvbnMgYXMgYW55KTtcbiAgfVxuICBwdWJsaWMgdXBkYXRlUXVlcnkoXG4gICAgbWFwRm46IChwcmV2aW91c1F1ZXJ5UmVzdWx0OiBULCBvcHRpb25zOiBVcGRhdGVRdWVyeU9wdGlvbnM8Vj4pID0+IFQsXG4gICk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLm9ic1F1ZXJ5LnVwZGF0ZVF1ZXJ5KG1hcEZuKTtcbiAgfVxuXG4gIHB1YmxpYyBzdG9wUG9sbGluZygpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5vYnNRdWVyeS5zdG9wUG9sbGluZygpO1xuICB9XG5cbiAgcHVibGljIHN0YXJ0UG9sbGluZyhwb2xsSW50ZXJ2YWw6IG51bWJlcik6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLm9ic1F1ZXJ5LnN0YXJ0UG9sbGluZyhwb2xsSW50ZXJ2YWwpO1xuICB9XG5cbiAgcHVibGljIHNldE9wdGlvbnMob3B0czogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMub2JzUXVlcnkuc2V0T3B0aW9ucyhvcHRzKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRWYXJpYWJsZXModmFyaWFibGVzOiBWKSB7XG4gICAgcmV0dXJuIHRoaXMub2JzUXVlcnkuc2V0VmFyaWFibGVzKHZhcmlhYmxlcyk7XG4gIH1cbn1cbiJdfQ==