Rev 1759 | AutorÃa | Ultima modificación | Ver Log |
import { useEffect, useState } from 'react'
import { useDispatch } from 'react-redux'
import { getConversations } from '@app/services/chats'
import { addNotification } from '@app/redux/notification/notification.actions'
export default function useConversations(url) {
const [conversations, setConversations] = useState([])
const [currentConversation, setCurrentConversation] = useState(null)
const [loading, setLoading] = useState(false)
const dispatch = useDispatch()
function mergeConversations(arr1 = [], arr2 = []) {
const mergedArr = [...arr1, ...arr2]
const idsSet = new Set(mergedArr.map((obj) => obj.uuid))
const diff = mergedArr.filter((obj) => idsSet.has(obj.uuid))
return diff
}
const heartBeat = async (url) => {
setLoading(true)
try {
const results = await getConversations(url)
const newConversations = mergeConversations(conversations, results)
setConversations(newConversations)
} catch (error) {
dispatch(addNotification({ style: 'danger', msg: error.message }))
} finally {
setLoading(false)
}
}
const setConversation = (conversation) => {
setCurrentConversation(conversation)
}
useEffect(() => {
const conversationsInterval = setInterval(() => {
heartBeat(url)
}, 2000)
return () => {
clearInterval(conversationsInterval)
}
}, [url, conversations])
return {
conversations,
currentConversation,
setConversation,
loading
}
}