Proyectos de Subversion LeadersLinked - SPA

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3208 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 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
 
13
  const heartBeat = async (url) => {
14
    setLoading(true)
15
    try {
16
      const results = await getConversations(url)
17
 
18
      if (JSON.stringify(conversations) !== JSON.stringify(results)) {
19
        setConversations(results)
20
      }
21
    } catch (error) {
22
      dispatch(addNotification({ style: 'danger', msg: error.message }))
23
    } finally {
24
      setLoading(false)
25
    }
26
  }
27
 
28
  const setConversation = (conversation) => {
29
    setCurrentConversation(conversation)
30
  }
31
 
32
  useEffect(() => {
33
    const conversationsInterval = setInterval(() => {
34
      heartBeat(url)
35
    }, 2000)
36
 
37
    return () => {
38
      clearInterval(conversationsInterval)
39
    }
40
  }, [url, conversations])
41
 
42
  return {
43
    conversations,
44
    currentConversation,
45
    setConversation,
46
    loading
47
  }
48
}