diff --git a/packages/rn-tester/js/examples/SectionList/SectionListExample.js b/packages/rn-tester/js/examples/SectionList/SectionListExample.js index 622226b38f..8c10c79ac2 100644 --- a/packages/rn-tester/js/examples/SectionList/SectionListExample.js +++ b/packages/rn-tester/js/examples/SectionList/SectionListExample.js @@ -33,16 +33,50 @@ const { StyleSheet, Text, View, + SectionList, } = require('react-native'); -import type {Item} from '../../components/ListExampleShared'; - const VIEWABILITY_CONFIG = { minimumViewTime: 3000, viewAreaCoveragePercentThreshold: 100, waitForInteraction: true, }; +const CONSTANT_SECTION_EXAMPLES = [ + { + key: 'empty section', + data: [], + }, + { + renderItem: renderStackedItem, + key: 's1', + data: [ + { + title: 'Item In Header Section', + text: 'Section s1', + key: 'header item', + }, + ], + }, + { + key: 's2', + data: [ + { + noImage: true, + title: '1st item', + text: 'Section s2', + key: 'noimage0', + }, + { + noImage: true, + title: '2nd item', + text: 'Section s2', + key: 'noimage1', + }, + ], + }, +]; + const renderSectionHeader = ({section}) => ( SECTION HEADER: {section.key} @@ -73,195 +107,92 @@ const EmptySectionList = () => ( ); -class SectionListExample extends React.PureComponent<{...}, $FlowFixMeState> { - state: - | any - | {| - data: Array, - debug: boolean, - filterText: string, - inverted: boolean, - logViewable: boolean, - virtualized: boolean, - |} = { - data: genItemData(1000), - debug: false, - filterText: '', - logViewable: false, - virtualized: true, - inverted: false, +const renderItemComponent = setItemState => ({item, separators}) => { + if (isNaN(item.key)) { + return; + } + const onPress = () => { + const updatedItem = pressItem(item); + setItemState(updatedItem); }; - _scrollPos = new Animated.Value(0); - _scrollSinkY = Animated.event( - [{nativeEvent: {contentOffset: {y: this._scrollPos}}}], - {useNativeDriver: true}, - ); - - _sectionListRef: ?React.ElementRef = null; - _captureRef = ref => { - this._sectionListRef = ref; - }; - - _scrollToLocation(sectionIndex: number, itemIndex: number) { - this._sectionListRef && - this._sectionListRef.scrollToLocation({sectionIndex, itemIndex}); - } - - _setBooleanValue: string => boolean => void = key => value => - this.setState({[key]: value}); - - render(): React.Node { - const filterRegex = new RegExp(String(this.state.filterText), 'i'); - const filter = item => - filterRegex.test(item.text) || filterRegex.test(item.title); - const filteredData = this.state.data.filter(filter); - const filteredSectionData = []; - let startIndex = 0; - const endIndex = filteredData.length - 1; - for (let ii = 10; ii <= endIndex + 10; ii += 10) { - filteredSectionData.push({ - key: `${filteredData[startIndex].key} - ${ - filteredData[Math.min(ii - 1, endIndex)].key - }`, - data: filteredData.slice(startIndex, ii), - }); - startIndex = ii; - } - return ( - - - { - this.setState(() => ({filterText})); - }} - placeholder="Search..." - value={this.state.filterText} - /> - - {renderSmallSwitchOption( - 'virtualized', - this.state.virtualized, - this._setBooleanValue('virtualized'), - )} - {renderSmallSwitchOption( - 'Log Viewable', - this.state.logViewable, - this._setBooleanValue('logViewable'), - )} - {renderSmallSwitchOption( - 'Debug', - this.state.debug, - this._setBooleanValue('debug'), - )} - {renderSmallSwitchOption( - 'Inverted', - this.state.inverted, - this._setBooleanValue('inverted'), - )} - - - - scroll to: -