Skip to content

Commit 8793e71

Browse files
Hoang Phamclaude
andcommitted
feat: update getNextPageParam and getPreviousPageParam to accept pages and pageParams
Updated infinite query page param functions to match TanStack Query's signature: - getNextPageParam now accepts ([TData], [TPageParam]) instead of just [TData] - getPreviousPageParam now accepts ([TData], [TPageParam]) instead of just [TData] - Updated InfiniteQuery.swift to pass pageParams when calling these functions - Updated all tests to use the new signature with both parameters This allows developers to access both pages and pageParams arrays when determining the next/previous page parameter, providing more flexibility for pagination logic. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 7781fd9 commit 8793e71

5 files changed

Lines changed: 38 additions & 27 deletions

File tree

Sources/SwiftUIQuery/Core/InfiniteQueryTypes.swift

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,20 @@ public typealias InfiniteQueryFunction<TData: Sendable, TKey: QueryKey, TPagePar
1010
) async throws -> TData
1111

1212
/// Function to get the next page parameter
13+
/// Parameters:
14+
/// - pages: All pages of data that have been fetched
15+
/// - pageParams: All page parameters that have been used
16+
/// Returns: The next page parameter, or nil if there are no more pages
1317
public typealias GetNextPageParamFunction<TData: Sendable, TPageParam: Sendable & Codable> =
14-
@Sendable ([TData]) -> TPageParam?
18+
@Sendable ([TData], [TPageParam]) -> TPageParam?
1519

1620
/// Function to get the previous page parameter
21+
/// Parameters:
22+
/// - pages: All pages of data that have been fetched
23+
/// - pageParams: All page parameters that have been used
24+
/// Returns: The previous page parameter, or nil if there are no more pages
1725
public typealias GetPreviousPageParamFunction<TData: Sendable, TPageParam: Sendable & Codable> =
18-
@Sendable ([TData]) -> TPageParam?
26+
@Sendable ([TData], [TPageParam]) -> TPageParam?
1927

2028
/// Configuration options for infinite queries
2129
/// Equivalent to TanStack Query's InfiniteQueryOptions

Sources/SwiftUIQuery/InfiniteQuery.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,8 @@ public final class InfiniteQuery<
467467
return nil
468468
}
469469

470-
return getNextPageParam(data.pages)
470+
let params = data.pageParams.compactMap(\.self)
471+
return getNextPageParam(data.pages, params)
471472
}
472473

473474
/// Get the previous page parameter from current data
@@ -478,7 +479,8 @@ public final class InfiniteQuery<
478479
return nil
479480
}
480481

481-
return getPreviousPageParam(data.pages)
482+
let params = data.pageParams.compactMap(\.self)
483+
return getPreviousPageParam(data.pages, params)
482484
}
483485

484486
/// Check if there are more pages available in the forward direction

Sources/SwiftUIQuery/UseInfiniteQuery.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ public struct UseInfiniteQueryResult<TData: Sendable, TPageParam: Sendable & Cod
1616
/// Fetch next page function
1717
private let _fetchNextPage: @Sendable () async -> InfiniteQueryObserverResult<TData, TPageParam>
1818
/// Fetch previous page function
19-
private let _fetchPreviousPage: @Sendable () async -> InfiniteQueryObserverResult<TData, TPageParam>
19+
private let _fetchPreviousPage: @Sendable ()
20+
async -> InfiniteQueryObserverResult<TData, TPageParam>
2021

