Skip to content

Commit 3406e96

Browse files
authored
Merge branch 'main' into release-3.13
2 parents cf0ff5f + d79aec0 commit 3406e96

File tree

6 files changed

+155
-6
lines changed

6 files changed

+155
-6
lines changed

CHANGELOG.md

+8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
# @apollo/client
22

3+
## 3.12.11
4+
5+
### Patch Changes
6+
7+
- [#12351](https://github.com/apollographql/apollo-client/pull/12351) [`3da908b`](https://github.com/apollographql/apollo-client/commit/3da908b1dde73847805a41c287a83700b2b88887) Thanks [@jerelmiller](https://github.com/jerelmiller)! - Fixes an issue where the wrong `networkStatus` and `loading` value was emitted from `observableQuery` when calling `fetchMore` with a `no-cache` fetch policy. The `networkStatus` now properly reports as `ready` and `loading` as `false` after the result is returned.
8+
9+
- [#12354](https://github.com/apollographql/apollo-client/pull/12354) [`a24ef94`](https://github.com/apollographql/apollo-client/commit/a24ef9474f8f7a864f8b866563f8f7e661d2533f) Thanks [@phryneas](https://github.com/phryneas)! - Fix missing `main.d.cts` file
10+
311
## 3.12.10
412

513
### Patch Changes

config/prepareDist.js

-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@ entryPoints.forEach(function buildCts({
9797
dirs,
9898
bundleName = dirs[dirs.length - 1],
9999
}) {
100-
if (!dirs.length) return;
101100
fs.writeFileSync(
102101
path.join(distRoot, ...dirs, `${bundleName}.d.cts`),
103102
'export * from "./index.d.ts";\n'

package-lock.json

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@apollo/client",
3-
"version": "3.12.10",
3+
"version": "3.12.11",
44
"description": "A fully-featured caching GraphQL client.",
55
"private": true,
66
"keywords": [

src/__tests__/fetchMore.ts

+138-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import {
2222
} from "../cache";
2323

2424
import { MockedResponse, mockSingleLink } from "../testing";
25-
import { ObservableStream } from "../testing/internal";
25+
import { ObservableStream, setupPaginatedCase } from "../testing/internal";
2626

2727
describe("updateQuery on a simple query", () => {
2828
const query = gql`
@@ -1789,3 +1789,140 @@ describe("fetchMore on an observable query with connection", () => {
17891789
});
17901790
});
17911791
});
1792+
1793+
test("uses updateQuery to update the result of the query with no-cache queries", async () => {
1794+
const { query, link } = setupPaginatedCase();
1795+
1796+
const client = new ApolloClient({ cache: new InMemoryCache(), link });
1797+
1798+
const observable = client.watchQuery({
1799+
query,
1800+
fetchPolicy: "no-cache",
1801+
notifyOnNetworkStatusChange: true,
1802+
variables: { limit: 2 },
1803+
});
1804+
1805+
const stream = new ObservableStream(observable);
1806+
1807+
await expect(stream).toEmitApolloQueryResult({
1808+
data: {
1809+
letters: [
1810+
{ __typename: "Letter", letter: "A", position: 1 },
1811+
{ __typename: "Letter", letter: "B", position: 2 },
1812+
],
1813+
},
1814+
loading: false,
1815+
networkStatus: NetworkStatus.ready,
1816+
});
1817+
1818+
let fetchMoreResult = await observable.fetchMore({
1819+
variables: { offset: 2 },
1820+
updateQuery: (prev, { fetchMoreResult }) => ({
1821+
letters: prev.letters.concat(fetchMoreResult.letters),
1822+
}),
1823+
});
1824+
1825+
expect(fetchMoreResult).toEqualApolloQueryResult({
1826+
data: {
1827+
letters: [
1828+
{ __typename: "Letter", letter: "C", position: 3 },
1829+
{ __typename: "Letter", letter: "D", position: 4 },
1830+
],
1831+
},
1832+
loading: false,
1833+
networkStatus: NetworkStatus.ready,
1834+
});
1835+
1836+
await expect(stream).toEmitApolloQueryResult({
1837+
data: {
1838+
letters: [
1839+
{ __typename: "Letter", letter: "A", position: 1 },
1840+
{ __typename: "Letter", letter: "B", position: 2 },
1841+
],
1842+
},
1843+
loading: true,
1844+
networkStatus: NetworkStatus.fetchMore,
1845+
});
1846+
1847+
await expect(stream).toEmitApolloQueryResult({
1848+
data: {
1849+
letters: [
1850+
{ __typename: "Letter", letter: "A", position: 1 },
1851+
{ __typename: "Letter", letter: "B", position: 2 },
1852+
{ __typename: "Letter", letter: "C", position: 3 },
1853+
{ __typename: "Letter", letter: "D", position: 4 },
1854+
],
1855+
},
1856+
loading: false,
1857+
networkStatus: NetworkStatus.ready,
1858+
});
1859+
1860+
// Ensure we store the merged result as the last result
1861+
expect(observable.getCurrentResult(false)).toEqualApolloQueryResult({
1862+
data: {
1863+
letters: [
1864+
{ __typename: "Letter", letter: "A", position: 1 },
1865+
{ __typename: "Letter", letter: "B", position: 2 },
1866+
{ __typename: "Letter", letter: "C", position: 3 },
1867+
{ __typename: "Letter", letter: "D", position: 4 },
1868+
],
1869+
},
1870+
loading: false,
1871+
networkStatus: NetworkStatus.ready,
1872+
});
1873+
1874+
await expect(stream).not.toEmitAnything();
1875+
1876+
fetchMoreResult = await observable.fetchMore({
1877+
variables: { offset: 4 },
1878+
updateQuery: (_, { fetchMoreResult }) => fetchMoreResult,
1879+
});
1880+
1881+
expect(fetchMoreResult).toEqualApolloQueryResult({
1882+
data: {
1883+
letters: [
1884+
{ __typename: "Letter", letter: "E", position: 5 },
1885+
{ __typename: "Letter", letter: "F", position: 6 },
1886+
],
1887+
},
1888+
loading: false,
1889+
networkStatus: NetworkStatus.ready,
1890+
});
1891+
1892+
await expect(stream).toEmitApolloQueryResult({
1893+
data: {
1894+
letters: [
1895+
{ __typename: "Letter", letter: "A", position: 1 },
1896+
{ __typename: "Letter", letter: "B", position: 2 },
1897+
{ __typename: "Letter", letter: "C", position: 3 },
1898+
{ __typename: "Letter", letter: "D", position: 4 },
1899+
],
1900+
},
1901+
loading: true,
1902+
networkStatus: NetworkStatus.fetchMore,
1903+
});
1904+
1905+
await expect(stream).toEmitApolloQueryResult({
1906+
data: {
1907+
letters: [
1908+
{ __typename: "Letter", letter: "E", position: 5 },
1909+
{ __typename: "Letter", letter: "F", position: 6 },
1910+
],
1911+
},
1912+
loading: false,
1913+
networkStatus: NetworkStatus.ready,
1914+
});
1915+
1916+
expect(observable.getCurrentResult(false)).toEqualApolloQueryResult({
1917+
data: {
1918+
letters: [
1919+
{ __typename: "Letter", letter: "E", position: 5 },
1920+
{ __typename: "Letter", letter: "F", position: 6 },
1921+
],
1922+
},
1923+
loading: false,
1924+
networkStatus: NetworkStatus.ready,
1925+
});
1926+
1927+
await expect(stream).not.toEmitAnything();
1928+
});

src/core/ObservableQuery.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -583,7 +583,12 @@ Did you mean to call refetch(variables) instead of refetch({ variables })?`,
583583
});
584584

585585
this.reportResult(
586-
{ ...lastResult, data: data as TData },
586+
{
587+
...lastResult,
588+
networkStatus: originalNetworkStatus!,
589+
loading: isNetworkRequestInFlight(originalNetworkStatus),
590+
data: data as TData,
591+
},
587592
this.variables
588593
);
589594
}

0 commit comments

Comments
 (0)