Skip to content

Commit 495bed5

Browse files
committed
Merge branch 'master' into next
2 parents 8645539 + 6756050 commit 495bed5

File tree

9 files changed

+159
-11
lines changed

9 files changed

+159
-11
lines changed

docs/src/components/markdown.module.css

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,15 @@
6464
.markdown > p > a,
6565
.markdown > ul > li > a,
6666
.markdown > ol > li > a,
67+
.markdown > blockquote > p > a,
6768
.markdown > table > tbody > tr > td > a {
6869
@apply text-blue-600 font-semibold transition-colors duration-150 ease-out;
6970
}
7071

7172
.markdown > p > a:hover,
7273
.markdown > ul > li > a:hover,
7374
.markdown > ol > li > a:hover,
75+
.markdown > blockquote > p > a:hover,
7476
.markdown > table > tbody > tr > td > a:hover {
7577
@apply text-blue-800 transition-colors duration-150 ease-out;
7678
}

docs/src/pages/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ const supporters = [
1414
['@bgazzera', 'https://github.com/bgazzera'],
1515
['Gabe Ragland', 'https://github.com/gragland'],
1616
['Matt Wood', 'https://github.com/mattwoodnyc'],
17+
['Joshua Turner', 'https://github.com/joshua-turner'],
18+
['Fillip Peyton', 'https://github.com/fillippeyton'],
1719
]
1820

