import {useDeferredValue, useRef, useState} from 'react' import { ActivityIndicator, type StyleProp, type TextInput, View, type ViewStyle, } from 'react-native' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {StackActions, useNavigation} from '@react-navigation/native' import {type NavigationProp} from '#/lib/routes/types' import {useModerationOpts} from '#/state/preferences/moderation-opts' import {useActorAutocompleteQuery} from '#/state/queries/actor-autocomplete' import {SearchProfileCard} from '#/screens/Search/components/SearchProfileCard' import {atoms as a, useTheme} from '#/alf' import {SearchInput} from '#/components/forms/SearchInput' import {MagnifyingGlass2_Stroke2_Corner0_Rounded as SearchIcon} from '#/components/icons/MagnifyingGlass2' import {Link, type LinkProps} from '#/components/Link' import {Text} from '#/components/Typography' function SearchLinkCard({ label, to, style, }: { label: string to: LinkProps['to'] style?: StyleProp }) { const t = useTheme() return ( {({focused, hovered, pressed}) => ( {label} )} ) } export function DesktopSearch() { const {_} = useLingui() const t = useTheme() const navigation = useNavigation() const searchInputRef = useRef(null) const [isFocused, setIsFocused] = useState(false) const [query, setQuery] = useState('') const deferredQuery = useDeferredValue(query) const {data: autocompleteData, isFetching} = useActorAutocompleteQuery( deferredQuery, true, ) const moderationOpts = useModerationOpts() const onChangeText = (text: string) => { setQuery(text) } const onPressCancelSearch = () => { setQuery('') } const onEscape = () => { setQuery('') searchInputRef.current?.blur() } const onSubmit = () => { if (!deferredQuery.length) return navigation.dispatch(StackActions.push('Search', {q: deferredQuery})) setQuery('') } const onSearchProfileCardPress = () => { setQuery('') } return ( setIsFocused(true)} onBlur={() => setIsFocused(false)} /> {(deferredQuery !== '' || isFocused) && moderationOpts && ( {deferredQuery.length === 0 ? ( Start typing to search ) : ( <> 0 || isFetching) && a.border_b, ]} /> {isFetching && !autocompleteData?.length ? ( ) : ( autocompleteData?.map(item => ( )) )} )} )} ) }