UNPKG

3.2 kBTypeScriptView Raw
1/// <reference types="react" />
2import * as React from 'react';
3import * as PropTypes from 'prop-types';
4import SizeAndPositionManager, { ItemSize } from './SizeAndPositionManager';
5import { ALIGNMENT, DIRECTION, SCROLL_CHANGE_REASON } from './constants';
6export { DIRECTION as ScrollDirection } from './constants';
7export declare type ItemPosition = 'absolute' | 'sticky';
8export 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}
20export interface ItemInfo {
21 index: number;
22 style: ItemStyle;
23}
24export interface RenderedRows {
25 startIndex: number;
26 stopIndex: number;
27}
28export 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}
46export interface State {
47 offset: number;
48 scrollChangeReason: SCROLL_CHANGE_REASON;
49}
50export 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}