| 3628 |
stevensc |
1 |
import React, { useEffect, useRef, useState } from 'react';
|
|
|
2 |
|
|
|
3 |
import { useAlert, useApi, useModal, usePagination } from '@shared/hooks';
|
|
|
4 |
import { saveMessage } from '@inmail/services';
|
|
|
5 |
import { ReportModal } from '@shared/components';
|
|
|
6 |
|
|
|
7 |
export const useMessages = (conversation) => {
|
|
|
8 |
const [messages, setMessages] = useState([]);
|
|
|
9 |
const messagesEndRef = useRef(null);
|
|
|
10 |
|
|
|
11 |
const { items, loading, elementRef, resetPagination } = usePagination(conversation?.messages_url);
|
|
|
12 |
|
|
|
13 |
const { showError, showSuccess } = useAlert();
|
|
|
14 |
const { showModal } = useModal();
|
|
|
15 |
|
|
|
16 |
const { execute } = useApi(saveMessage, {
|
|
|
17 |
onSuccess: (data) => {
|
|
|
18 |
setMessages([data, ...messages]);
|
|
|
19 |
},
|
|
|
20 |
onError: (error) => {
|
|
|
21 |
showError(error.message);
|
|
|
22 |
}
|
|
|
23 |
});
|
|
|
24 |
|
|
|
25 |
const { execute: executeReport } = useApi(reportMessage, {
|
|
|
26 |
onError: (error) => {
|
|
|
27 |
showError(error.message);
|
|
|
28 |
}
|
|
|
29 |
});
|
|
|
30 |
|
|
|
31 |
const sendMessage = async (message) => {
|
|
|
32 |
if (!conversation?.save_url) return;
|
|
|
33 |
await execute(conversation.save_url, message);
|
|
|
34 |
messagesEndRef.current?.scrollIntoView({
|
|
|
35 |
behavior: 'smooth',
|
|
|
36 |
block: 'end'
|
|
|
37 |
});
|
|
|
38 |
};
|
|
|
39 |
|
|
|
40 |
const reportMessage = (report, uuid) => {
|
|
|
41 |
if (!conversation?.report_url) return;
|
|
|
42 |
executeReport(conversation.report_url, report).then((data) => {
|
|
|
43 |
showSuccess(data);
|
|
|
44 |
setMessages((prevMessages) =>
|
|
|
45 |
prevMessages.map((message) =>
|
|
|
46 |
message.uuid === uuid
|
|
|
47 |
? { ...message, content: 'Contenido reportado', contentType: 'text' }
|
|
|
48 |
: message
|
|
|
49 |
)
|
|
|
50 |
);
|
|
|
51 |
});
|
|
|
52 |
};
|
|
|
53 |
|
|
|
54 |
const handleReport = (uuid) => {
|
|
|
55 |
showModal(
|
|
|
56 |
'Reportar mensaje',
|
|
|
57 |
<ReportModal onSubmit={(report) => reportMessage(report, uuid)} />
|
|
|
58 |
);
|
|
|
59 |
};
|
|
|
60 |
|
|
|
61 |
useEffect(() => {
|
|
|
62 |
setMessages(items);
|
|
|
63 |
}, [items]);
|
|
|
64 |
|
|
|
65 |
return {
|
|
|
66 |
messages,
|
|
|
67 |
loading,
|
|
|
68 |
messagesEndRef,
|
|
|
69 |
elementRef,
|
|
|
70 |
resetPagination,
|
|
|
71 |
sendMessage,
|
|
|
72 |
reportMessage: handleReport
|
|
|
73 |
};
|
|
|
74 |
};
|