import { HeaderCenter, HeaderRight } from '@components/Header' import Timeline from '@components/Timelines/Timeline' import SegmentedControl from '@react-native-community/segmented-control' import { useNavigation } from '@react-navigation/native' import sharedScreens from '@screens/Shared/sharedScreens' import { getLocalActiveIndex, getRemoteUrl } from '@utils/slices/instancesSlice' import { useTheme } from '@utils/styles/ThemeManager' import React, { useCallback, useMemo, useState } from 'react' import { useTranslation } from 'react-i18next' import { Dimensions, Platform, StyleSheet } from 'react-native' import { createNativeStackNavigator } from 'react-native-screens/native-stack' import { TabView } from 'react-native-tab-view' import ViewPagerAdapter from 'react-native-tab-view-viewpager-adapter' import { useSelector } from 'react-redux' import analytics from './analytics' const Stack = createNativeStackNavigator< Nav.LocalStackParamList | Nav.RemoteStackParamList >() export interface Props { name: 'Local' | 'Public' } const Timelines: React.FC = ({ name }) => { const { t, i18n } = useTranslation() const remoteUrl = useSelector(getRemoteUrl) const mapNameToContent: { [key: string]: { title: string; page: App.Pages }[] } = { Local: [ { title: t('local:heading.segments.left'), page: 'Following' }, { title: t('local:heading.segments.right'), page: 'Local' } ], Public: [ { title: t('public:heading.segments.left'), page: 'LocalPublic' }, { title: remoteUrl, page: 'RemotePublic' } ] } const navigation = useNavigation() const localActiveIndex = useSelector(getLocalActiveIndex) const onPressSearch = useCallback(() => { analytics('search_tap', { page: mapNameToContent[name][segment].page }) navigation.navigate(`Screen-${name}`, { screen: 'Screen-Shared-Search' }) }, []) const routes = mapNameToContent[name] .filter(p => (localActiveIndex !== null ? true : p.page === 'RemotePublic')) .map(p => ({ key: p.page })) const renderScene = useCallback( ({ route }: { route: { key: App.Pages } }) => { return ( (localActiveIndex !== null || route.key === 'RemotePublic') && ( ) ) }, [localActiveIndex] ) const { mode } = useTheme() const [segment, setSegment] = useState(0) const screenOptions = useMemo(() => { if (localActiveIndex === null) { if (name === 'Public') { return { headerTitle: remoteUrl, ...(Platform.OS === 'android' && { headerCenter: () => }) } } } else { return { headerCenter: () => ( p.title)} selectedIndex={segment} onChange={({ nativeEvent }) => setSegment(nativeEvent.selectedSegmentIndex) } style={styles.segmentsContainer} /> ), headerRight: () => ( ) } } }, [localActiveIndex, mode, segment, i18n.language]) const renderPager = useCallback(props => , []) return ( {() => ( null} onIndexChange={index => setSegment(index)} navigationState={{ index: segment, routes }} initialLayout={{ width: Dimensions.get('screen').width }} /> )} {sharedScreens(Stack)} ) } const styles = StyleSheet.create({ segmentsContainer: { flexBasis: '65%' } }) export default React.memo(Timelines, () => true)