import _ from 'lodash'; import React, {Component} from 'react'; import {ActivityIndicator, StyleSheet} from 'react-native'; import { Assets, TabController, Colors, View, Text, Button, TabControllerItemProps, TabControllerImperativeMethods } from 'react-native-ui-lib'; import Tab1 from './tab1'; import Tab2 from './tab2'; import Tab3 from './tab3'; const TABS = ['Home', 'Posts', 'Reviews', 'Videos', 'Photos', 'Events', 'About', 'Community', 'Groups', 'Offers']; interface State { asCarousel: boolean; centerSelected: boolean; fewItems: boolean; initialIndex: number; selectedIndex: number; key: string | number; items: TabControllerItemProps[]; } class TabControllerScreen extends Component<{}, State> { constructor(props: {}) { super(props); this.state = { asCarousel: true, centerSelected: false, fewItems: false, initialIndex: 0, selectedIndex: 0, key: Date.now(), items: this.generateTabItems(false) }; } tabController = React.createRef(); generateTabItems = (fewItems = this.state.fewItems): TabControllerItemProps[] => { // @ts-expect-error const items: TabControllerItemProps[] = _.flow(tabs => _.take(tabs, fewItems ? 3 : TABS.length), (tabs: TabControllerItemProps[]) => _.map(tabs, (tab: TabControllerItemProps, index: number) => ({ label: tab, key: tab, icon: index === 2 ? Assets.icons.demo.dashboard : undefined, badge: index === 5 ? {label: '2'} : undefined, leadingAccessory: index === 3 ? {Assets.emojis.movie_camera} : undefined, trailingAccessory: index === 4 ? {Assets.emojis.camera} : undefined })))(TABS); const addItem: TabControllerItemProps & {key: string} = { icon: Assets.icons.demo.add, key: 'add', ignore: true, width: 60, onPress: this.onAddItem }; return fewItems ? items : [...items, addItem]; }; componentDidMount() { // this.slow(); } slow() { setTimeout(() => { _.times(5000, () => { console.log('slow log'); }); this.slow(); }, 10); } setTab = () => { this.tabController.current?.setTab(2); }; onAddItem = () => { const {items} = this.state; let newItems = items.slice(0, -1) as TabControllerItemProps[]; newItems = [...newItems, {label: `New Item # ${newItems.length + 1}`}, items[items.length - 1]]; this.setState({items: newItems}); }; toggleItemsCount = () => { const {fewItems} = this.state; const items = this.generateTabItems(!fewItems); this.setState({fewItems: !fewItems, items, key: Date.now()}); }; toggleCarouselMode = () => { this.setState({ asCarousel: !this.state.asCarousel, key: this.state.asCarousel ? 'asCarousel' : 'staticPages' }); }; toggleCenterSelected = () => { const {fewItems, centerSelected} = this.state; this.setState({ items: this.generateTabItems(fewItems), centerSelected: !centerSelected, key: Date.now() }); }; onChangeIndex = (selectedIndex: number) => { this.setState({selectedIndex}); }; renderLoadingPage() { return ( Loading ); } renderTabPages() { const {asCarousel, fewItems} = this.state; const Container = asCarousel ? TabController.PageCarousel : View; const containerProps = asCarousel ? {} : {flex: true}; return ( {!fewItems && _.map(_.takeRight(TABS, TABS.length - 3), (title, index) => { return ( {title} ); })} ); } render() { const {key, initialIndex, asCarousel, centerSelected, fewItems, items} = this.state; return ( {this.renderTabPages()}