summaryrefslogtreecommitdiff
path: root/frontend/src/useSSE.js
diff options
context:
space:
mode:
authorlazydancer <jrpucula@gmail.com>2024-12-22 17:33:11 -0500
committerlazydancer <jrpucula@gmail.com>2024-12-22 17:33:11 -0500
commit2c5b7da8165e3f8b90748e8ced1de0e3e8d52309 (patch)
tree6d6e4e1d0cb0c7ec5e1dff83bfeda4b044258b81 /frontend/src/useSSE.js
downloadhaul-2c5b7da8165e3f8b90748e8ced1de0e3e8d52309.tar.gz
Initial
Diffstat (limited to 'frontend/src/useSSE.js')
-rw-r--r--frontend/src/useSSE.js32
1 files changed, 32 insertions, 0 deletions
diff --git a/frontend/src/useSSE.js b/frontend/src/useSSE.js
new file mode 100644
index 0000000..e741895
--- /dev/null
+++ b/frontend/src/useSSE.js
@@ -0,0 +1,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;