Rev 3434 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useEffect, useState } from 'react';import { connect } from 'react-redux';import {Avatar,List,ListItem,ListItemAvatar,ListItemButton,ListItemText} from '@mui/material';import { useDebounce } from '@hooks';import { getCurrentContacts, startConversation } from '@app/services/chats';import { addNotification } from '@app/redux/notification/notification.actions';import Modal from '../UI/modal/Modal';import Input from '../UI/inputs/Input';const ContactsModal = ({ show, onClose, onComplete, addNotification }) => {const [search, setSearch] = useState('');const debounceSearch = useDebounce(search, 500);const [contacts, setContacts] = useState([]);const closeModal = () => {setContacts([]);onClose();};const handleStartConversation = async (startConversationUrl) => {try {const conversation = await startConversation(startConversationUrl);onComplete(conversation);closeModal();} catch (error) {addNotification({ style: 'danger', msg: error.message });}};useEffect(() => {getCurrentContacts(debounceSearch).then((currentContacts) => setContacts(currentContacts)).catch((error) => {addNotification({ style: 'danger', msg: error.message });});}, [debounceSearch]);return (<Modal show={show} title='Iniciar conversación' onClose={closeModal} showFooter={false}><Inputlabel='Escribe el nombre'placeholder='Escribe el nombre de la persona'onChange={(e) => setSearch(e.target.value)}/><List sx={{ width: '100%' }}>{contacts.map((user) => {const { image, name, link_open_or_create } = user;return (<ListItem key={name} disablePadding disableRipple><ListItemButtondisableRippleonClick={() => handleStartConversation(link_open_or_create)}><ListItemAvatar><Avatar alt={`${name} image`} src={image} /></ListItemAvatar><ListItemText primary={name} /></ListItemButton></ListItem>);})}</List></Modal>);};const mapDispatchToProps = {addNotification: (notification) => addNotification(notification)};export default connect(null, mapDispatchToProps)(ContactsModal);