import * as React from 'react'; import { StyleSheet, View, Text, FlatList, ListRenderItem, TouchableOpacity } from 'react-native'; import { RouteContentProps, RouteViewPortal, RenderNavItem, NavBarAppearancePresets } from 'react-native-ios-navigator'; import { ListItemObject, LIST_ITEMS } from './Constants'; import { ListItem } from './ListItem'; import { RouteHeader } from './RouteHeader'; import * as Colors from '../../constants/Colors'; import type { onChangeSelectedItemTypeIndex } from './ItemTypesMenu'; type NavigatorShowcase03State = { items: ListItemObject[], isMenuExpanded: boolean; selectedItemTypeIndex: number | null; }; export class NavigatorShowcase03 extends React.Component { routeHeaderRef: RouteHeader; constructor(props){ super(props); this.state = { items: LIST_ITEMS, isMenuExpanded: false, selectedItemTypeIndex: null }; }; _handleOnChangeSelectedItemTypeIndex: onChangeSelectedItemTypeIndex = (selectedItemType, index) => { const state = this.state; const didIndexChange = (state.selectedItemTypeIndex !== index); this.setState(didIndexChange? { selectedItemTypeIndex: index, items: LIST_ITEMS.filter(item => ( item.itemType === selectedItemType )), }:{ selectedItemTypeIndex: null, items: LIST_ITEMS }); this.setState({ selectedItemTypeIndex: didIndexChange ? index : null, }); }; _handleKeyExtractor = (item: ListItemObject) => { return `id:${item.id}`; }; _renderNavBarTitle: RenderNavItem = () => { const { items } = this.state; return ( {`Showing ${items.length} Items`} ); }; _renderNavBarRightItem: RenderNavItem = () => { const state = this.state; return ( { const isExpanded = !state.isMenuExpanded; this.routeHeaderRef.setMenuVisibility(isExpanded); this.setState({ isMenuExpanded: isExpanded, }); }} > {state.isMenuExpanded? '⬆️' : '⬇️'} ); }; _renderRouteHeader = () => { const state = this.state; return ( { this.routeHeaderRef = r! }} onChangeSelectedItemTypeIndex={this._handleOnChangeSelectedItemTypeIndex} selectedItemTypeIndex={state.selectedItemTypeIndex} isMenuExpanded={state.isMenuExpanded} /> ); }; _renderListItem: ListRenderItem = ({item}) => { return ( ); }; render(){ return( ); }; }; const styles = StyleSheet.create({ list: { }, listContentContainer: { }, navBarTitleContainer: { }, textNavBarTitle: { color: Colors.PURPLE.A700, fontSize: 14, fontWeight: '600', }, navBarRightItemLabel: { fontSize: 17, }, });