mirror of
https://github.com/tooot-app/app
synced 2025-04-15 02:42:04 +02:00
Try to fix search bar issue
https://github.com/react-navigation/react-navigation/issues/6746#issuecomment-583897436
This commit is contained in:
parent
541e2a5601
commit
fdce172c57
@ -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: {
|
||||
|
Loading…
x
Reference in New Issue
Block a user