diff --git a/.changeset/loud-bulldogs-pay.md b/.changeset/loud-bulldogs-pay.md new file mode 100644 index 00000000000..cd16bc95d8e --- /dev/null +++ b/.changeset/loud-bulldogs-pay.md @@ -0,0 +1,5 @@ +--- +"@apollo/client": patch +--- + +Fix an issue where a `@defer` query reported the `dataState` as `complete` instead of `streaming` when an error occurs on a deferred field that bubbled to the defer boundary. diff --git a/src/core/QueryInfo.ts b/src/core/QueryInfo.ts index 1ff93903789..df907bb364d 100644 --- a/src/core/QueryInfo.ts +++ b/src/core/QueryInfo.ts @@ -399,8 +399,8 @@ export class QueryInfo< if ( dataState === "complete" || - (returnPartialData && dataState === "partial" && shouldWrite) || - (this.hasNext && dataState === "streaming") + dataState === "streaming" || + (returnPartialData && dataState === "partial" && shouldWrite) ) { result = { ...result, data: diffResult, dataState }; } diff --git a/src/incremental/handlers/__tests__/graphql17Alpha9/defer.test.ts b/src/incremental/handlers/__tests__/graphql17Alpha9/defer.test.ts index 3ac60d37aed..f5d4c538414 100644 --- a/src/incremental/handlers/__tests__/graphql17Alpha9/defer.test.ts +++ b/src/incremental/handlers/__tests__/graphql17Alpha9/defer.test.ts @@ -2506,13 +2506,13 @@ test("stream that returns an error but continues to stream", async () => { await expect(observableStream).toEmitTypedValue({ loading: false, - data: { + data: markAsStreaming({ hero: { __typename: "Hero", id: "1", name: "slow", }, - }, + }), error: new CombinedGraphQLErrors({ data: { hero: { @@ -2529,9 +2529,9 @@ test("stream that returns an error but continues to stream", async () => { }, ], }), - dataState: "complete", + dataState: "streaming", networkStatus: NetworkStatus.error, - partial: false, + partial: true, }); });