try using downshift

This commit is contained in:
Samuel Newman
2025-08-06 21:05:38 +03:00
parent 48c53603d8
commit a06b58e831
3 changed files with 45 additions and 18 deletions
+1
View File
@@ -127,6 +127,7 @@
"bcp-47-match": "^2.0.3",
"date-fns": "^2.30.0",
"deprecated-react-native-prop-types": "^5.0.0",
"downshift": "^9.0.10",
"email-validator": "^2.0.4",
"emoji-mart": "^5.5.2",
"emoji-regex": "^10.4.0",
+17 -12
View File
@@ -1,4 +1,4 @@
import {useDeferredValue, useRef, useState} from 'react'
import {useDeferredValue, useMemo, useRef, useState} from 'react'
import {
ActivityIndicator,
type StyleProp,
@@ -9,6 +9,7 @@ import {
import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
import {StackActions, useNavigation} from '@react-navigation/native'
import {useCombobox} from 'downshift'
import {type NavigationProp} from '#/lib/routes/types'
import {useModerationOpts} from '#/state/preferences/moderation-opts'
@@ -54,9 +55,7 @@ export function DesktopSearch() {
const {_} = useLingui()
const t = useTheme()
const navigation = useNavigation<NavigationProp>()
const searchInputRef = useRef<TextInput>(null)
const [isFocused, setIsFocused] = useState(false)
const [query, setQuery] = useState('')
const deferredQuery = useDeferredValue(query)
const {data: autocompleteData, isFetching} = useActorAutocompleteQuery(
@@ -64,11 +63,18 @@ export function DesktopSearch() {
true,
)
const moderationOpts = useModerationOpts()
const items = useMemo(() => {
if (deferredQuery.length === 0) return []
return ['__TEXT__', ...(autocompleteData || [])]
}, [deferredQuery, autocompleteData])
const onChangeText = (text: string) => {
setQuery(text)
}
const {getInputProps, isOpen} = useCombobox({
items,
getItemId: index =>
typeof items[index] === 'string' ? items[index] : items[index].did,
})
const moderationOpts = useModerationOpts()
const onPressCancelSearch = () => {
setQuery('')
@@ -89,19 +95,18 @@ export function DesktopSearch() {
setQuery('')
}
console.log(getInputProps())
return (
<View style={[a.w_full, a.z_10]}>
<SearchInput
ref={searchInputRef}
value={query}
onChangeText={onChangeText}
onClearText={onPressCancelSearch}
onEscape={onEscape}
onSubmitEditing={onSubmit}
onFocus={() => setIsFocused(true)}
onBlur={() => setIsFocused(false)}
{...getInputProps()}
/>
{(deferredQuery !== '' || isFocused) && moderationOpts && (
{isOpen && moderationOpts && (
<View style={[a.w_full]}>
<View
style={[
+27 -6
View File
@@ -3252,6 +3252,11 @@
dependencies:
regenerator-runtime "^0.14.0"
"@babel/runtime@^7.24.5":
version "7.28.2"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.2.tgz#2ae5a9d51cc583bd1f5673b3bb70d6d819682473"
integrity sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==
"@babel/runtime@^7.25.0", "@babel/runtime@^7.26.0":
version "7.26.0"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1"
@@ -9523,6 +9528,11 @@ compression@^1.7.4:
safe-buffer "5.1.2"
vary "~1.1.2"
compute-scroll-into-view@^3.1.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-3.1.1.tgz#02c3386ec531fb6a9881967388e53e8564f3e9aa"
integrity sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
@@ -10334,6 +10344,17 @@ dotenv@^16.4.4, dotenv@^16.4.5, dotenv@~16.4.5:
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f"
integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==
downshift@^9.0.10:
version "9.0.10"
resolved "https://registry.yarnpkg.com/downshift/-/downshift-9.0.10.tgz#44e4d34bba63c1b7cd5a41ea4bead1b569ae061c"
integrity sha512-TP/iqV6bBok6eGD5tZ8boM8Xt7/+DZvnVNr8cNIhbAm2oUBd79Tudiccs2hbcV9p7xAgS/ozE7Hxy3a9QqS6Mw==
dependencies:
"@babel/runtime" "^7.24.5"
compute-scroll-into-view "^3.1.0"
prop-types "^15.8.1"
react-is "18.2.0"
tslib "^2.6.2"
dunder-proto@^1.0.0, dunder-proto@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a"
@@ -16757,6 +16778,11 @@ react-image-crop@^11.0.7:
resolved "https://registry.yarnpkg.com/react-image-crop/-/react-image-crop-11.0.7.tgz#25f3d37ccbb65a05d19d23b4740a5912835c741e"
integrity sha512-ZciKWHDYzmm366JDL18CbrVyjnjH0ojufGDmScfS4ZUqLHg4nm6ATY+K62C75W4ZRNt4Ii+tX0bSjNk9LQ2xzQ==
react-is@18.2.0, react-is@^18.0.0:
version "18.2.0"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
react-is@19, react-is@^19.0.0, react-is@^19.1.0:
version "19.1.0"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.1.0.tgz#805bce321546b7e14c084989c77022351bbdd11b"
@@ -16767,11 +16793,6 @@ react-is@^16.13.1, react-is@^16.7.0:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
react-is@^18.0.0:
version "18.2.0"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
react-keyed-flatten-children@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/react-keyed-flatten-children/-/react-keyed-flatten-children-5.0.0.tgz#3024fc8819f7b60fc5039b527f133d9ac3a02a82"
@@ -19004,7 +19025,7 @@ tsconfig-paths@^3.15.0:
minimist "^1.2.6"
strip-bom "^3.0.0"
tslib@2:
tslib@2, tslib@^2.6.2:
version "2.8.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==