1921
const fans = [
@@ -31,6 +33,7 @@ const fans = [
3133
'Juliano Farias (@frontendwizard)',
3234
'Kristóf Poduszló (@kripod)',
3335
'Peter Pistorius (@peterp)',
36+
'Agustín Villalobos (@agustin-v)',
3437
]
3538

3639
const Home = () => {

docs/src/pages/quick-start.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ function Todos() {
5454
<button
5555
onClick={() =>
5656
addTodo({
57-
id: Date.now()
58-
title: 'Do Laundry',
57+
id: Date.now(),
58+
title: 'Do Laundry'
5959
})
6060
}
6161
>

examples/custom-hooks/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
To run this example:
44

55
- `npm install` or `yarn`
6-
- `npm run start` or `yarn start`
6+
- `npm start` or `yarn start`

examples/custom-hooks/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020
"@rescripts/cli": "^0.0.11",
2121
"@rescripts/rescript-use-babel-config": "^0.0.8",
2222
"@rescripts/rescript-use-eslint-config": "^0.0.9",
23-
"babel-eslint": "10.0.1"
23+
"babel-eslint": "10.0.1",
24+
"eslint-config-prettier": "^6.12.0"
2425
},
2526
"browserslist": {
2627
"production": [

package.json

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@
2222
"test:types": "tsc",
2323
"test:eslint": "eslint --ext .ts,.tsx ./src",
2424
"build": "yarn build:commonjs && yarn build:es && yarn build:umd && yarn build:types",
25-
"build:commonjs": "rm -rf ./lib && BABEL_ENV=commonjs babel --extensions .ts,.tsx --ignore ./src/**/*.test.tsx ./src --out-dir lib",
26-
"build:es": "rm -rf ./es && babel --extensions .ts,.tsx --ignore ./src/**/*.test.tsx ./src --out-dir es",
27-
"build:umd": "rm -rf ./dist && NODE_ENV=production rollup -c && rollup-plugin-visualizer stats-react.json",
28-
"build:types": "rm -rf ./types && tsc --project ./tsconfig.types.json && replace 'import type' 'import' ./types -r --silent && replace 'export type' 'export' ./types -r --silent",
25+
"build:commonjs": "rimraf ./lib && cross-env BABEL_ENV=commonjs babel --extensions .ts,.tsx --ignore ./src/**/*.test.tsx ./src --out-dir lib",
26+
"build:es": "rimraf ./es && babel --extensions .ts,.tsx --ignore ./src/**/*.test.tsx ./src --out-dir es",
27+
"build:umd": "rimraf ./dist && cross-env NODE_ENV=production rollup -c && rollup-plugin-visualizer stats-react.json",
28+
"build:types": "rimraf ./types && tsc --project ./tsconfig.types.json && replace 'import type' 'import' ./types -r --silent && replace 'export type' 'export' ./types -r --silent",
2929
"now-build": "yarn && cd www && yarn && yarn build",
3030
"start": "rollup -c -w",
3131
"format": "prettier {.,src,src/**,example/src,example/src/**,types}/*.{md,js,jsx,tsx,json} --write",
@@ -106,6 +106,7 @@
106106
"react-dom": "^16.13.1",
107107
"react-error-boundary": "^2.2.2",
108108
"replace": "^1.2.0",
109+
"rimraf": "^3.0.2",
109110
"rollup": "^2.16.1",
110111
"rollup-plugin-babel": "^4.4.0",
111112
"rollup-plugin-commonjs": "^10.1.0",

src/core/query.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,10 @@ export class Query<TData = unknown, TError = unknown, TQueryFnData = TData> {
439439
cursor = options.getFetchMore(lastPage, pages)
440440
}
441441

442+
if (!cursor && typeof lastPage !== 'undefined') {
443+
return Promise.resolve(pages)
444+
}
445+
442446
const queryFn = options.queryFn || defaultQueryFn
443447

444448
return Promise.resolve()

src/react/tests/useInfiniteQuery.test.tsx

Lines changed: 139 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,15 @@ const initialItems = (page: number): Result => {
3131
}
3232
}
3333

34-
const fetchItems = async (page: number, ts: number): Promise<Result> => {
34+
const fetchItems = async (
35+
page: number,
36+
ts: number,
37+
nextId?: any
38+
): Promise<Result> => {
3539
await sleep(10)
3640
return {
3741
items: [...new Array(10)].fill(null).map((_, d) => page * pageSize + d),
38-
nextId: page + 1,
42+
nextId: nextId ?? page + 1,
3943
ts,
4044
}
4145
}
@@ -1108,4 +1112,137 @@ describe('useInfiniteQuery', () => {
11081112
// ensure that Item: 4 is no longer rendered
11091113
expect(rendered.queryAllByText('Item: 4')).toHaveLength(0)
11101114
})
1115+
1116+
it('should compute canFetchMore correctly for falsy getFetchMore return value on refetching', async () => {
1117+
const key = queryKey()
1118+
const MAX = 2
1119+
1120+
function Page() {
1121+
const fetchCountRef = React.useRef(0)
1122+
const [isRemovedLastPage, setIsRemovedLastPage] = React.useState<boolean>(
1123+
false
1124+
)
1125+
const {
1126+
status,
1127+
data,
1128+
error,
1129+
isFetching,
1130+
isFetchingMore,
1131+
fetchMore,
1132+
canFetchMore,
1133+
refetch,
1134+
} = useInfiniteQuery<Result, Error>(
1135+
key,
1136+
(_key, nextId = 0) =>
1137+
fetchItems(
1138+
nextId,
1139+
fetchCountRef.current++,
1140+
nextId === MAX || (nextId === MAX - 1 && isRemovedLastPage)
1141+
? false
1142+
: undefined
1143+
),
1144+
{
1145+
getFetchMore: (lastGroup, _allGroups) => lastGroup.nextId,
1146+
}
1147+
)
1148+
1149+
return (
1150+
<div>
1151+
<h1>Pagination</h1>
1152+
{status === 'loading' ? (
1153+
'Loading...'
1154+
) : status === 'error' ? (
1155+
<span>Error: {error?.message}</span>
1156+
) : (
1157+
<>
1158+
<div>Data:</div>
1159+
{data?.map((page, i) => (
1160+
<div key={i}>
1161+
<div>
1162+
Page {i}: {page.ts}
1163+
</div>
1164+
<div key={i}>
1165+
{page.items.map(item => (
1166+
<p key={item}>Item: {item}</p>
1167+
))}
1168+
</div>
1169+
</div>
1170+
))}
1171+
<div>
1172+
<button
1173+
onClick={() => fetchMore()}
1174+
disabled={!canFetchMore || Boolean(isFetchingMore)}
1175+
>
1176+
{isFetchingMore
1177+
? 'Loading more...'
1178+
: canFetchMore
1179+
? 'Load More'
1180+
: 'Nothing more to load'}
1181+
</button>
1182+
<button onClick={() => refetch()}>Refetch</button>
1183+
<button onClick={() => setIsRemovedLastPage(true)}>
1184+
Remove Last Page
1185+
</button>
1186+
</div>
1187+
<div>
1188+
{isFetching && !isFetchingMore
1189+
? 'Background Updating...'
1190+
: null}
1191+
</div>
1192+
</>
1193+
)}
1194+
</div>
1195+
)
1196+
}
1197+
1198+
const rendered = renderWithClient(client, <Page />)
1199+
1200+
rendered.getByText('Loading...')
1201+
1202+
await waitFor(() => {
1203+
rendered.getByText('Item: 9')
1204+
rendered.getByText('Page 0: 0')
1205+
})
1206+
1207+
fireEvent.click(rendered.getByText('Load More'))
1208+
1209+
await waitFor(() => rendered.getByText('Loading more...'))
1210+
1211+
await waitFor(() => {
1212+
rendered.getByText('Item: 19')
1213+
rendered.getByText('Page 0: 0')
1214+
rendered.getByText('Page 1: 1')
1215+
})
1216+
1217+
fireEvent.click(rendered.getByText('Load More'))
1218+
1219+
await waitFor(() => rendered.getByText('Loading more...'))
1220+
1221+
await waitFor(() => {
1222+
rendered.getByText('Item: 29')
1223+
rendered.getByText('Page 0: 0')
1224+
rendered.getByText('Page 1: 1')
1225+
rendered.getByText('Page 2: 2')
1226+
})
1227+
1228+
rendered.getByText('Nothing more to load')
1229+
1230+
fireEvent.click(rendered.getByText('Remove Last Page'))
1231+
1232+
await sleep(10)
1233+
1234+
fireEvent.click(rendered.getByText('Refetch'))
1235+
1236+
await waitFor(() => rendered.getByText('Background Updating...'))
1237+
1238+
await waitFor(() => {
1239+
rendered.getByText('Page 0: 3')
1240+
rendered.getByText('Page 1: 4')
1241+
})
1242+
1243+
expect(rendered.queryByText('Item: 29')).toBeNull()
1244+
expect(rendered.queryByText('Page 2: 5')).toBeNull()
1245+
1246+
rendered.getByText('Nothing more to load')
1247+
})
11111248
})

yarn.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6692,7 +6692,7 @@ [email protected]:
66926692
dependencies:
66936693
glob "^7.1.3"
66946694

6695-
rimraf@^3.0.0:
6695+
rimraf@^3.0.0, rimraf@^3.0.2:
66966696
version "3.0.2"
66976697
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
66986698
integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==

0 commit comments

Comments
 (0)