Rev 3631 | Rev 3645 | 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, reportMessage } from '@inmail/services';import { ReportModal } from '@shared/components';export const useMessages = (conversation) => {const [messages, setMessages] = useState([]);const [reportedUrl, setReportedUrl] = useState(null);const messagesEndRef = useRef(null);const { items, loading, elementRef, resetPagination } = usePagination(conversation?.messages_url);const { showError, showSuccess } = useAlert();const { showModal, closeModal } = useModal();const { execute } = useApi(saveMessage, {onSuccess: (data) => {setMessages([data, ...messages]);},onError: (error) => {showError(error.message);}});const { execute: executeReport } = useApi(reportMessage, {onSuccess: (data) => {setMessages((prevMessages) =>prevMessages.map((message) =>message.abuse_report_url === reportedUrl? { ...message, content: 'Contenido reportado', contentType: 'text' }: message));closeModal();showSuccess(data);setReportedUrl(null);},onError: (error) => {showError(error.message);setReportedUrl(null);}});const sendMessage = async (message) => {if (!conversation?.save_url) return;await execute(conversation.save_url, message);messagesEndRef.current?.scrollIntoView({behavior: 'smooth',block: 'end'});};const handleReport = (url) => {showModal('Reportar mensaje',<ReportModal onSubmit={(report) => executeReport(url, report)} />);};useEffect(() => {setMessages(items);}, [items]);return {messages,loading,messagesEndRef,elementRef,resetPagination,sendMessage,reportMessage: handleReport};};