@@ -56,6 +56,74 @@ describe('useInfiniteScroll', () => {
5656 expect ( mockHandler ) . toHaveBeenCalledTimes ( 1 )
5757 } )
5858
59+ it ( 'should not call loadMore when canLoadMore returns false' , async ( ) => {
60+ const mockHandler = vi . fn ( )
61+ const mockElement = givenMockElement ( )
62+ givenElementVisibilityRefMock ( true )
63+
64+ useInfiniteScroll ( mockElement , mockHandler , {
65+ canLoadMore : ( ) => false ,
66+ } )
67+
68+ expect ( mockHandler ) . not . toHaveBeenCalled ( )
69+ } )
70+
71+ it ( 'should call loadMore when canLoadMore returns true' , async ( ) => {
72+ const mockHandler = vi . fn ( )
73+ const mockElement = givenMockElement ( )
74+ givenElementVisibilityRefMock ( true )
75+
76+ useInfiniteScroll ( mockElement , mockHandler , {
77+ canLoadMore : ( ) => true ,
78+ } )
79+
80+ expect ( mockHandler ) . toHaveBeenCalledTimes ( 1 )
81+ } )
82+
83+ it ( 'should stop calling loadMore when canLoadMore changes from true to false' , async ( ) => {
84+ const mockHandler = vi . fn ( )
85+ const mockElement = givenMockElement ( )
86+ givenElementVisibilityRefMock ( true )
87+
88+ const canLoad = deepRef ( true )
89+ const canLoadMoreSpy = vi . fn ( ( ) => canLoad . value )
90+ useInfiniteScroll ( mockElement , mockHandler , {
91+ canLoadMore : canLoadMoreSpy ,
92+ } )
93+
94+ await flushPromises ( )
95+ expect ( mockHandler ) . toHaveBeenCalledTimes ( 1 )
96+
97+ canLoad . value = false
98+
99+ mockElement . dispatchEvent ( new Event ( 'scroll' ) )
100+ await flushPromises ( )
101+
102+ expect ( mockHandler ) . toHaveBeenCalledTimes ( 1 )
103+ } )
104+
105+ it ( 'should call loadMore when canLoadMore changes from false to true' , async ( ) => {
106+ const mockHandler = vi . fn ( )
107+ const mockElement = givenMockElement ( )
108+ givenElementVisibilityRefMock ( true )
109+
110+ const canLoad = deepRef ( false )
111+ const canLoadMoreSpy = vi . fn ( ( ) => canLoad . value )
112+ useInfiniteScroll ( mockElement , mockHandler , {
113+ canLoadMore : canLoadMoreSpy ,
114+ } )
115+
116+ await flushPromises ( )
117+ expect ( mockHandler ) . not . toHaveBeenCalled ( )
118+
119+ canLoad . value = true
120+
121+ mockElement . dispatchEvent ( new Event ( 'scroll' ) )
122+ await flushPromises ( )
123+
124+ expect ( mockHandler ) . toHaveBeenCalledTimes ( 1 )
125+ } )
126+
59127 function givenMockElement ( {
60128 scrollHeight = 0 ,
61129 } = { } ) : HTMLDivElement {
0 commit comments