diff options
author | Paul Frazee <pfrazee@gmail.com> | 2023-11-15 14:39:22 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-15 14:39:22 -0800 |
commit | d5ea31920caa2eade6015ad59122f06a8b280ab9 (patch) | |
tree | 59b5b1a7817bbb7315bf8cfea80911a3d875a6c0 /src/view/com/composer/text-input/mobile/Autocomplete.tsx | |
parent | 839e8e8d0ade22ce47678229a98fe602c31601c3 (diff) | |
download | voidsky-d5ea31920caa2eade6015ad59122f06a8b280ab9.tar.zst |
Autocomplete updates (react-query refactor) (#1911)
* Unify the autocomplete code; drop fuse * Persist autocomplete results while they're in progress * Commit lockfile * Use ReturnType helper --------- Co-authored-by: Eric Bailey <git@esb.lol>
Diffstat (limited to 'src/view/com/composer/text-input/mobile/Autocomplete.tsx')
-rw-r--r-- | src/view/com/composer/text-input/mobile/Autocomplete.tsx | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/view/com/composer/text-input/mobile/Autocomplete.tsx b/src/view/com/composer/text-input/mobile/Autocomplete.tsx index 9ccd717fb..bb54a2042 100644 --- a/src/view/com/composer/text-input/mobile/Autocomplete.tsx +++ b/src/view/com/composer/text-input/mobile/Autocomplete.tsx @@ -1,4 +1,4 @@ -import React, {useEffect} from 'react' +import React, {useEffect, useRef} from 'react' import {Animated, TouchableOpacity, StyleSheet, View} from 'react-native' import {observer} from 'mobx-react-lite' import {useAnimatedValue} from 'lib/hooks/useAnimatedValue' @@ -7,6 +7,8 @@ import {Text} from 'view/com/util/text/Text' import {UserAvatar} from 'view/com/util/UserAvatar' import {useGrapheme} from '../hooks/useGrapheme' import {useActorAutocompleteQuery} from '#/state/queries/actor-autocomplete' +import {Trans} from '@lingui/macro' +import {AppBskyActorDefs} from '@atproto/api' export const Autocomplete = observer(function AutocompleteImpl({ prefix, @@ -19,7 +21,13 @@ export const Autocomplete = observer(function AutocompleteImpl({ const positionInterp = useAnimatedValue(0) const {getGraphemeString} = useGrapheme() const isActive = !!prefix - const {data: suggestions} = useActorAutocompleteQuery(prefix) + const {data: suggestions, isFetching} = useActorAutocompleteQuery(prefix) + const suggestionsRef = useRef< + AppBskyActorDefs.ProfileViewBasic[] | undefined + >(undefined) + if (suggestions) { + suggestionsRef.current = suggestions + } useEffect(() => { Animated.timing(positionInterp, { @@ -44,8 +52,8 @@ export const Autocomplete = observer(function AutocompleteImpl({ <Animated.View style={topAnimStyle}> {isActive ? ( <View style={[pal.view, styles.container, pal.border]}> - {suggestions?.length ? ( - suggestions.slice(0, 5).map(item => { + {suggestionsRef.current?.length ? ( + suggestionsRef.current.slice(0, 5).map(item => { // Eventually use an average length const MAX_CHARS = 40 const MAX_HANDLE_CHARS = 20 @@ -84,7 +92,11 @@ export const Autocomplete = observer(function AutocompleteImpl({ }) ) : ( <Text type="sm" style={[pal.text, pal.border, styles.noResults]}> - No result + {isFetching ? ( + <Trans>Loading...</Trans> + ) : ( + <Trans>No result</Trans> + )} </Text> )} </View> |