Skip to content

Commit 2b5eb1e

Browse files
committed
Convert HorizontalList to InfiniteList
1 parent 310f1dc commit 2b5eb1e

File tree

2 files changed

+19
-16
lines changed

2 files changed

+19
-16
lines changed

src/timeline-list/HorizontalList.tsx renamed to src/infinite-list/index.tsx

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,24 @@ import React, {forwardRef, useCallback, useMemo, useRef} from 'react';
33
import {DataProvider, LayoutProvider, RecyclerListView, RecyclerListViewProps} from 'recyclerlistview';
44
import 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);

src/timeline-list/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import throttle from 'lodash/throttle';
66
import Context from '../expandableCalendar/Context';
77
import {UpdateSources} from '../expandableCalendar/commons';
88
import Timeline, {TimelineProps} from '../timeline/Timeline';
9-
import HorizontalList from './HorizontalList';
9+
import InfiniteList from '../infinite-list';
1010
import useTimelinePages, {INITIAL_PAGE} from './useTimelinePages';
1111

1212
export interface TimelineListProps {
@@ -104,7 +104,7 @@ const TimelineList = (props: TimelineListProps) => {
104104
);
105105

106106
return (
107-
<HorizontalList
107+
<InfiniteList
108108
ref={listRef}
109109
data={pages}
110110
renderItem={renderPage}

0 commit comments

Comments
 (0)