Skip to content

Commit

Permalink
Avoid calling applyNextFetchPolicy in prepareObservableQueryOptions.
Browse files Browse the repository at this point in the history
  • Loading branch information
benjamn committed Jul 8, 2021
1 parent 9c44a07 commit 696cab5
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 15 deletions.
3 changes: 0 additions & 3 deletions src/react/data/QueryData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import {
FetchMoreQueryOptions,
SubscribeToMoreOptions,
ObservableQuery,
applyNextFetchPolicy,
FetchMoreOptions,
UpdateQueryOptions,
DocumentNode,
Expand Down Expand Up @@ -199,8 +198,6 @@ export class QueryData<TData, TVariables> extends OperationData<
options.fetchPolicy === 'cache-and-network')
) {
options.fetchPolicy = 'cache-first';
} else if (options.nextFetchPolicy && this.currentObservable) {
applyNextFetchPolicy(options);
}

return {
Expand Down
47 changes: 35 additions & 12 deletions src/react/hoc/__tests__/queries/skip.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -589,6 +589,7 @@ describe('[queries] skip', () => {

const data = { allPeople: { people: [{ name: 'Luke Skywalker' }] } };
const nextData = { allPeople: { people: [{ name: 'Anakin Skywalker' }] } };
const finalData = { allPeople: { people: [{ name: 'Darth Vader' }] } };

let ranQuery = 0;

Expand All @@ -605,6 +606,14 @@ describe('[queries] skip', () => {
request: { query },
result: { data: nextData },
},
{
request: { query },
result: { data: nextData },
},
{
request: { query },
result: { data: finalData },
},
)
);

Expand All @@ -625,6 +634,8 @@ describe('[queries] skip', () => {
})(
class extends React.Component<any> {
render() {
expect(this.props.data?.error).toBeUndefined();

switch (++count) {
case 1:
expect(this.props.data.loading).toBe(true);
Expand All @@ -639,40 +650,52 @@ describe('[queries] skip', () => {
expect(ranQuery).toBe(1);
setTimeout(() => {
this.props.setSkip(true);
});
}, 10);
break;
case 3:
// This render is triggered after setting skip to true. Now
// let's set skip to false to re-trigger the query.
expect(this.props.skip).toBe(true);
expect(this.props.data).toBeUndefined();
expect(ranQuery).toBe(1);
setTimeout(() => {
this.props.setSkip(false);
});
}, 10);
break;
case 4:
expect(this.props.skip).toBe(false);
expect(this.props.data!.loading).toBe(true);
expect(this.props.data.allPeople).toEqual(data.allPeople);
expect(ranQuery).toBe(2);
break;
case 5:
expect(this.props.skip).toBe(false);
expect(this.props.data!.loading).toBe(false);
expect(this.props.data.allPeople).toEqual(nextData.allPeople);
expect(ranQuery).toBe(3);
// Since the `nextFetchPolicy` was set to `cache-first`, our
// query isn't loading as it's able to find the result of the
// query directly from the cache. Let's trigger a refetch
// to manually load the next batch of data.
expect(this.props.data!.loading).toBe(false);
expect(this.props.data.allPeople).toEqual(data.allPeople);
expect(ranQuery).toBe(1);
setTimeout(() => {
this.props.data.refetch();
});
}, 10);
break;
case 5:
case 6:
expect(this.props.skip).toBe(false);
expect(this.props.data!.loading).toBe(true);
expect(ranQuery).toBe(2);
expect(this.props.data.allPeople).toEqual(nextData.allPeople);
expect(ranQuery).toBe(4);
break;
case 6:
case 7:
// The next batch of data has loaded.
expect(this.props.skip).toBe(false);
expect(this.props.data!.loading).toBe(false);
expect(this.props.data.allPeople).toEqual(nextData.allPeople);
expect(ranQuery).toBe(2);
expect(this.props.data.allPeople).toEqual(finalData.allPeople);
expect(ranQuery).toBe(4);
break;
default:
throw new Error(`too many renders (${count})`);
}
return null;
}
Expand All @@ -698,7 +721,7 @@ describe('[queries] skip', () => {
);

await wait(() => {
expect(count).toEqual(6);
expect(count).toEqual(7);
});
});

Expand Down

0 comments on commit 696cab5

Please sign in to comment.