Rev 3677 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useEffect, useState } from 'react';import { useParams } from 'react-router-dom';import { useAlert, useAlertModal, useApi, useModal } from '@shared/hooks';import {getConversations,deleteConversation as deleteConversationService} from '@inmail/services';import { SearchUserModal } from '@shared/components';export function useConversations() {const { uuid } = useParams();const [conversations, setConversations] = useState([]);const [currentConversation, setCurrentConversation] = useState(null);const [deletedUrl, setDeletedUrl] = useState(null);const { showSuccess, showError } = useAlert();const { showAlert, closeAlert } = useAlertModal();const { showModal, closeModal } = useModal();const { loading, execute } = useApi(getConversations, {onSuccess: (data) => {setConversations(data);},onError: (error) => {showError(error.message);}});const { execute: executeDeleteConversation } = useApi(deleteConversationService, {onSuccess: (data) => {showSuccess(data);setConversations((prev) => prev.filter((c) => c.delete_url !== deletedUrl));setCurrentConversation(null);setDeletedUrl(null);closeAlert();},onError: (error) => {showError(error.message);setDeletedUrl(null);}});const deleteConversation = (url) => {setDeletedUrl(url);showAlert({title: 'Borrar conversación',message: '¿Estás seguro de querer borrar esta conversación?',onConfirm: () => executeDeleteConversation(url),onCancel: closeAlert});};const startConversation = () => {showModal('Iniciar conversación',<SearchUserModalonSelect={(user) => {setCurrentConversation(user);setConversations((prev) => [user, ...prev]);closeModal();}}/>);};useEffect(() => {if (!uuid) return;const conversation = conversations.find((c) => c.uuid === uuid);setCurrentConversation(conversation);}, [uuid]);useEffect(() => {execute(uuid ? `/inmail/user/${uuid}` : '/inmail');}, [uuid]);return {conversations,loading,currentConversation,setCurrentConversation,deleteConversation,startConversation};}