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',
<SearchUserModal
onSelect={(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
};
}