import {memo} from 'react' import {TouchableOpacity, View, type ViewStyle} from 'react-native' import {useLingui} from '@lingui/react/macro' import {useModerationOpts} from '#/state/preferences/moderation-opts' import {SearchProfileCard} from '#/screens/Search/components/SearchProfileCard' import {atoms as a, native, useTheme} from '#/alf' import {type AutocompleteItem} from '#/components/Autocomplete' import * as Layout from '#/components/Layout' import {Link} from '#/components/Link' import {Loader} from '#/components/Loader' import {Text} from '#/components/Typography' import {useAnalytics} from '#/analytics' import {IS_NATIVE} from '#/env' import type * as bsky from '#/types/bsky' let AutocompleteResults = ({ items, isFetching, searchText, onSubmit, onResultPress, onProfileClick, }: { items: AutocompleteItem[] isFetching: boolean searchText: string onSubmit: () => void onResultPress: () => void onProfileClick: (profile: bsky.profile.AnyProfileView) => void }): React.ReactNode => { const ax = useAnalytics() const {t: l} = useLingui() const moderationOpts = useModerationOpts() return ( <> {(isFetching && !items.length) || !moderationOpts ? ( ) : ( {items.map((item, index) => { if (item.type !== 'profile') return null return ( { ax.metric('search:autocomplete:press', { profileDid: item.profile.did, position: index, }) onProfileClick(item.profile) onResultPress() }} /> ) })} )} ) } AutocompleteResults = memo(AutocompleteResults) export {AutocompleteResults} let SearchLinkCard = ({ label, to, onPress, style, }: { label: string to?: string onPress?: () => void style?: ViewStyle }): React.ReactNode => { const t = useTheme() const inner = ( {label} ) if (onPress) { return ( {inner} ) } if (to) { return ( {inner} ) } return inner }