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 { Dimensions, Platform, StyleSheet, View } 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' const Stack = createNativeStackNavigator< Nav.LocalStackParamList | Nav.RemoteStackParamList >() export interface Props { name: 'Local' | 'Public' content: { title: string; page: App.Pages; remote?: boolean }[] } const Timelines: React.FC = ({ name, content }) => { const remoteUrl = useSelector(getRemoteUrl) const navigation = useNavigation() const { mode } = useTheme() const localActiveIndex = useSelector(getLocalActiveIndex) const publicDomain = useSelector(getRemoteUrl) const [segment, setSegment] = useState(0) const onPressSearch = useCallback(() => { navigation.navigate(`Screen-${name}`, { screen: 'Screen-Shared-Search' }) }, []) const routes = content .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 screenOptions = useMemo(() => { if (localActiveIndex === null) { if (name === 'Public') { return { headerTitle: publicDomain, ...(Platform.OS === 'android' && { headerCenter: () => }) } } } else { return { headerCenter: () => ( setSegment(nativeEvent.selectedSegmentIndex) } /> ), headerRight: () => ( ) } } }, [localActiveIndex, mode, segment]) 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)