Skip to content

Commit dc1caa1

Browse files
feat: tests enabled false to true
1 parent 3dc839d commit dc1caa1

File tree

2 files changed

+77
-5
lines changed

2 files changed

+77
-5
lines changed

packages/use-dataloader/src/__tests__/useInfiniteDataLoader.test.tsx

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,4 +179,74 @@ describe('useInfinitDataLoader', () => {
179179
{ nextPage: 3, data: 'Page 2 data' },
180180
])
181181
})
182+
183+
it('should get the first and loadMore one page on mount while not enabled then enabled then reload', async () => {
184+
const { setCanResolve, initialProps, resetCounter } =
185+
getPrerequisite('test4')
186+
const localInitialProps = {
187+
...initialProps,
188+
config: {
189+
...config,
190+
enabled: false,
191+
},
192+
}
193+
const { result, rerender } = renderHook(
194+
props => useInfiniteDataLoader(props.key, props.method, props.config),
195+
{
196+
initialProps: localInitialProps,
197+
wrapper,
198+
},
199+
)
200+
expect(result.current.data).toBe(undefined)
201+
expect(result.current.isLoading).toBe(false)
202+
expect(initialProps.method).toHaveBeenCalledTimes(0)
203+
rerender(localInitialProps)
204+
expect(result.current.data).toBe(undefined)
205+
expect(result.current.isLoading).toBe(false)
206+
expect(initialProps.method).toHaveBeenCalledTimes(0)
207+
rerender({ ...localInitialProps, config: { ...config, enabled: true } })
208+
expect(result.current.data).toBe(undefined)
209+
await waitFor(() => expect(result.current.isLoading).toBe(true))
210+
expect(initialProps.method).toHaveBeenCalledTimes(1)
211+
expect(initialProps.method).toHaveBeenCalledWith({
212+
page: 1,
213+
})
214+
setCanResolve(true)
215+
await waitFor(() => expect(result.current.isSuccess).toBe(true))
216+
setCanResolve(false)
217+
expect(initialProps.method).toHaveBeenCalledTimes(1)
218+
expect(result.current.data).toStrictEqual([
219+
{ nextPage: 2, data: 'Page 1 data' },
220+
])
221+
expect(result.current.isLoading).toBe(false)
222+
act(() => {
223+
result.current.loadMore()
224+
})
225+
await waitFor(() => expect(result.current.isLoading).toBe(true))
226+
expect(result.current.data).toStrictEqual([
227+
{ nextPage: 2, data: 'Page 1 data' },
228+
])
229+
expect(initialProps.method).toHaveBeenCalledTimes(2)
230+
expect(initialProps.method).toHaveBeenCalledWith({
231+
page: 2,
232+
})
233+
setCanResolve(true)
234+
await waitFor(() => expect(result.current.isSuccess).toBe(true))
235+
expect(result.current.data).toStrictEqual([
236+
{ nextPage: 2, data: 'Page 1 data' },
237+
{ nextPage: 3, data: 'Page 2 data' },
238+
])
239+
setCanResolve(false)
240+
resetCounter()
241+
act(() => {
242+
result.current.reload().catch(() => null)
243+
})
244+
await waitFor(() => expect(result.current.isLoading).toBe(true))
245+
setCanResolve(true)
246+
await waitFor(() => expect(result.current.isSuccess).toBe(true))
247+
expect(result.current.data).toStrictEqual([
248+
{ nextPage: 2, data: 'Page 1 data' },
249+
{ nextPage: 3, data: 'Page 2 data' },
250+
])
251+
})
182252
})

packages/use-dataloader/src/useInfiniteDataLoader.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -201,11 +201,13 @@ export const useInfiniteDataLoader = <
201201
isSuccess,
202202
hasNextPage: nextPageRef.current !== undefined,
203203
isLoadingFirstPage,
204-
data: isLoadingFirstPage
205-
? initialData
206-
: (requestRefs.current
207-
.filter(dataloader => !!dataloader.data)
208-
.map(dataloader => dataloader.data) as ResultType[]),
204+
data:
205+
isLoadingFirstPage ||
206+
requestRefs.current.filter(dataloader => !!dataloader.data).length === 0
207+
? initialData
208+
: (requestRefs.current
209+
.filter(dataloader => !!dataloader.data)
210+
.map(dataloader => dataloader.data) as ResultType[]),
209211
error: request.error,
210212
reload,
211213
loadMore,

0 commit comments

Comments
 (0)