@@ -1087,5 +1087,69 @@ describe("client", () => {
1087
1087
const allItems = result . current . data ?. pages . flatMap ( ( page ) => page . items ) ;
1088
1088
expect ( allItems ) . toEqual ( [ 1 , 2 , 3 , 4 , 5 , 6 ] ) ;
1089
1089
} ) ;
1090
+ it ( 'should use return type from select option' , async ( ) => {
1091
+ const fetchClient = createFetchClient < paths > ( { baseUrl } ) ;
1092
+ const client = createClient ( fetchClient ) ;
1093
+
1094
+ // First page request handler
1095
+ const firstRequestHandler = useMockRequestHandler ( {
1096
+ baseUrl,
1097
+ method : "get" ,
1098
+ path : "/paginated-data" ,
1099
+ status : 200 ,
1100
+ body : { items : [ 1 , 2 , 3 ] , nextPage : 1 } ,
1101
+ } ) ;
1102
+
1103
+ const { result, rerender } = renderHook (
1104
+ ( ) =>
1105
+ client . useInfiniteQuery (
1106
+ "get" ,
1107
+ "/paginated-data" ,
1108
+ {
1109
+ params : {
1110
+ query : {
1111
+ limit : 3 ,
1112
+ } ,
1113
+ } ,
1114
+ } ,
1115
+ {
1116
+ getNextPageParam : ( lastPage ) => lastPage . nextPage ,
1117
+ initialPageParam : 0 ,
1118
+ select : ( data ) => data . pages . flatMap ( ( page ) => page . items ) . filter ( ( item ) => item !== undefined ) ,
1119
+ } ,
1120
+ ) ,
1121
+ { wrapper } ,
1122
+ ) ;
1123
+
1124
+ // Wait for initial query to complete
1125
+ await waitFor ( ( ) => expect ( result . current . isSuccess ) . toBe ( true ) ) ;
1126
+
1127
+ expectTypeOf ( result . current . data ) . toEqualTypeOf < number [ ] | undefined > ( ) ;
1128
+ expect ( result . current . data ) . toEqual ( [ 1 , 2 , 3 ] ) ;
1129
+
1130
+ // Set up mock for second page before triggering next page fetch
1131
+ const secondRequestHandler = useMockRequestHandler ( {
1132
+ baseUrl,
1133
+ method : "get" ,
1134
+ path : "/paginated-data" ,
1135
+ status : 200 ,
1136
+ body : { items : [ 4 , 5 , 6 ] , nextPage : 2 } ,
1137
+ } ) ;
1138
+
1139
+ // Fetch next page
1140
+ await act ( async ( ) => {
1141
+ await result . current . fetchNextPage ( ) ;
1142
+ // Force a rerender to ensure state is updated
1143
+ rerender ( ) ;
1144
+ } ) ;
1145
+
1146
+ // Wait for second page to be fetched and verify loading states
1147
+ await waitFor ( ( ) => {
1148
+ expect ( result . current . isFetching ) . toBe ( false ) ;
1149
+ expect ( result . current . hasNextPage ) . toBe ( true ) ;
1150
+ } ) ;
1151
+
1152
+ expect ( result . current . data ) . toEqual ( [ 1 , 2 , 3 , 4 , 5 , 6 ] ) ;
1153
+ } ) ;
1090
1154
} ) ;
1091
1155
} ) ;
0 commit comments