diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9f59d85e86c..d6f36efa497 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,9 @@
### Apollo Client (vNext)
+- A new `ObservableQuery.resetQueryStoreErrors()` method is now available that
+ can be used to clear out `ObservableQuery` query store errors.
+ [@hwillson](https://github.com/hwillson) in [#4941](https://github.com/apollographql/apollo-client/pull/4941)
- Documentation updates.
[@michael-watson](https://github.com/michael-watson) in [#4940](https://github.com/apollographql/apollo-client/pull/4940)
[@hwillson](https://github.com/hwillson) in [#4969](https://github.com/apollographql/apollo-client/pull/4969)
diff --git a/packages/apollo-client/src/core/ObservableQuery.ts b/packages/apollo-client/src/core/ObservableQuery.ts
index 55d70f06a02..6d57e1efa7d 100644
--- a/packages/apollo-client/src/core/ObservableQuery.ts
+++ b/packages/apollo-client/src/core/ObservableQuery.ts
@@ -280,6 +280,14 @@ export class ObservableQuery<
this.isTornDown = false;
}
+ public resetQueryStoreErrors() {
+ const queryStore = this.queryManager.queryStore.get(this.queryId);
+ if (queryStore) {
+ queryStore.networkError = null;
+ queryStore.graphQLErrors = [];
+ }
+ }
+
/**
* Update the variables of this observable query, and fetch the new results.
* This method should be preferred over `setVariables` in most use cases.
diff --git a/packages/apollo-client/src/core/__tests__/ObservableQuery.ts b/packages/apollo-client/src/core/__tests__/ObservableQuery.ts
index 506fcd1e4f2..b6a70dedcd8 100644
--- a/packages/apollo-client/src/core/__tests__/ObservableQuery.ts
+++ b/packages/apollo-client/src/core/__tests__/ObservableQuery.ts
@@ -4,6 +4,7 @@ import {
InMemoryCache,
IntrospectionFragmentMatcher,
} from 'apollo-cache-inmemory';
+import { GraphQLError } from 'graphql';
import mockQueryManager from '../../__mocks__/mockQueryManager';
import mockWatchQuery from '../../__mocks__/mockWatchQuery';
@@ -1998,4 +1999,48 @@ describe('ObservableQuery', () => {
});
});
});
+
+ describe('resetQueryStoreErrors', () => {
+ it("should remove any GraphQLError's stored in the query store", (done) => {
+ const graphQLError = new GraphQLError('oh no!');
+
+ const observable: ObservableQuery = mockWatchQuery({
+ request: { query, variables },
+ result: { errors: [graphQLError] },
+ });
+
+ observable.subscribe({
+ error() {
+ const { queryManager } = (observable as any);
+ const queryStore = queryManager.queryStore.get(observable.queryId);
+ expect(queryStore.graphQLErrors).toEqual([graphQLError]);
+
+ observable.resetQueryStoreErrors();
+ expect(queryStore.graphQLErrors).toEqual([]);
+
+ done();
+ }
+ });
+ });
+
+ it("should remove network error's stored in the query store", (done) => {
+ const networkError = new Error('oh no!');
+
+ const observable: ObservableQuery = mockWatchQuery({
+ request: { query, variables },
+ result: { data: dataOne },
+ });
+
+ observable.subscribe({
+ next() {
+ const { queryManager } = (observable as any);
+ const queryStore = queryManager.queryStore.get(observable.queryId);
+ queryStore.networkError = networkError;
+ observable.resetQueryStoreErrors();
+ expect(queryStore.networkError).toBeNull();
+ done();
+ }
+ });
+ });
+ });
});