Proyectos de Subversion LeadersLinked - SPA

Rev

| Ultima modificación | Ver Log |

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