import { Avatar } from 'components/avatar'; import { Card } from 'components/card'; import { ActivityIndicator, Col, Row, TouchableHighlight } from 'components/layout'; import { Text } from 'components/text'; import { TextField } from 'components/text-field'; import { useResponsiveLayout } from 'hooks'; import { SearchIcon } from 'icons'; import { FC, useCallback, useEffect, useRef, useState } from 'react'; import { useFastSearchUsersByStringQuery } from 'expo-schema'; const WAIT_TO_SEARCH = 500; export const Invite: FC = ({ participantId, setParticipantId }) => { const delayDebounceRef = useRef(null); const [queryString, setQueryString] = useState(''); const { data, refetch, loading } = useFastSearchUsersByStringQuery({ fetchPolicy: 'network-only', variables: { input: { queryString: '', }, }, }); const { isMobile } = useResponsiveLayout(); const outerHeight = isMobile ? undefined : 300; const maxHeight = isMobile ? undefined : 280; useEffect(() => { delayDebounceRef.current = setTimeout(() => { const isSearchable = queryString.length > 1; if (isSearchable) { refetch({ input: { queryString, }, }); } }, WAIT_TO_SEARCH); return () => clearTimeout(delayDebounceRef.current); }, [queryString, refetch]); const users = data?.fastSearchUsersByString; const isSelected = useCallback( (id) => { return participantId === id ? 'outline' : 'plain'; }, [participantId] ); const RightElement = () => (loading ? : ); return ( } /> {users?.map(({ firstName, userId, lastName }) => ( setParticipantId(userId)} > <> setParticipantId(userId)} size={38} status="online" colorVariant="base-01" shapeVariant="square" uri="https://avatars.githubusercontent.com/u/98377997" /> {firstName} {lastName} ))} ); }; type InviteType = { selected: string; participantId: string; setParticipantId: (value: string) => void; };