UNPKG

@segment/react-tiny-virtual-list

Version:

A tiny but mighty list virtualization component, with zero dependencies 💪

93 lines (92 loc) • 3.21 kB
/// <reference types="react" /> import * as React from 'react'; import * as PropTypes from 'prop-types'; import SizeAndPositionManager, { ItemSize } from './SizeAndPositionManager'; import { ALIGNMENT, DIRECTION, SCROLL_CHANGE_REASON } from './constants'; export { DIRECTION as ScrollDirection } from './constants'; export declare type ItemPosition = 'absolute' | 'sticky'; export interface ItemStyle { position: ItemPosition; top?: number; left: number; width: string | number; height?: number; marginTop?: number; marginLeft?: number; marginRight?: number; marginBottom?: number; zIndex?: number; } export interface ItemInfo { index: number; style: ItemStyle; } export interface RenderedRows { startIndex: number; stopIndex: number; } export interface Props { className?: string; estimatedItemSize?: number; height: number | string; itemCount: number; itemSize: ItemSize; overscanCount?: number; scrollOffset?: number; scrollToIndex?: number; scrollToAlignment?: ALIGNMENT; scrollDirection?: DIRECTION; stickyIndices?: number[]; style?: React.CSSProperties; width?: number | string; onItemsRendered?({startIndex, stopIndex}: RenderedRows): void; onScroll?(offset: number, event: UIEvent): void; renderItem(itemInfo: ItemInfo): React.ReactNode; } export interface State { offset: number; scrollChangeReason: SCROLL_CHANGE_REASON; } export default class VirtualList extends React.PureComponent<Props, State> { static defaultProps: { overscanCount: number; scrollDirection: DIRECTION; width: string; }; static propTypes: { estimatedItemSize: PropTypes.Requireable<any>; height: PropTypes.Validator<any>; itemCount: PropTypes.Validator<any>; itemSize: PropTypes.Validator<any>; onScroll: PropTypes.Requireable<any>; onItemsRendered: PropTypes.Requireable<any>; overscanCount: PropTypes.Requireable<any>; renderItem: PropTypes.Validator<any>; scrollOffset: PropTypes.Requireable<any>; scrollToIndex: PropTypes.Requireable<any>; scrollToAlignment: PropTypes.Requireable<any>; scrollDirection: PropTypes.Requireable<any>; stickyIndices: PropTypes.Requireable<any>; style: PropTypes.Requireable<any>; width: PropTypes.Requireable<any>; }; itemSizeGetter: (itemSize: ItemSize) => (index: any) => any; sizeAndPositionManager: SizeAndPositionManager; readonly state: State; private rootNode; private styleCache; componentDidMount(): void; UNSAFE_componentWillReceiveProps(nextProps: Props): void; componentDidUpdate(_: Props, prevState: State): void; componentWillUnmount(): void; scrollTo(value: number): void; getOffsetForIndex(index: number, scrollToAlignment?: ALIGNMENT | undefined, itemCount?: number): number; recomputeSizes(startIndex?: number): void; render(): JSX.Element; private getRef; private handleScroll; private getNodeOffset(); private getEstimatedItemSize(props?); private getSize(index, itemSize); private getStyle(index, sticky); }