From 22a14199000ea994f24f6fe387ea26647af3c128 Mon Sep 17 00:00:00 2001 From: Chris Lewis Date: Wed, 29 Nov 2017 09:05:29 -0800 Subject: [PATCH] Fix $FlowFixMe in Flatlist Summary: $FlowFixMe suppressed type validation on _listRef. Add appropriate typing to let Flow succeed when $FlowFixMe is removed. Not sure what this project's philosophy around ref types is. In some places I've seen them annotated as any rather than trying to get a more granular type to match. I'm open to suggestions. `yarn flow` [INTERNAL] [ENHANCEMENT] [FlatList.js] - Remove $FlowFixMe from FlatList Closes https://github.com/facebook/react-native/pull/16882 Differential Revision: D6386479 Pulled By: hramos fbshipit-source-id: bed14f2c7071525cb46425ab14214771de0277f3 --- Libraries/Lists/FlatList.js | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/Libraries/Lists/FlatList.js b/Libraries/Lists/FlatList.js index 9b145cdbd4b5bc..63539c89ca1df0 100644 --- a/Libraries/Lists/FlatList.js +++ b/Libraries/Lists/FlatList.js @@ -16,6 +16,7 @@ const MetroListView = require('MetroListView'); // Used as a fallback legacy opt const React = require('React'); const View = require('View'); const VirtualizedList = require('VirtualizedList'); +const ListView = require('ListView'); const invariant = require('fbjs/lib/invariant'); @@ -326,7 +327,9 @@ class FlatList extends React.PureComponent, void> { * Scrolls to the end of the content. May be janky without `getItemLayout` prop. */ scrollToEnd(params?: ?{animated?: ?boolean}) { - this._listRef.scrollToEnd(params); + if (this._listRef) { + this._listRef.scrollToEnd(params); + } } /** @@ -343,7 +346,9 @@ class FlatList extends React.PureComponent, void> { viewOffset?: number, viewPosition?: number, }) { - this._listRef.scrollToIndex(params); + if (this._listRef) { + this._listRef.scrollToIndex(params); + } } /** @@ -357,7 +362,9 @@ class FlatList extends React.PureComponent, void> { item: ItemT, viewPosition?: number, }) { - this._listRef.scrollToItem(params); + if (this._listRef) { + this._listRef.scrollToItem(params); + } } /** @@ -366,7 +373,9 @@ class FlatList extends React.PureComponent, void> { * Check out [scrollToOffset](docs/virtualizedlist.html#scrolltooffset) of VirtualizedList */ scrollToOffset(params: {animated?: ?boolean, offset: number}) { - this._listRef.scrollToOffset(params); + if (this._listRef) { + this._listRef.scrollToOffset(params); + } } /** @@ -375,7 +384,9 @@ class FlatList extends React.PureComponent, void> { * taps on items or by navigation actions. */ recordInteraction() { - this._listRef.recordInteraction(); + if (this._listRef) { + this._listRef.recordInteraction(); + } } /** @@ -384,7 +395,9 @@ class FlatList extends React.PureComponent, void> { * @platform ios */ flashScrollIndicators() { - this._listRef.flashScrollIndicators(); + if (this._listRef) { + this._listRef.flashScrollIndicators(); + } } /** @@ -457,13 +470,10 @@ class FlatList extends React.PureComponent, void> { } _hasWarnedLegacy = false; - _listRef: VirtualizedList; + _listRef: null | VirtualizedList | ListView; _virtualizedListPairs: Array = []; _captureRef = ref => { - /* $FlowFixMe(>=0.53.0 site=react_native_fb,react_native_oss) This comment - * suppresses an error when upgrading Flow's support for React. To see the - * error delete this comment and run Flow. */ this._listRef = ref; };