Proyectos de Subversion LeadersLinked - SPA

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1718 stevensc 1
import { useEffect, useState } from 'react'
2
import { useDispatch } from 'react-redux'
3
 
4
import { getConversations } from '@app/services/chats'
5
import { addNotification } from '@app/redux/notification/notification.actions'
6
 
7
export default function useConversations(url) {
8
  const [conversations, setConversations] = useState([])
9
  const [currentConversation, setCurrentConversation] = useState(null)
10
  const [loading, setLoading] = useState(false)
11
  const dispatch = useDispatch()
12
 
1726 stevensc 13
  function areEqualArray(arr1, arr2) {
14
    return JSON.stringify(arr1) === JSON.stringify(arr2)
1723 stevensc 15
  }
16
 
1718 stevensc 17
  const heartBeat = async (url) => {
18
    setLoading(true)
19
    try {
20
      const results = await getConversations(url)
1727 stevensc 21
      const equal = areEqualArray(conversations, results)
22
      if (equal) return
1718 stevensc 23
      setConversations(results)
24
    } catch (error) {
25
      dispatch(addNotification({ style: 'danger', msg: error.message }))
26
    } finally {
27
      setLoading(false)
28
    }
29
  }
30
 
31
  const setConversation = (conversation) => {
32
    setCurrentConversation(conversation)
33
  }
34
 
35
  useEffect(() => {
36
    const conversationsInterval = setInterval(() => {
1720 stevensc 37
      heartBeat(url)
1718 stevensc 38
    }, 2000)
39
 
40
    return () => {
41
      clearInterval(conversationsInterval)
42
    }
1725 stevensc 43
  }, [url, conversations])
1718 stevensc 44
 
45
  return {
46
    conversations,
47
    currentConversation,
48
    setConversation,
49
    loading
50
  }
51
}