import { HeaderCenter, HeaderLeft } from '@components/Header' import { ParseEmojis } from '@components/Parse' import { StackNavigationState, TypedNavigator } from '@react-navigation/native' import { StackScreenProps } from '@react-navigation/stack' import ScreenSharedAccount from '@screens/Shared/Account' import ScreenSharedAnnouncements from '@screens/Shared/Announcements' import Compose from '@screens/Shared/Compose' import ScreenSharedHashtag from '@screens/Shared/Hashtag' import ScreenSharedImagesViewer from '@screens/Shared/ImagesViewer' import ScreenSharedRelationships from '@screens/Shared/Relationships' import ScreenSharedSearch from '@screens/Shared/Search' import ScreenSharedToot from '@screens/Shared/Toot' import { StyleConstants } from '@utils/styles/constants' import { useTheme } from '@utils/styles/ThemeManager' import { debounce } from 'lodash' import React, { useCallback, useState } from 'react' import { useTranslation } from 'react-i18next' import { Platform, StyleSheet, Text, View } from 'react-native' import { TextInput } from 'react-native-gesture-handler' import { NativeStackNavigationOptions } from 'react-native-screens/lib/typescript' import { NativeStackNavigationEventMap, NativeStackNavigatorProps } from 'react-native-screens/lib/typescript/types' import ScreenSharedAttachments from './Attachments' export type BaseScreens = | Nav.LocalStackParamList | Nav.RemoteStackParamList | Nav.NotificationsStackParamList | Nav.MeStackParamList export type SharedAccountProp = StackScreenProps< BaseScreens, 'Screen-Shared-Account' > export type SharedAnnouncementsProp = StackScreenProps< BaseScreens, 'Screen-Shared-Announcements' > export type SharedAttachmentsProp = StackScreenProps< BaseScreens, 'Screen-Shared-Attachments' > export type SharedComposeProp = StackScreenProps< BaseScreens, 'Screen-Shared-Compose' > export type SharedHashtagProp = StackScreenProps< BaseScreens, 'Screen-Shared-Hashtag' > export type SharedImagesViewerProp = StackScreenProps< BaseScreens, 'Screen-Shared-ImagesViewer' > export type SharedRelationshipsProp = StackScreenProps< BaseScreens, 'Screen-Shared-Relationships' > export type SharedSearchProp = StackScreenProps< BaseScreens, 'Screen-Shared-Search' > export type SharedTootProp = StackScreenProps const sharedScreens = ( Stack: TypedNavigator< BaseScreens, StackNavigationState>, NativeStackNavigationOptions, NativeStackNavigationEventMap, ({ initialRouteName, children, screenOptions, ...rest }: NativeStackNavigatorProps) => JSX.Element > ) => { const { theme } = useTheme() const { t } = useTranslation() const [searchTerm, setSearchTerm] = useState() const onChangeText = useCallback( debounce(text => setSearchTerm(text), 1000, { trailing: true }), [] ) return [ { return { headerTranslucent: true, headerStyle: { backgroundColor: `rgba(255, 255, 255, 0)` }, headerCenter: () => null, headerLeft: () => navigation.goBack()} /> } }} />, , { return { headerLeft: () => navigation.goBack()} />, headerCenter: () => ( {' '} 的媒体 ) } }} />, , ({ title: `#${decodeURIComponent(route.params.hashtag)}`, headerLeft: () => navigation.goBack()} /> })} />, , ({ headerLeft: () => navigation.goBack()} /> })} />, ({ headerLeft: () => navigation.goBack()} />, // https://github.com/react-navigation/react-navigation/issues/6746#issuecomment-583897436 headerCenter: () => ( } /> setSearchTerm(text) } placeholder={t('sharedSearch:content.header.placeholder')} placeholderTextColor={theme.secondary} returnKeyType='go' /> ) })} > {() => } , ({ headerTitle: t('sharedToot:heading'), ...(Platform.OS === 'android' && { headerCenter: () => }), headerLeft: () => navigation.goBack()} /> })} /> ] } const styles = StyleSheet.create({ searchBar: { flexBasis: '80%', flexDirection: 'row', alignItems: 'center' }, textInput: { fontSize: StyleConstants.Font.Size.M } }) export default sharedScreens