fix(pagination): handle empty page return case

Adds a check for empty pages in the pagination logic to return a 
nil slice and empty PageInfo when there are no items to display. 
Updates tests to verify the behavior when no more items are 
available, ensuring robustness in pagination functionality.
This commit is contained in:
2025-06-16 12:04:52 +02:00
parent e60459ddd4
commit a8a1c613a4
2 changed files with 9 additions and 0 deletions
+3
View File
@@ -88,6 +88,9 @@ func GetPage[T any](items []T, first *int, after *string, last *int, before *str
eIx = idx eIx = idx
} }
page := items[sIx:min(eIx, len(items))] page := items[sIx:min(eIx, len(items))]
if len(page) == 0 {
return nil, PageInfo{}
}
return page, PageInfo{ return page, PageInfo{
StartCursor: ptr(EncodeCursor(fn(page[0]))), StartCursor: ptr(EncodeCursor(fn(page[0]))),
HasNextPage: eIx < len(items), HasNextPage: eIx < len(items),
+6
View File
@@ -45,6 +45,12 @@ func TestGetPage(t *testing.T) {
EndCursor: ptr("Mg=="), EndCursor: ptr("Mg=="),
}, },
}, },
{
name: "no more items",
args: args[string]{items: []string{"1", "2", "3"}, first: ptr(2), after: ptr("Mw=="), max: 10, fn: func(s string) string { return s }},
wantItems: nil,
wantPageInfo: PageInfo{},
},
{ {
name: "first 10", name: "first 10",
args: args[string]{items: []string{"1", "2", "3"}, first: ptr(10), max: 10, fn: func(s string) string { return s }}, args: args[string]{items: []string{"1", "2", "3"}, first: ptr(10), max: 10, fn: func(s string) string { return s }},