mirror of
				https://github.com/tooot-app/app
				synced 2025-06-05 22:19:13 +02:00 
			
		
		
		
	Try to fix search bar issue
https://github.com/react-navigation/react-navigation/issues/6746#issuecomment-583897436
This commit is contained in:
		| @@ -52,7 +52,7 @@ const TimelineContent: React.FC<Props> = ({ | ||||
|           emojis={status.emojis} | ||||
|           mentions={status.mentions} | ||||
|           tags={status.tags} | ||||
|           numberOfLines={numberOfLines} | ||||
|           numberOfLines={highlighted ? 999 : numberOfLines} | ||||
|           disableDetails={disableDetails} | ||||
|         /> | ||||
|       )} | ||||
|   | ||||
| @@ -5,7 +5,6 @@ import TimelineDefault from '@root/components/Timelines/Timeline/Default' | ||||
| import hookSearch from '@utils/queryHooks/search' | ||||
| import { StyleConstants } from '@utils/styles/constants' | ||||
| import { useTheme } from '@utils/styles/ThemeManager' | ||||
| import { debounce } from 'lodash' | ||||
| import React, { useCallback, useEffect, useMemo, useState } from 'react' | ||||
| import { | ||||
|   KeyboardAvoidingView, | ||||
| @@ -16,53 +15,19 @@ import { | ||||
|   View | ||||
| } from 'react-native' | ||||
| import { Chase } from 'react-native-animated-spinkit' | ||||
| import { TextInput } from 'react-native-gesture-handler' | ||||
|  | ||||
| const ScreenSharedSearch: React.FC = () => { | ||||
| export interface Props { | ||||
|   searchTerm: string | undefined | ||||
| } | ||||
|  | ||||
| const ScreenSharedSearch: React.FC<Props> = ({ searchTerm }) => { | ||||
|   const navigation = useNavigation() | ||||
|   const { theme } = useTheme() | ||||
|   const [searchTerm, setSearchTerm] = useState<string | undefined>() | ||||
|   const { status, data, refetch } = hookSearch({ | ||||
|     term: searchTerm, | ||||
|     options: { enabled: false } | ||||
|   }) | ||||
|  | ||||
|   useEffect(() => { | ||||
|     const updateHeaderRight = () => | ||||
|       navigation.setOptions({ | ||||
|         headerCenter: () => ( | ||||
|           <View style={styles.searchBar}> | ||||
|             <Text | ||||
|               style={{ ...StyleConstants.FontStyle.M, color: theme.primary }} | ||||
|             > | ||||
|               搜索 | ||||
|             </Text> | ||||
|             <TextInput | ||||
|               style={[ | ||||
|                 styles.textInput, | ||||
|                 { | ||||
|                   color: theme.primary | ||||
|                 } | ||||
|               ]} | ||||
|               autoFocus | ||||
|               onChangeText={onChangeText} | ||||
|               autoCapitalize='none' | ||||
|               autoCorrect={false} | ||||
|               clearButtonMode='never' | ||||
|               keyboardType='web-search' | ||||
|               onSubmitEditing={({ nativeEvent: { text } }) => | ||||
|                 setSearchTerm(text) | ||||
|               } | ||||
|               placeholder={'些什么'} | ||||
|               placeholderTextColor={theme.secondary} | ||||
|               returnKeyType='go' | ||||
|             /> | ||||
|           </View> | ||||
|         ) | ||||
|       }) | ||||
|     return updateHeaderRight() | ||||
|   }, []) | ||||
|  | ||||
|   const [setctionData, setSectionData] = useState< | ||||
|     { title: string; data: any }[] | ||||
|   >([]) | ||||
| @@ -89,12 +54,6 @@ const ScreenSharedSearch: React.FC = () => { | ||||
|     [data] | ||||
|   ) | ||||
|  | ||||
|   const onChangeText = useCallback( | ||||
|     debounce(text => setSearchTerm(text), 1000, { | ||||
|       trailing: true | ||||
|     }), | ||||
|     [] | ||||
|   ) | ||||
|   useEffect(() => { | ||||
|     if (searchTerm) { | ||||
|       refetch() | ||||
| @@ -233,20 +192,8 @@ const styles = StyleSheet.create({ | ||||
|   base: { | ||||
|     minHeight: '100%' | ||||
|   }, | ||||
|   searchBar: { | ||||
|     flexBasis: '80%', | ||||
|     flexDirection: 'row', | ||||
|     alignItems: 'center' | ||||
|   }, | ||||
|   textInput: { | ||||
|     ...StyleConstants.FontStyle.M, | ||||
|     paddingLeft: StyleConstants.Spacing.XS, | ||||
|     marginBottom: | ||||
|       (StyleConstants.Font.LineHeight.M - StyleConstants.Font.Size.M) / 2 | ||||
|   }, | ||||
|   emptyBase: { | ||||
|     marginVertical: StyleConstants.Spacing.Global.PagePadding, | ||||
|     // paddingHorizontal: StyleConstants.Spacing.Global.PagePadding | ||||
|     alignItems: 'center' | ||||
|   }, | ||||
|   loading: { flex: 1, alignItems: 'center' }, | ||||
|   | ||||
| @@ -9,8 +9,13 @@ 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 React from 'react' | ||||
| 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 { StyleSheet, Text, View } from 'react-native' | ||||
| import { TextInput } from 'react-native-gesture-handler' | ||||
| import { NativeStackNavigationOptions } from 'react-native-screens/lib/typescript' | ||||
| import { | ||||
|   NativeStackNavigationEventMap, | ||||
| @@ -69,8 +74,17 @@ const sharedScreens = ( | ||||
|     }: NativeStackNavigatorProps) => JSX.Element | ||||
|   > | ||||
| ) => { | ||||
|   const { theme } = useTheme() | ||||
|   const { t } = useTranslation() | ||||
|  | ||||
|   const [searchTerm, setSearchTerm] = useState<string>() | ||||
|   const onChangeText = useCallback( | ||||
|     debounce(text => setSearchTerm(text), 1000, { | ||||
|       trailing: true | ||||
|     }), | ||||
|     [] | ||||
|   ) | ||||
|  | ||||
|   return [ | ||||
|     <Stack.Screen | ||||
|       key='Screen-Shared-Account' | ||||
| @@ -134,11 +148,42 @@ const sharedScreens = ( | ||||
|     <Stack.Screen | ||||
|       key='Screen-Shared-Search' | ||||
|       name='Screen-Shared-Search' | ||||
|       component={ScreenSharedSearch} | ||||
|       options={({ navigation }: any) => ({ | ||||
|         headerLeft: () => <HeaderLeft onPress={() => navigation.goBack()} /> | ||||
|         headerLeft: () => <HeaderLeft onPress={() => navigation.goBack()} />, | ||||
|         // https://github.com/react-navigation/react-navigation/issues/6746#issuecomment-583897436 | ||||
|         headerCenter: () => ( | ||||
|           <View style={styles.searchBar}> | ||||
|             <Text | ||||
|               style={{ ...StyleConstants.FontStyle.M, color: theme.primary }} | ||||
|             > | ||||
|               搜索 | ||||
|             </Text> | ||||
|             <TextInput | ||||
|               style={[ | ||||
|                 styles.textInput, | ||||
|                 { | ||||
|                   color: theme.primary | ||||
|                 } | ||||
|               ]} | ||||
|               autoFocus | ||||
|               onChangeText={onChangeText} | ||||
|               autoCapitalize='none' | ||||
|               autoCorrect={false} | ||||
|               clearButtonMode='never' | ||||
|               keyboardType='web-search' | ||||
|               onSubmitEditing={({ nativeEvent: { text } }) => | ||||
|                 setSearchTerm(text) | ||||
|               } | ||||
|               placeholder={'些什么'} | ||||
|               placeholderTextColor={theme.secondary} | ||||
|               returnKeyType='go' | ||||
|             /> | ||||
|           </View> | ||||
|         ) | ||||
|       })} | ||||
|     />, | ||||
|     > | ||||
|       {() => <ScreenSharedSearch searchTerm={searchTerm} />} | ||||
|     </Stack.Screen>, | ||||
|     <Stack.Screen | ||||
|       key='Screen-Shared-Toot' | ||||
|       name='Screen-Shared-Toot' | ||||
| @@ -151,4 +196,18 @@ const sharedScreens = ( | ||||
|   ] | ||||
| } | ||||
|  | ||||
| const styles = StyleSheet.create({ | ||||
|   searchBar: { | ||||
|     flexBasis: '80%', | ||||
|     flexDirection: 'row', | ||||
|     alignItems: 'center' | ||||
|   }, | ||||
|   textInput: { | ||||
|     ...StyleConstants.FontStyle.M, | ||||
|     paddingLeft: StyleConstants.Spacing.XS, | ||||
|     marginBottom: | ||||
|       (StyleConstants.Font.LineHeight.M - StyleConstants.Font.Size.M) / 2 | ||||
|   } | ||||
| }) | ||||
|  | ||||
| export default sharedScreens | ||||
|   | ||||
| @@ -3,13 +3,13 @@ const Base = 4 | ||||
| export const StyleConstants = { | ||||
|   Font: { | ||||
|     Size: { S: 14, M: 16, L: 18 }, | ||||
|     LineHeight: { S: 20, M: 22, L: 26 }, | ||||
|     LineHeight: { S: 20, M: 22, L: 30 }, | ||||
|     Weight: { Bold: '600' as '600' } | ||||
|   }, | ||||
|   FontStyle: { | ||||
|     S: { fontSize: 14, lineHeight: 20 }, | ||||
|     M: { fontSize: 16, lineHeight: 22 }, | ||||
|     L: { fontSize: 20, lineHeight: 26 } | ||||
|     L: { fontSize: 20, lineHeight: 30 } | ||||
|   }, | ||||
|  | ||||
|   Spacing: { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user