import React, { HTMLAttributes, useCallback, useState } from 'react'; import { Autocomplete, AutocompleteChangeReason, AutocompleteRenderOptionState, Button, Container, Dialog, FormControl, IconButton, InputBase, InputLabel, ListItem, Select, Stack, styled, TextField, Typography, } from '@mui/material'; import { FiX } from 'react-icons/fi'; import { blueGrey } from '@mui/material/colors'; import { useSnackbar } from 'notistack'; import { useDebounce } from 'react-use'; import { searchUsers } from '../firebase/firestore'; import { User } from '@nirvana/core/src/models/user.model'; import useAuth from '../providers/AuthProvider'; import UserDetailRow from '../subcomponents/UserDetailRow'; export default function NewConversationDialog({ open, handleClose, }: { open: boolean; handleClose: () => void; }) { const { enqueueSnackbar } = useSnackbar(); const { user } = useAuth(); const [searchVal, setSearchVal] = useState(''); const [searchUsersResults, setSearchUsersResults] = useState([]); const [searching, setSearching] = useState(false); const [selectedUsers, setSelectedUsers] = useState([]); const handleChangeSelections = useCallback( (e: React.SyntheticEvent, value: User[], reason: AutocompleteChangeReason) => { const newUsers: User[] = []; value.forEach((val) => { if (typeof val !== 'string') return; newUsers.push(val); }); console.log(value); console.log(newUsers); setSelectedUsers(newUsers); }, [], ); const [, cancel] = useDebounce( async () => { if (searchVal) { enqueueSnackbar('searching...', { variant: 'info' }); let results = await searchUsers(searchVal); results = results.filter((userResult) => userResult.id !== user.uid); setSearchUsersResults(results); console.warn('searched users', results); } setSearching(false); }, 1000, [searchVal, enqueueSnackbar, setSearchUsersResults, user], ); const handleChangeSearchInput = useCallback( (e: React.ChangeEvent, newValue: string) => { setSearching(true); setSearchVal(newValue); }, [setSearching, setSearchVal], ); const handleSubmit = useCallback(() => { try { // } catch (error) { // } handleClose(); }, [handleClose]); const renderOption = useCallback( (props: HTMLAttributes, option: User, state: AutocompleteRenderOptionState) => ( ), [], ); return ( (typeof option === 'string' ? option : option.displayName)} value={selectedUsers} onChange={handleChangeSelections} filterSelectedOptions filterOptions={(options) => options} inputValue={searchVal} renderInput={(params) => ( )} /> ); }