From 232e24c7aebd92ef509541fb47e8bd91facaa801 Mon Sep 17 00:00:00 2001 From: danielreuterwall Date: Wed, 19 Jul 2017 11:41:33 +0200 Subject: [PATCH] Exposed scrollToOffset from the underlying FlatList --- src/OptimizedFlatList.js | 70 +++++++++++++++++++++------------------- 1 file changed, 36 insertions(+), 34 deletions(-) diff --git a/src/OptimizedFlatList.js b/src/OptimizedFlatList.js index 59606fd..542519d 100644 --- a/src/OptimizedFlatList.js +++ b/src/OptimizedFlatList.js @@ -1,64 +1,66 @@ -import React from 'react' -import { - FlatList, -} from 'react-native' +import React from "react"; +import { FlatList } from "react-native"; -import FlatListItem from './FlatListItem' +import FlatListItem from "./FlatListItem"; export default class OptimizedFlatList extends React.PureComponent { - constructor(props) { super(props); - this.state = {} - this.rowRefs =[] + this.state = {}; + this.rowRefs = []; + } + + /** + * Scroll to a specific content pixel offset in the list. + */ + scrollToOffset(params: { animated?: ?boolean, offset: number }) { + this._listRef.scrollToOffset(params); } - _addRowRefs(ref, data){ + _addRowRefs(ref, data) { this.rowRefs[data.index] = { ref: ref, item: data.item, - index: data.index, - } + index: data.index + }; } - - _updateItem(index, visibility){ - this.rowRefs[index].ref.setVisibility(visibility) - return visibility + + _updateItem(index, visibility) { + this.rowRefs[index].ref.setVisibility(visibility); + return visibility; } - _renderItem(data){ - const view = this.props.renderItem(data) + _renderItem(data) { + const view = this.props.renderItem(data); return ( this._addRowRefs(myItem, data)} + ref={myItem => this._addRowRefs(myItem, data)} viewComponent={view} data={data} /> - ) + ); } - _onViewableItemsChanged (info: { - changed: Array<{ - key: string, - isViewable: boolean, - item: any, - index: ?number, - section?: any, - }> - } - ) { - info.changed.map(item => - this._updateItem(item.index, item.isViewable) - ) + _onViewableItemsChanged(info: { + changed: Array<{ + key: string, + isViewable: boolean, + item: any, + index: ?number, + section?: any + }> + }) { + info.changed.map(item => this._updateItem(item.index, item.isViewable)); } render() { return ( this._renderItem(data) } + renderItem={data => this._renderItem(data)} onViewableItemsChanged={this._onViewableItemsChanged.bind(this)} + ref={ref => (this._listRef = ref)} /> - ) + ); } }