2122
init(
2223
result: InfiniteQueryObserverResult<TData, TPageParam>,

Tests/SwiftUIQueryTests/KeyTupleTests.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ struct KeyTupleTests {
186186
let page = pageParam ?? 0
187187
return [Post(id: page, title: "Post \(page)")]
188188
},
189-
getNextPageParam: { pages in
189+
getNextPageParam: { pages, _ in
190190
return pages.count < 3 ? pages.count : nil
191191
},
192192
initialPageParam: 0
@@ -338,7 +338,7 @@ struct KeyTupleTests {
338338
let page = pageParam ?? 0
339339
return [Item(id: page, name: "\(key.key2) item \(page)")]
340340
},
341-
getNextPageParam: { pages in
341+
getNextPageParam: { pages, _ in
342342
return pages.count < 3 ? pages.count : nil
343343
},
344344
initialPageParam: 0
@@ -379,7 +379,7 @@ struct KeyTupleTests {
379379
let page = pageParam ?? 0
380380
return [Review(id: page, rating: key.key4)]
381381
},
382-
getNextPageParam: { pages in
382+
getNextPageParam: { pages, _ in
383383
return pages.count < 2 ? pages.count : nil
384384
},
385385
initialPageParam: 0

Tests/SwiftUIQueryTests/UseInfiniteQueryTests.swift

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ struct UseInfiniteQueryTests {
3434
queryFn: { _, cursor in
3535
PostPage.create(start: cursor ?? 0, count: 10)
3636
},
37-
getNextPageParam: { pages in
37+
getNextPageParam: { pages, _ in
3838
pages.last?.nextCursor
3939
},
4040
initialPageParam: 0
@@ -55,7 +55,7 @@ struct UseInfiniteQueryTests {
5555
queryFn: { _, cursor in
5656
PostPage.create(start: cursor ?? 0, count: 10)
5757
},
58-
getNextPageParam: { pages in
58+
getNextPageParam: { pages, _ in
5959
pages.last?.nextCursor
6060
},
6161
initialPageParam: 0
@@ -75,7 +75,7 @@ struct UseInfiniteQueryTests {
7575
queryFn: { _, cursor in
7676
PostPage.create(start: cursor ?? 0, count: 10)
7777
},
78-
getNextPageParam: { pages in
78+
getNextPageParam: { pages, _ in
7979
pages.last?.nextCursor
8080
},
8181
initialPageParam: 0
@@ -104,7 +104,7 @@ struct UseInfiniteQueryTests {
104104
queryFn: { _, cursor in
105105
PostPage.create(start: cursor ?? 0, count: 10)
106106
},
107-
getNextPageParam: { pages in
107+
getNextPageParam: { pages, _ in
108108
pages.last?.nextCursor
109109
},
110110
initialPageParam: 0
@@ -139,7 +139,7 @@ struct UseInfiniteQueryTests {
139139
queryFn: { _, cursor in
140140
PostPage.create(start: cursor ?? 0, count: 10)
141141
},
142-
getNextPageParam: { pages in
142+
getNextPageParam: { pages, _ in
143143
pages.last?.nextCursor
144144
},
145145
initialPageParam: 0
@@ -162,7 +162,7 @@ struct UseInfiniteQueryTests {
162162
queryFn: { _, cursor in
163163
PostPage.create(start: cursor ?? 0, count: 10)
164164
},
165-
getNextPageParam: { pages in
165+
getNextPageParam: { pages, _ in
166166
pages.last?.nextCursor
167167
}
168168
) { _ in
@@ -186,7 +186,7 @@ struct InfiniteQueryObserverTests {
186186
queryFn: { _, cursor in
187187
PostPage.create(start: cursor ?? 0, count: 10)
188188
},
189-
getNextPageParam: { pages in
189+
getNextPageParam: { pages, _ in
190190
pages.last?.nextCursor
191191
},
192192
initialPageParam: 0
@@ -209,7 +209,7 @@ struct InfiniteQueryObserverTests {
209209
queryFn: { _, cursor in
210210
PostPage.create(start: cursor ?? 0, count: 10)
211211
},
212-
getNextPageParam: { pages in
212+
getNextPageParam: { pages, _ in
213213
pages.last?.nextCursor
214214
},
215215
initialPageParam: 0
@@ -244,7 +244,7 @@ struct InfiniteQueryObserverTests {
244244
queryFn: { _, cursor in
245245
PostPage.create(start: cursor ?? 0, count: 10)
246246
},
247-
getNextPageParam: { pages in
247+
getNextPageParam: { pages, _ in
248248
pages.last?.nextCursor
249249
},
250250
initialPageParam: 0
@@ -280,7 +280,7 @@ struct InfiniteQueryObserverTests {
280280
queryFn: { _, cursor in
281281
PostPage.create(start: cursor ?? 0, count: 10)
282282
},
283-
getNextPageParam: { pages in
283+
getNextPageParam: { pages, _ in
284284
pages.last?.nextCursor
285285
},
286286
initialPageParam: 0,
@@ -298,7 +298,7 @@ struct InfiniteQueryObserverTests {
298298
queryFn: { _, cursor in
299299
PostPage.create(start: cursor ?? 0, count: 10)
300300
},
301-
getNextPageParam: { pages in
301+
getNextPageParam: { pages, _ in
302302
pages.last?.nextCursor
303303
},
304304
initialPageParam: 0,
@@ -318,7 +318,7 @@ struct InfiniteQueryObserverTests {
318318
queryFn: { _, cursor in
319319
PostPage.create(start: cursor ?? 0, count: 10)
320320
},
321-
getNextPageParam: { pages in
321+
getNextPageParam: { pages, _ in
322322
pages.last?.nextCursor
323323
},
324324
initialPageParam: 0
@@ -339,7 +339,7 @@ struct InfiniteQueryObserverTests {
339339
queryFn: { _, cursor in
340340
PostPage.create(start: cursor ?? 0, count: 10)
341341
},
342-
getPreviousPageParam: { pages in
342+
getPreviousPageParam: { pages, _ in
343343
pages.first?.nextCursor // Simplified logic for testing
344344
},
345345
initialPageParam: 0
@@ -360,7 +360,7 @@ struct InfiniteQueryObserverTests {
360360
queryFn: { _, cursor in
361361
PostPage.create(start: cursor ?? 0, count: 10)
362362
},
363-
getNextPageParam: { pages in
363+
getNextPageParam: { pages, _ in
364364
pages.last?.nextCursor
365365
},
366366
initialPageParam: 0
@@ -495,7 +495,7 @@ struct InfiniteQueryTests {
495495
queryFn: { _, cursor in
496496
PostPage.create(start: cursor ?? 0, count: 10)
497497
},
498-
getNextPageParam: { pages in
498+
getNextPageParam: { pages, _ in
499499
pages.last?.nextCursor
500500
},
501501
initialPageParam: 0
@@ -531,7 +531,7 @@ struct InfiniteQueryTests {
531531
queryFn: { _, cursor in
532532
PostPage.create(start: cursor ?? 0, count: 10)
533533
},
534-
getPreviousPageParam: { pages in
534+
getPreviousPageParam: { pages, _ in
535535
pages.first?.nextCursor // Simplified logic for testing
536536
},
537537
initialPageParam: 0
@@ -567,7 +567,7 @@ struct InfiniteQueryTests {
567567
queryFn: { _, cursor in
568568
PostPage.create(start: cursor ?? 0, count: 10)
569569
},
570-
getNextPageParam: { pages in
570+
getNextPageParam: { pages, _ in
571571
pages.last?.nextCursor
572572
},
573573
initialPageParam: 0
@@ -596,7 +596,7 @@ struct InfiniteQueryTests {
596596
queryFn: { _, cursor in
597597
PostPage.create(start: cursor ?? 0, count: 10)
598598
},
599-
getNextPageParam: { pages in
599+
getNextPageParam: { pages, _ in
600600
pages.last?.nextCursor
601601
},
602602
initialPageParam: 0
@@ -651,7 +651,7 @@ struct InfiniteQueryTests {
651651
try await Task.sleep(nanoseconds: 100_000_000) // 0.1 seconds
652652
return PostPage.create(start: cursor ?? 0, count: 10)
653653
},
654-
getNextPageParam: { pages in
654+
getNextPageParam: { pages, _ in
655655
pages.last?.nextCursor
656656
},
657657
initialPageParam: 0

0 commit comments

Comments
 (0)