11import React , { Component , ReactNode , CSSProperties } from "react" ;
2- import throttle from "./utils/ throttle" ;
2+ import { throttle } from ' throttle-debounce' ;
33import { ThresholdUnits , parseThreshold } from "./utils/threshold" ;
44
55type Fn = ( ) => any ;
66interface Props {
7- next : Fn ;
8- hasMore : boolean ;
9- children : ReactNode ;
7+ next ? : Fn ;
8+ hasMore ? : boolean ;
9+ children ? : ReactNode ;
1010 loader : ReactNode ;
11- scrollThreshold : number | string ;
12- endMessage : ReactNode ;
13- style : CSSProperties ;
14- height : number ;
15- scrollableTarget : ReactNode ;
16- hasChildren : boolean ;
17- pullDownToRefresh : boolean ;
18- pullDownToRefreshContent : ReactNode ;
19- releaseToRefreshContent : ReactNode ;
20- pullDownToRefreshThreshold : number ;
21- refreshFunction : Fn ;
22- onScroll : ( e : MouseEvent ) => any ;
11+ scrollThreshold ? : number | string ;
12+ endMessage ? : ReactNode ;
13+ style ? : CSSProperties ;
14+ height ? : number ;
15+ scrollableTarget ? : ReactNode ;
16+ hasChildren ? : boolean ;
17+ pullDownToRefresh ? : boolean ;
18+ pullDownToRefreshContent ? : ReactNode ;
19+ releaseToRefreshContent ? : ReactNode ;
20+ pullDownToRefreshThreshold ? : number ;
21+ refreshFunction ? : Fn ;
22+ onScroll ? : ( e : MouseEvent ) => any ;
2323 dataLength : number ;
24- initialScrollY : number ;
25- key : string ;
26- className : string ;
24+ initialScrollY ? : number ;
25+ key ? : string ;
26+ className ? : string ;
2727}
2828
2929interface State {
@@ -41,7 +41,7 @@ export default class InfiniteScroll extends Component<Props, State> {
4141 } ;
4242
4343 this . onScrollListener = this . onScrollListener . bind ( this ) ;
44- this . throttledOnScrollListener = throttle ( this . onScrollListener , 150 ) . bind (
44+ this . throttledOnScrollListener = throttle ( 150 , this . onScrollListener ) . bind (
4545 this
4646 ) ;
4747 this . onStart = this . onStart . bind ( this ) ;
@@ -50,7 +50,7 @@ export default class InfiniteScroll extends Component<Props, State> {
5050 this . getScrollableTarget = this . getScrollableTarget . bind ( this ) ;
5151 }
5252
53- private throttledOnScrollListener : ( ) => void ;
53+ private throttledOnScrollListener : ( e : MouseEvent ) => void ;
5454 private _scrollableNode : HTMLElement | undefined | null ;
5555 private el : HTMLElement | undefined | Window & typeof globalThis ;
5656 private _infScroll : HTMLDivElement | undefined ;
@@ -74,7 +74,7 @@ export default class InfiniteScroll extends Component<Props, State> {
7474 : this . _scrollableNode || window ;
7575
7676 if ( this . el ) {
77- this . el . addEventListener ( "scroll" , this . throttledOnScrollListener ) ;
77+ this . el . addEventListener ( "scroll" , ( e ) => this . throttledOnScrollListener ( e as MouseEvent ) ) ;
7878 }
7979
8080 if (
@@ -116,7 +116,7 @@ export default class InfiniteScroll extends Component<Props, State> {
116116
117117 componentWillUnmount ( ) {
118118 if ( this . el ) {
119- this . el . removeEventListener ( "scroll" , this . throttledOnScrollListener ) ;
119+ this . el . removeEventListener ( "scroll" , ( e ) => this . throttledOnScrollListener ( e as MouseEvent ) ) ;
120120
121121 if ( this . props . pullDownToRefresh ) {
122122 this . el . removeEventListener ( "touchstart" , this . onStart ) ;
@@ -191,7 +191,7 @@ export default class InfiniteScroll extends Component<Props, State> {
191191 // user is scrolling down to up
192192 if ( this . currentY < this . startY ) return ;
193193
194- if ( this . currentY - this . startY >= this . props . pullDownToRefreshThreshold ) {
194+ if ( this . currentY - this . startY >= Number ( this . props . pullDownToRefreshThreshold ) ) {
195195 this . setState ( {
196196 pullToRefreshThresholdBreached : true
197197 } ) ;
@@ -207,7 +207,7 @@ export default class InfiniteScroll extends Component<Props, State> {
207207 }
208208 } ;
209209
210- onEnd : EventListener = evt => {
210+ onEnd : EventListener = ( ) => {
211211 this . startY = 0 ;
212212 this . currentY = 0 ;
213213
@@ -254,7 +254,7 @@ export default class InfiniteScroll extends Component<Props, State> {
254254 if ( typeof this . props . onScroll === "function" ) {
255255 // Execute this callback in next tick so that it does not affect the
256256 // functionality of the library.
257- setTimeout ( ( ) => this . props . onScroll ( event ) , 0 ) ;
257+ setTimeout ( ( ) => this . props . onScroll && this . props . onScroll ( event ) , 0 ) ;
258258 }
259259
260260 let target =
@@ -274,7 +274,7 @@ export default class InfiniteScroll extends Component<Props, State> {
274274 if ( atBottom && this . props . hasMore ) {
275275 this . actionTriggered = true ;
276276 this . setState ( { showLoader : true } ) ;
277- this . props . next ( ) ;
277+ this . props . next && this . props . next ( ) ;
278278 }
279279
280280 this . lastScrollTop = target . scrollTop ;
0 commit comments