1 |
|
2 | import * as React from 'react';
|
3 | import * as PropTypes from 'prop-types';
|
4 | import SizeAndPositionManager, { ItemSize } from './SizeAndPositionManager';
|
5 | import { ALIGNMENT, DIRECTION, SCROLL_CHANGE_REASON } from './constants';
|
6 | export { DIRECTION as ScrollDirection } from './constants';
|
7 | export declare type ItemPosition = 'absolute' | 'sticky';
|
8 | export interface ItemStyle {
|
9 | position: ItemPosition;
|
10 | top?: number;
|
11 | left: number;
|
12 | width: string | number;
|
13 | height?: number;
|
14 | marginTop?: number;
|
15 | marginLeft?: number;
|
16 | marginRight?: number;
|
17 | marginBottom?: number;
|
18 | zIndex?: number;
|
19 | }
|
20 | export interface ItemInfo {
|
21 | index: number;
|
22 | style: ItemStyle;
|
23 | }
|
24 | export interface RenderedRows {
|
25 | startIndex: number;
|
26 | stopIndex: number;
|
27 | }
|
28 | export interface Props {
|
29 | className?: string;
|
30 | estimatedItemSize?: number;
|
31 | height: number | string;
|
32 | itemCount: number;
|
33 | itemSize: ItemSize;
|
34 | overscanCount?: number;
|
35 | scrollOffset?: number;
|
36 | scrollToIndex?: number;
|
37 | scrollToAlignment?: ALIGNMENT;
|
38 | scrollDirection?: DIRECTION;
|
39 | stickyIndices?: number[];
|
40 | style?: React.CSSProperties;
|
41 | width?: number | string;
|
42 | onItemsRendered?({startIndex, stopIndex}: RenderedRows): void;
|
43 | onScroll?(offset: number, event: UIEvent): void;
|
44 | renderItem(itemInfo: ItemInfo): React.ReactNode;
|
45 | }
|
46 | export interface State {
|
47 | offset: number;
|
48 | scrollChangeReason: SCROLL_CHANGE_REASON;
|
49 | }
|
50 | export default class VirtualList extends React.PureComponent<Props, State> {
|
51 | static defaultProps: {
|
52 | overscanCount: number;
|
53 | scrollDirection: DIRECTION;
|
54 | width: string;
|
55 | };
|
56 | static propTypes: {
|
57 | estimatedItemSize: PropTypes.Requireable<any>;
|
58 | height: PropTypes.Validator<any>;
|
59 | itemCount: PropTypes.Validator<any>;
|
60 | itemSize: PropTypes.Validator<any>;
|
61 | onScroll: PropTypes.Requireable<any>;
|
62 | onItemsRendered: PropTypes.Requireable<any>;
|
63 | overscanCount: PropTypes.Requireable<any>;
|
64 | renderItem: PropTypes.Validator<any>;
|
65 | scrollOffset: PropTypes.Requireable<any>;
|
66 | scrollToIndex: PropTypes.Requireable<any>;
|
67 | scrollToAlignment: PropTypes.Requireable<any>;
|
68 | scrollDirection: PropTypes.Requireable<any>;
|
69 | stickyIndices: PropTypes.Requireable<any>;
|
70 | style: PropTypes.Requireable<any>;
|
71 | width: PropTypes.Requireable<any>;
|
72 | };
|
73 | itemSizeGetter: (itemSize: ItemSize) => (index: any) => any;
|
74 | sizeAndPositionManager: SizeAndPositionManager;
|
75 | readonly state: State;
|
76 | private rootNode;
|
77 | private styleCache;
|
78 | componentDidMount(): void;
|
79 | componentWillReceiveProps(nextProps: Props): void;
|
80 | componentDidUpdate(_: Props, prevState: State): void;
|
81 | componentWillUnmount(): void;
|
82 | scrollTo(value: number): void;
|
83 | getOffsetForIndex(index: number, scrollToAlignment?: ALIGNMENT | undefined, itemCount?: number): number;
|
84 | recomputeSizes(startIndex?: number): void;
|
85 | render(): JSX.Element;
|
86 | private getRef;
|
87 | private handleScroll;
|
88 | private getNodeOffset();
|
89 | private getEstimatedItemSize(props?);
|
90 | private getSize(index, itemSize);
|
91 | private getStyle(index, sticky);
|
92 | }
|