Rev 1456 | Rev 2076 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useState } from 'react'
import { useDispatch } from 'react-redux'
import {
Avatar,
List,
ListItem,
ListItemAvatar,
ListItemButton,
ListItemText
} from '@mui/material'
import { axios, debounce } from 'utils/index'
import { addNotification } from '../../redux/notification/notification.actions'
import Modal from 'components/UI/modal/Modal'
import TextInput from 'components/UI/inputs/TextInput'
const ContactsModal = ({ show, onClose, onComplete }) => {
const [contacts, setContacts] = useState([])
const dispatch = useDispatch()
const closeModal = () => {
setContacts([])
onClose()
}
const handleSearch = debounce((value) => getContacts(value), 500)
const getContacts = (searchValue = '') => {
axios
.get(`/chat/users?search=${searchValue.toLowerCase()}`)
.then(({ data: response }) => {
if (!response.success) {
return dispatch(
addNotification({ style: 'danger', msg: 'Ha ocurrido un error' })
)
}
setContacts(response.data)
})
}
const startConversation = ({ link_open_or_create, link_send }) => {
axios
.post(link_open_or_create)
.then(({ data: response }) => {
if (response.success) {
closeModal()
onComplete(link_send)
}
})
}
return (
<Modal
show={show}
title='Iniciar conversación'
onClose={closeModal}
showFooter={false}
>
<TextInput
label='Escribe el nombre'
name='search-contact'
type='text'
placeholder='Escribe el nombre de la persona'
onChange={(e) => handleSearch(e.target.value)}
/>
<List sx={{ width: '100%' }}>
{contacts.map((user) => {
const { image, name } = user
return (
<ListItem key={name} disablePadding disableRipple>
<ListItemButton
disableRipple
onClick={() => startConversation(user)}
>
<ListItemAvatar>
<Avatar alt={`${name} image`} src={image} />
</ListItemAvatar>
<ListItemText primary={name} />
</ListItemButton>
</ListItem>
)
})}
</List>
</Modal>
)
}
export default ContactsModal