Skip to content

Commit bd4cf95

Browse files
committed
Stop excluding observerless queries from refetchQueries selection.
1 parent 372eb8f commit bd4cf95

File tree

2 files changed

+80
-2
lines changed

2 files changed

+80
-2
lines changed

src/__tests__/refetchQueries.ts

+76
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,82 @@ describe("client.refetchQueries", () => {
521521
resolve();
522522
});
523523

524+
itAsync('includes queries named in refetchQueries even if they have no observers', async (resolve, reject) => {
525+
const client = makeClient();
526+
527+
const aObs = client.watchQuery({ query: aQuery });
528+
const bObs = client.watchQuery({ query: bQuery });
529+
const abObs = client.watchQuery({ query: abQuery });
530+
531+
// These ObservableQuery objects have no observers yet, but should
532+
// nevertheless be refetched if identified explicitly in an options.include
533+
// array passed to client.refetchQueries.
534+
expect(aObs.hasObservers()).toBe(false);
535+
expect(bObs.hasObservers()).toBe(false);
536+
expect(abObs.hasObservers()).toBe(false);
537+
538+
const activeResults = await client.refetchQueries({
539+
include: ["A", abQuery],
540+
541+
onQueryUpdated(obs, diff) {
542+
if (obs === aObs) {
543+
expect(diff.complete).toBe(false);
544+
expect(diff.result).toEqual({});
545+
} else if (obs === abObs) {
546+
expect(diff.complete).toBe(false);
547+
expect(diff.result).toEqual({});
548+
} else {
549+
reject(`unexpected ObservableQuery ${
550+
obs.queryId
551+
} with name ${obs.queryName}`);
552+
}
553+
return Promise.resolve(diff.result);
554+
},
555+
});
556+
557+
sortObjects(activeResults);
558+
expect(activeResults).toEqual([
559+
{},
560+
{},
561+
]);
562+
563+
subs.push(abObs.subscribe({
564+
next(result) {
565+
expect(result.data).toEqual({ a: "A", b: "B" });
566+
567+
client.refetchQueries({
568+
include: [aQuery, "B"],
569+
570+
onQueryUpdated(obs, diff) {
571+
if (obs === aObs) {
572+
expect(diff.result).toEqual({ a: "A" });
573+
} else if (obs === bObs) {
574+
expect(diff.result).toEqual({ b: "B" });
575+
} else if (obs === abObs) {
576+
expect(diff.result).toEqual({ a: "A", b: "B" });
577+
} else {
578+
reject(`unexpected ObservableQuery ${
579+
obs.queryId
580+
} with name ${obs.queryName}`);
581+
}
582+
return Promise.resolve(diff.result);
583+
},
584+
585+
}).then(resultsAfterSubscribe => {
586+
sortObjects(resultsAfterSubscribe);
587+
expect(resultsAfterSubscribe).toEqual([
588+
{ a: "A" },
589+
{ b: "B" },
590+
]);
591+
592+
unsubscribe();
593+
}).then(resolve, reject);
594+
},
595+
}));
596+
597+
expect(abObs.hasObservers()).toBe(true);
598+
});
599+
524600
itAsync('should not include unwatched single queries', async (resolve, reject) => {
525601
const client = makeClient();
526602
const [

src/core/QueryManager.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -767,8 +767,10 @@ export class QueryManager<TStore> {
767767
options: { fetchPolicy },
768768
} = oq;
769769

770-
if (fetchPolicy === "standby" || !oq.hasObservers()) {
771-
// Skip inactive queries unless include === "all".
770+
if (
771+
fetchPolicy === "standby" ||
772+
(include === "active" && !oq.hasObservers())
773+
) {
772774
return;
773775
}
774776

0 commit comments

Comments
 (0)