import React from 'react' import {TextInput, View, StyleSheet, TouchableOpacity} from 'react-native' import {useNavigation, StackActions} from '@react-navigation/native' import {UserAutocompleteModel} from 'state/models/discovery/user-autocomplete' import {observer} from 'mobx-react-lite' import {useStores} from 'state/index' import {usePalette} from 'lib/hooks/usePalette' import {MagnifyingGlassIcon2} from 'lib/icons' import {NavigationProp} from 'lib/routes/types' import {ProfileCard} from 'view/com/profile/ProfileCard' import {Text} from 'view/com/util/text/Text' export const DesktopSearch = observer(function DesktopSearch() { const store = useStores() const pal = usePalette('default') const textInput = React.useRef(null) const [isInputFocused, setIsInputFocused] = React.useState(false) const [query, setQuery] = React.useState('') const autocompleteView = React.useMemo( () => new UserAutocompleteModel(store), [store], ) const navigation = useNavigation() const onChangeQuery = React.useCallback( (text: string) => { setQuery(text) if (text.length > 0 && isInputFocused) { autocompleteView.setActive(true) autocompleteView.setPrefix(text) } else { autocompleteView.setActive(false) } }, [setQuery, autocompleteView, isInputFocused], ) const onPressCancelSearch = React.useCallback(() => { setQuery('') autocompleteView.setActive(false) }, [setQuery, autocompleteView]) const onSubmit = React.useCallback(() => { navigation.dispatch(StackActions.push('Search', {q: query})) autocompleteView.setActive(false) }, [query, navigation, autocompleteView]) return ( setIsInputFocused(true)} onBlur={() => setIsInputFocused(false)} onChangeText={onChangeQuery} onSubmitEditing={onSubmit} /> {query ? ( Cancel ) : undefined} {query !== '' && ( {autocompleteView.searchRes.length ? ( <> {autocompleteView.searchRes.map((item, i) => ( ))} ) : ( No results found for {autocompleteView.prefix} )} )} ) }) const styles = StyleSheet.create({ container: { position: 'relative', width: 300, }, search: { paddingHorizontal: 16, paddingVertical: 2, width: 300, borderRadius: 20, }, inputContainer: { flexDirection: 'row', }, iconWrapper: { position: 'relative', top: 2, paddingVertical: 7, marginRight: 8, }, input: { flex: 1, fontSize: 18, width: '100%', paddingTop: 7, paddingBottom: 7, }, cancelBtn: { paddingRight: 4, paddingLeft: 10, paddingVertical: 7, }, resultsContainer: { // @ts-ignore supported by web // position: 'fixed', marginTop: 10, flexDirection: 'column', width: 300, borderWidth: 1, borderRadius: 6, paddingVertical: 4, }, noResults: { textAlign: 'center', paddingVertical: 10, }, })