@@ -3,31 +3,24 @@ import React, {forwardRef, useCallback, useMemo, useRef} from 'react';
33import { DataProvider , LayoutProvider , RecyclerListView , RecyclerListViewProps } from 'recyclerlistview' ;
44import constants from '../commons/constants' ;
55
6- const layoutProvider = new LayoutProvider (
7- ( ) => 'page' ,
8- ( _type , dim ) => {
9- dim . width = constants . screenWidth ;
10- dim . height = constants . screenHeight ;
11- }
12- ) ;
6+ const dataProviderMaker = ( items : string [ ] ) => new DataProvider ( ( item1 , item2 ) => item1 !== item2 ) . cloneWithRows ( items ) ;
137
14- const dataProviderMaker = ( items : string [ ] ) =>
15- new DataProvider ( ( item1 , item2 ) => item1 . value !== item2 . value || item1 . label !== item2 . label ) . cloneWithRows ( items ) ;
16-
17- export interface HorizontalListProps
8+ export interface InfiniteListProps
189 extends Omit < RecyclerListViewProps , 'dataProvider' | 'layoutProvider' | 'rowRenderer' > {
1910 data : any [ ] ;
2011 renderItem : RecyclerListViewProps [ 'rowRenderer' ] ;
2112 pageWidth ?: number ;
13+ pageHeight ?: number ;
2214 onPageChange ?: ( pageIndex : number , prevPageIndex : number ) => void ;
2315 initialPageIndex ?: number ;
2416}
2517
26- const HorizontalList = ( props : HorizontalListProps , ref : any ) => {
18+ const InfiniteList = ( props : InfiniteListProps , ref : any ) => {
2719 const {
2820 renderItem,
2921 data,
3022 pageWidth = constants . screenWidth ,
23+ pageHeight = constants . screenHeight ,
3124 onPageChange,
3225 initialPageIndex = 0 ,
3326 extendedState,
@@ -37,6 +30,16 @@ const HorizontalList = (props: HorizontalListProps, ref: any) => {
3730 return dataProviderMaker ( data ) ;
3831 } , [ data ] ) ;
3932
33+ const layoutProvider = useRef (
34+ new LayoutProvider (
35+ ( ) => 'page' ,
36+ ( _type , dim ) => {
37+ dim . width = pageWidth ;
38+ dim . height = pageHeight ;
39+ }
40+ )
41+ ) ;
42+
4043 const pageIndex = useRef < number > ( ) ;
4144
4245 const onScroll = useCallback (
@@ -61,7 +64,7 @@ const HorizontalList = (props: HorizontalListProps, ref: any) => {
6164 isHorizontal
6265 rowRenderer = { renderItem }
6366 dataProvider = { dataProvider }
64- layoutProvider = { layoutProvider }
67+ layoutProvider = { layoutProvider . current }
6568 extendedState = { extendedState }
6669 initialRenderIndex = { initialPageIndex }
6770 renderAheadOffset = { 5 * pageWidth }
@@ -75,4 +78,4 @@ const HorizontalList = (props: HorizontalListProps, ref: any) => {
7578 ) ;
7679} ;
7780
78- export default forwardRef ( HorizontalList ) ;
81+ export default forwardRef ( InfiniteList ) ;
0 commit comments