Rev 3630 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useEffect, useRef, useState } from 'react';import { useAlert, useApi, useModal, usePagination } from '@shared/hooks';import { saveMessage } from '@inmail/services';import { ReportModal } from '@shared/components';export const useMessages = (conversation) => {const [messages, setMessages] = useState([]);const messagesEndRef = useRef(null);const { items, loading, elementRef, resetPagination } = usePagination(conversation?.messages_url);const { showError, showSuccess } = useAlert();const { showModal } = useModal();const { execute } = useApi(saveMessage, {onSuccess: (data) => {setMessages([data, ...messages]);},onError: (error) => {showError(error.message);}});const { execute: executeReport } = useApi(reportMessage, {onError: (error) => {showError(error.message);}});const sendMessage = async (message) => {if (!conversation?.save_url) return;await execute(conversation.save_url, message);messagesEndRef.current?.scrollIntoView({behavior: 'smooth',block: 'end'});};const reportMessage = (report, uuid) => {if (!conversation?.report_url) return;executeReport(conversation.report_url, report).then((data) => {showSuccess(data);setMessages((prevMessages) =>prevMessages.map((message) =>message.uuid === uuid? { ...message, content: 'Contenido reportado', contentType: 'text' }: message));});};const handleReport = (uuid) => {showModal('Reportar mensaje',<ReportModal onSubmit={(report) => reportMessage(report, uuid)} />);};useEffect(() => {setMessages(items);}, [items]);return {messages,loading,messagesEndRef,elementRef,resetPagination,sendMessage,reportMessage: handleReport};};