///
import * as React from "react";
import ContextProvider from "./dependencies/ContextProvider";
import DataProvider from "./dependencies/DataProvider";
import LayoutProvider from "./dependencies/LayoutProvider";
import BaseScrollView, { ScrollEvent, ScrollViewDefaultProps } from "./scrollcomponent/BaseScrollView";
import { TOnItemStatusChanged } from "./ViewabilityTracker";
import { RenderStack } from "./VirtualRenderer";
import ItemAnimator from "./ItemAnimator";
import { number } from "prop-types";
/***
* This is the main component, please refer to samples to understand how to use.
* For advanced usage check out prop descriptions below.
* You also get common methods such as: scrollToIndex, scrollToItem, scrollToTop, scrollToEnd, scrollToOffset, getCurrentScrollOffset,
* findApproxFirstVisibleIndex.
* You'll need a ref to Recycler in order to call these
* Needs to have bounded size in all cases other than window scrolling (web).
*
* NOTE: React Native implementation uses ScrollView internally which means you get all ScrollView features as well such as Pull To Refresh, paging enabled
* You can easily create a recycling image flip view using one paging enabled flag. Read about ScrollView features in official
* react native documentation.
* NOTE: If you see blank space look at the renderAheadOffset prop and make sure your data provider has a good enough rowHasChanged method.
* Blanks are totally avoidable with this listview.
* NOTE: Also works on web (experimental)
* NOTE: For reflowability set canChangeSize to true (experimental)
*/
export interface RecyclerListViewProps {
layoutProvider: LayoutProvider;
dataProvider: DataProvider;
rowRenderer: (type: string | number, data: any, index: number) => JSX.Element | JSX.Element[] | null;
contextProvider?: ContextProvider;
renderAheadOffset?: number;
isHorizontal?: boolean;
onScroll?: (rawEvent: ScrollEvent, offsetX: number, offsetY: number) => void;
onEndReached?: () => void;
onEndReachedThreshold?: number;
onVisibleIndexesChanged?: TOnItemStatusChanged;
renderFooter?: () => JSX.Element | JSX.Element[] | null;
externalScrollView?: {
new (props: ScrollViewDefaultProps): BaseScrollView;
};
initialOffset?: number;
initialRenderIndex?: number;
scrollThrottle?: number;
canChangeSize?: boolean;
distanceFromWindow?: number;
useWindowScroll?: boolean;
disableRecycling?: boolean;
forceNonDeterministicRendering?: boolean;
extendedState?: object;
itemAnimator?: ItemAnimator;
scrollViewProps?: object;
columns ?:number;
}
export interface RecyclerListViewState {
renderStack: RenderStack;
}
export default class RecyclerListView extends React.Component {
static defaultProps: {
canChangeSize: boolean;
disableRecycling: boolean;
initialOffset: number;
initialRenderIndex: number;
isHorizontal: boolean;
onEndReachedThreshold: number;
renderAheadOffset: number;
};
static propTypes: {};
private _onEndReachedCalled;
private _virtualRenderer;
private _initComplete;
private _relayoutReqIndex;
private _params;
private _layout;
private _pendingScrollToOffset;
private _tempDim;
private _initialOffset;
private _cachedLayouts?;
private _scrollComponent;
private _defaultItemAnimator;
constructor(props: RecyclerListViewProps);
componentWillReceiveProps(newProps: RecyclerListViewProps): void;
componentDidUpdate(): void;
componentWillUnmount(): void;
componentWillMount(): void;
scrollToIndex(index: number, animate?: boolean): void;
scrollToItem(data: any, animate?: boolean): void;
scrollToTop(animate?: boolean): void;
scrollToEnd(animate?: boolean): void;
scrollToOffset(x: number, y: number, animate?: boolean): void;
getCurrentScrollOffset(): number;
findApproxFirstVisibleIndex(): number;
render(): JSX.Element;
private _checkAndChangeLayouts(newProps, forceFullRender?);
private _refreshViewability();
private _queueStateRefresh();
private _onSizeChanged(layout);
private _renderStackWhenReady(stack);
private _initTrackers();
private _assertDependencyPresence(props);
private _assertType(type);
private _dataHasChanged(row1, row2);
private _renderRowUsingMeta(itemMeta);
private _onViewContainerSizeChange(dim, index);
private _checkExpectedDimensionDiscrepancy(itemRect, type, index);
private _generateRenderStack();
private _onScroll(offsetX, offsetY, rawEvent);
private _processOnEndReached();
}