Rev 3630 | Rev 3633 | 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 [reportedUuid, setReportedUuid] = 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.uuid === reportedUuid? { ...message, content: 'Contenido reportado', contentType: 'text' }: message));closeModal();showSuccess(data);setReportedUuid(null);},onError: (error) => {showError(error.message);setReportedUuid(null);}});const sendMessage = async (message) => {if (!conversation?.save_url) return;await execute(conversation.save_url, message);messagesEndRef.current?.scrollIntoView({behavior: 'smooth',block: 'end'});};const reportMessage = async (report) => {if (!conversation?.abuse_report_url) return;executeReport(conversation.abuse_report_url, report);};const handleReport = (uuid) => {setReportedUuid(uuid);showModal('Reportar mensaje',<ReportModal onSubmit={(report) => reportMessage(report, uuid)} />);};useEffect(() => {setMessages(items);}, [items]);return {messages,loading,messagesEndRef,elementRef,resetPagination,sendMessage,reportMessage: handleReport};};