mirror of
https://github.com/status-im/react-native.git
synced 2025-02-03 21:24:31 +00:00
Flowtype ListView
Reviewed By: yungsters Differential Revision: D7985836 fbshipit-source-id: 6e0944a8d2fb85aabc34dfd3125a07b208749f21
This commit is contained in:
parent
af6e2eb02d
commit
4b1ecb6204
@ -99,7 +99,7 @@ type VRProps = $ReadOnly<{|
|
|||||||
scrollBarThumbImage?: ?($ReadOnly<{||}> | number),
|
scrollBarThumbImage?: ?($ReadOnly<{||}> | number),
|
||||||
|}>;
|
|}>;
|
||||||
|
|
||||||
type Props = $ReadOnly<{|
|
export type Props = $ReadOnly<{|
|
||||||
...ViewProps,
|
...ViewProps,
|
||||||
...TouchableProps,
|
...TouchableProps,
|
||||||
...IOSProps,
|
...IOSProps,
|
||||||
|
@ -117,9 +117,11 @@ class SwipeableListView extends React.Component<Props, State> {
|
|||||||
|
|
||||||
render(): React.Node {
|
render(): React.Node {
|
||||||
return (
|
return (
|
||||||
|
// $FlowFixMe Found when typing ListView
|
||||||
<ListView
|
<ListView
|
||||||
{...this.props}
|
{...this.props}
|
||||||
ref={ref => {
|
ref={ref => {
|
||||||
|
// $FlowFixMe Found when typing ListView
|
||||||
this._listViewRef = ref;
|
this._listViewRef = ref;
|
||||||
}}
|
}}
|
||||||
dataSource={this.state.dataSource.getDataSource()}
|
dataSource={this.state.dataSource.getDataSource()}
|
||||||
|
@ -497,6 +497,7 @@ class NetworkOverlay extends React.Component<
|
|||||||
renderRow={this._renderRow}
|
renderRow={this._renderRow}
|
||||||
enableEmptySections={true}
|
enableEmptySections={true}
|
||||||
renderSeparator={this._renderSeperator}
|
renderSeparator={this._renderSeperator}
|
||||||
|
// $FlowFixMe Found when typing ListView
|
||||||
onLayout={this._listViewOnLayout}
|
onLayout={this._listViewOnLayout}
|
||||||
/>
|
/>
|
||||||
</View>
|
</View>
|
||||||
|
@ -346,6 +346,7 @@ class FlatList<ItemT> extends React.PureComponent<Props<ItemT>, void> {
|
|||||||
viewPosition?: number,
|
viewPosition?: number,
|
||||||
}) {
|
}) {
|
||||||
if (this._listRef) {
|
if (this._listRef) {
|
||||||
|
// $FlowFixMe Found when typing ListView
|
||||||
this._listRef.scrollToIndex(params);
|
this._listRef.scrollToIndex(params);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -362,6 +363,7 @@ class FlatList<ItemT> extends React.PureComponent<Props<ItemT>, void> {
|
|||||||
viewPosition?: number,
|
viewPosition?: number,
|
||||||
}) {
|
}) {
|
||||||
if (this._listRef) {
|
if (this._listRef) {
|
||||||
|
// $FlowFixMe Found when typing ListView
|
||||||
this._listRef.scrollToItem(params);
|
this._listRef.scrollToItem(params);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -373,6 +375,7 @@ class FlatList<ItemT> extends React.PureComponent<Props<ItemT>, void> {
|
|||||||
*/
|
*/
|
||||||
scrollToOffset(params: {animated?: ?boolean, offset: number}) {
|
scrollToOffset(params: {animated?: ?boolean, offset: number}) {
|
||||||
if (this._listRef) {
|
if (this._listRef) {
|
||||||
|
// $FlowFixMe Found when typing ListView
|
||||||
this._listRef.scrollToOffset(params);
|
this._listRef.scrollToOffset(params);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -384,6 +387,7 @@ class FlatList<ItemT> extends React.PureComponent<Props<ItemT>, void> {
|
|||||||
*/
|
*/
|
||||||
recordInteraction() {
|
recordInteraction() {
|
||||||
if (this._listRef) {
|
if (this._listRef) {
|
||||||
|
// $FlowFixMe Found when typing ListView
|
||||||
this._listRef.recordInteraction();
|
this._listRef.recordInteraction();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -395,6 +399,7 @@ class FlatList<ItemT> extends React.PureComponent<Props<ItemT>, void> {
|
|||||||
*/
|
*/
|
||||||
flashScrollIndicators() {
|
flashScrollIndicators() {
|
||||||
if (this._listRef) {
|
if (this._listRef) {
|
||||||
|
// $FlowFixMe Found when typing ListView
|
||||||
this._listRef.flashScrollIndicators();
|
this._listRef.flashScrollIndicators();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -404,12 +409,14 @@ class FlatList<ItemT> extends React.PureComponent<Props<ItemT>, void> {
|
|||||||
*/
|
*/
|
||||||
getScrollResponder() {
|
getScrollResponder() {
|
||||||
if (this._listRef) {
|
if (this._listRef) {
|
||||||
|
// $FlowFixMe Found when typing ListView
|
||||||
return this._listRef.getScrollResponder();
|
return this._listRef.getScrollResponder();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getScrollableNode() {
|
getScrollableNode() {
|
||||||
if (this._listRef) {
|
if (this._listRef) {
|
||||||
|
// $FlowFixMe Found when typing ListView
|
||||||
return this._listRef.getScrollableNode();
|
return this._listRef.getScrollableNode();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -472,7 +479,7 @@ class FlatList<ItemT> extends React.PureComponent<Props<ItemT>, void> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_hasWarnedLegacy = false;
|
_hasWarnedLegacy = false;
|
||||||
_listRef: null | VirtualizedList | ListView;
|
_listRef: null | VirtualizedList | ListView | MetroListView;
|
||||||
_virtualizedListPairs: Array<ViewabilityConfigCallbackPair> = [];
|
_virtualizedListPairs: Array<ViewabilityConfigCallbackPair> = [];
|
||||||
|
|
||||||
_captureRef = ref => {
|
_captureRef = ref => {
|
||||||
|
30
Libraries/Lists/ListView/InternalListViewType.js
Normal file
30
Libraries/Lists/ListView/InternalListViewType.js
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2015-present, Facebook, Inc.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*
|
||||||
|
* @format
|
||||||
|
* @flow
|
||||||
|
*/
|
||||||
|
|
||||||
|
const React = require('React');
|
||||||
|
const ListViewDataSource = require('ListViewDataSource');
|
||||||
|
|
||||||
|
// This class is purely a facsimile of ListView so that we can
|
||||||
|
// properly type it with Flow before migrating ListView off of
|
||||||
|
// createReactClass. If there are things missing here that are in
|
||||||
|
// ListView, that is unintentional.
|
||||||
|
class InternalListViewType<Props> extends React.Component<Props> {
|
||||||
|
static DataSource = ListViewDataSource;
|
||||||
|
setNativeProps(props: Object) {}
|
||||||
|
flashScrollIndicators() {}
|
||||||
|
getScrollResponder(): any {}
|
||||||
|
getScrollableNode(): any {}
|
||||||
|
// $FlowFixMe
|
||||||
|
getMetrics(): Object {}
|
||||||
|
scrollTo(...args: Array<mixed>) {}
|
||||||
|
scrollToEnd(options?: ?{animated?: ?boolean}) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = InternalListViewType;
|
@ -9,6 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
const InternalListViewType = require('InternalListViewType');
|
||||||
const ListViewDataSource = require('ListViewDataSource');
|
const ListViewDataSource = require('ListViewDataSource');
|
||||||
const Platform = require('Platform');
|
const Platform = require('Platform');
|
||||||
const React = require('React');
|
const React = require('React');
|
||||||
@ -25,12 +26,36 @@ const createReactClass = require('create-react-class');
|
|||||||
const isEmpty = require('isEmpty');
|
const isEmpty = require('isEmpty');
|
||||||
const merge = require('merge');
|
const merge = require('merge');
|
||||||
|
|
||||||
|
import type {Props as ScrollViewProps} from 'ScrollView';
|
||||||
|
|
||||||
const DEFAULT_PAGE_SIZE = 1;
|
const DEFAULT_PAGE_SIZE = 1;
|
||||||
const DEFAULT_INITIAL_ROWS = 10;
|
const DEFAULT_INITIAL_ROWS = 10;
|
||||||
const DEFAULT_SCROLL_RENDER_AHEAD = 1000;
|
const DEFAULT_SCROLL_RENDER_AHEAD = 1000;
|
||||||
const DEFAULT_END_REACHED_THRESHOLD = 1000;
|
const DEFAULT_END_REACHED_THRESHOLD = 1000;
|
||||||
const DEFAULT_SCROLL_CALLBACK_THROTTLE = 50;
|
const DEFAULT_SCROLL_CALLBACK_THROTTLE = 50;
|
||||||
|
|
||||||
|
type Props = $ReadOnly<{|
|
||||||
|
...ScrollViewProps,
|
||||||
|
|
||||||
|
dataSource: ListViewDataSource,
|
||||||
|
renderSeparator?: ?Function,
|
||||||
|
renderRow: Function,
|
||||||
|
initialListSize?: ?number,
|
||||||
|
onEndReached?: ?Function,
|
||||||
|
onEndReachedThreshold?: ?number,
|
||||||
|
pageSize?: ?number,
|
||||||
|
renderFooter?: ?Function,
|
||||||
|
renderHeader?: ?Function,
|
||||||
|
renderSectionHeader?: ?Function,
|
||||||
|
renderScrollComponent?: ?Function,
|
||||||
|
scrollRenderAheadDistance?: ?number,
|
||||||
|
onChangeVisibleRows?: ?Function,
|
||||||
|
removeClippedSubviews?: ?boolean,
|
||||||
|
stickySectionHeadersEnabled?: ?boolean,
|
||||||
|
stickyHeaderIndices?: ?$ReadOnlyArray<number>,
|
||||||
|
enableEmptySections?: ?boolean,
|
||||||
|
|}>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DEPRECATED - use one of the new list components, such as [`FlatList`](docs/flatlist.html)
|
* DEPRECATED - use one of the new list components, such as [`FlatList`](docs/flatlist.html)
|
||||||
* or [`SectionList`](docs/sectionlist.html) for bounded memory use, fewer bugs,
|
* or [`SectionList`](docs/sectionlist.html) for bounded memory use, fewer bugs,
|
||||||
@ -92,7 +117,7 @@ const ListView = createReactClass({
|
|||||||
displayName: 'ListView',
|
displayName: 'ListView',
|
||||||
_childFrames: ([]: Array<Object>),
|
_childFrames: ([]: Array<Object>),
|
||||||
_sentEndForContentLength: (null: ?number),
|
_sentEndForContentLength: (null: ?number),
|
||||||
_scrollComponent: (null: any),
|
_scrollComponent: (null: ?React.ElementRef<typeof ScrollView>),
|
||||||
_prevRenderedRowsCount: 0,
|
_prevRenderedRowsCount: 0,
|
||||||
_visibleRows: ({}: Object),
|
_visibleRows: ({}: Object),
|
||||||
scrollProperties: ({}: Object),
|
scrollProperties: ({}: Object),
|
||||||
@ -555,7 +580,7 @@ const ListView = createReactClass({
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
_setScrollComponentRef: function(scrollComponent: Object) {
|
_setScrollComponentRef: function(scrollComponent) {
|
||||||
this._scrollComponent = scrollComponent;
|
this._scrollComponent = scrollComponent;
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -752,4 +777,4 @@ const ListView = createReactClass({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
module.exports = ListView;
|
module.exports = ((ListView: any): Class<InternalListViewType<Props>>);
|
||||||
|
@ -138,6 +138,7 @@ class MetroListView extends React.Component<Props, $FlowFixMeState> {
|
|||||||
}
|
}
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
|
// $FlowFixMe Found when typing ListView
|
||||||
<ListView
|
<ListView
|
||||||
{...this.props}
|
{...this.props}
|
||||||
dataSource={this.state.ds}
|
dataSource={this.state.ds}
|
||||||
@ -170,6 +171,7 @@ class MetroListView extends React.Component<Props, $FlowFixMeState> {
|
|||||||
} else {
|
} else {
|
||||||
invariant(!props.sections, 'Cannot have both sections and items props.');
|
invariant(!props.sections, 'Cannot have both sections and items props.');
|
||||||
return {
|
return {
|
||||||
|
// $FlowFixMe Found when typing ListView
|
||||||
ds: state.ds.cloneWithRows(props.items),
|
ds: state.ds.cloneWithRows(props.items),
|
||||||
sectionHeaderData,
|
sectionHeaderData,
|
||||||
};
|
};
|
||||||
|
@ -284,6 +284,7 @@ class SectionList<SectionT: SectionBase<any>> extends React.PureComponent<
|
|||||||
*/
|
*/
|
||||||
recordInteraction() {
|
recordInteraction() {
|
||||||
const listRef = this._wrapperListRef && this._wrapperListRef.getListRef();
|
const listRef = this._wrapperListRef && this._wrapperListRef.getListRef();
|
||||||
|
// $FlowFixMe Found when typing ListView
|
||||||
listRef && listRef.recordInteraction();
|
listRef && listRef.recordInteraction();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user