summaryrefslogtreecommitdiff
path: root/frontend/src/usePolling.js
blob: 30813121b29f67951d5ef56554eef66a28071831 (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
// usePolling.js
import { useState, useEffect } from 'react';

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

  useEffect(() => {
    const fetchData = async () => {
      try {
        const response = await fetch(url);
        if (!response.ok) {
          throw new Error(`HTTP error! status: ${response.status}`);
        }
        const result = await response.json();
        setData(result);
        setError(null);
      } catch (err) {
        setError('Failed to fetch data: ' + err.message);
      }
    };

    fetchData();
    const pollingInterval = setInterval(fetchData, interval);

    return () => clearInterval(pollingInterval);
  }, [url, interval]);

  return { data, error };
};

export default usePolling;