diff --git a/src/__tests__/client.ts b/src/__tests__/client.ts index 7911ddd4a9e..7a1ae00777c 100644 --- a/src/__tests__/client.ts +++ b/src/__tests__/client.ts @@ -3312,10 +3312,16 @@ describe('@connection', () => { defaultOptions: { watchQuery: { - nextFetchPolicy(fetchPolicy) { + nextFetchPolicy(fetchPolicy, context) { expect(++nextFetchPolicyCallCount).toBe(1); expect(this.query).toBe(query); expect(fetchPolicy).toBe("cache-first"); + + expect(context.reason).toBe("after-fetch"); + expect(context.observable).toBe(obs); + expect(context.options).toBe(obs.options); + expect(context.initialPolicy).toBe("cache-first"); + // Usually options.nextFetchPolicy applies only once, but a // nextFetchPolicy function can set this.nextFetchPolicy // again to perform an additional transition. @@ -3323,6 +3329,7 @@ describe('@connection', () => { ++nextFetchPolicyCallCount; return "cache-first"; }; + return "cache-and-network"; }, }, diff --git a/src/core/ObservableQuery.ts b/src/core/ObservableQuery.ts index 8ffd0b6dd59..83c2b046c97 100644 --- a/src/core/ObservableQuery.ts +++ b/src/core/ObservableQuery.ts @@ -610,7 +610,8 @@ once, rather than every time you call fetchMore.`); options.fetchPolicy = options.nextFetchPolicy(fetchPolicy, { reason, options, - observableQuery: this, + observable: this, + initialPolicy: this.initialFetchPolicy, }); } else if (reason === "variables-changed") { options.fetchPolicy = this.initialFetchPolicy; diff --git a/src/core/watchQueryOptions.ts b/src/core/watchQueryOptions.ts index 87b8e1fb9e9..dd3d1f91799 100644 --- a/src/core/watchQueryOptions.ts +++ b/src/core/watchQueryOptions.ts @@ -141,9 +141,10 @@ export interface WatchQueryOptions export interface NextFetchPolicyContext { reason: | "after-fetch" - | "variables-changed" - observableQuery: ObservableQuery; + | "variables-changed"; + observable: ObservableQuery; options: WatchQueryOptions; + initialPolicy: WatchQueryFetchPolicy; } export interface FetchMoreQueryOptions {