summaryrefslogtreecommitdiff
path: root/frontend/src/useSSE.js
blob: e741895659fd60c63377b7c4e1549ea93e45b3c9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import { useState, useEffect } from 'react';

const useSSE = (url) => {
  const [data, setData] = useState(null);
  const [error, setError] = useState('');

  useEffect(() => {
    const eventSource = new EventSource(url);

    eventSource.onmessage = e => {
      try {
        const result = JSON.parse(e.data);
        setData(result);
      } catch (err) {
        setError('Failed to parse data: ' + err.message);
      }
    };

    eventSource.onerror = e => {
      setError('EventSource failed');
      eventSource.close();
    };

    return () => {
      eventSource.close();
    };
  }, [url]);

  return { data, error };
};

export default useSSE;