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