File tree 2 files changed +69
-1
lines changed
2 files changed +69
-1
lines changed Original file line number Diff line number Diff line change
1
+ import {
2
+ createContext ,
3
+ useContext ,
4
+ useState ,
5
+ PropsWithChildren ,
6
+ useEffect ,
7
+ } from "react" ;
8
+
9
+ interface EventListenerContextData {
10
+ data : unknown ;
11
+ listener : EventSource ;
12
+ }
13
+
14
+ type EventListenerProps = PropsWithChildren < {
15
+ url : string ;
16
+ } > ;
17
+
18
+ export const EventListenerContext =
19
+ createContext < EventListenerContextData | null > ( null ) ;
20
+
21
+ export const EventListenerProvider = ( {
22
+ url,
23
+ children,
24
+ } : EventListenerProps ) => {
25
+ const [ data , setData ] = useState < unknown > ( null ) ;
26
+ const [ listener , setListener ] = useState < EventSource | null > ( null ) ;
27
+
28
+ useEffect ( ( ) => {
29
+ const list = new EventSource ( url ) ;
30
+ list . onmessage = ( { data } ) => {
31
+ setData ( data ) ;
32
+ } ;
33
+ setListener ( list ) ;
34
+ } , [ ] ) ;
35
+
36
+ return (
37
+ < EventListenerContext . Provider value = { { data, listener } } >
38
+ { children }
39
+ </ EventListenerContext . Provider >
40
+ ) ;
41
+ } ;
42
+
43
+ export const useEventListener = ( ) => {
44
+ const contextData = useContext ( EventListenerContext ) ;
45
+
46
+ if ( ! contextData ) {
47
+ throw new Error ( "bruh" ) ;
48
+ }
49
+
50
+ return contextData ;
51
+ } ;
Original file line number Diff line number Diff line change 1
1
import { AuthorizedLayout } from "../components/Layout" ;
2
+ import {
3
+ EventListenerContext ,
4
+ EventListenerProvider ,
5
+ // useEventListener,
6
+ } from "../features/EventsSteam/EventListener" ;
2
7
3
8
const Organisation = ( ) => {
9
+ const streamURL = "/api/organisation/stream" ;
10
+ // const eventListenerContext = useEventListener();
11
+
4
12
return (
5
13
< AuthorizedLayout >
6
- To ma wylecieć
14
+ < EventListenerProvider url = { streamURL } >
15
+ < EventListenerContext . Consumer >
16
+ { ( organizationsContext ) => (
17
+ < >
18
+ Organizancje są takie o:
19
+ < pre > { JSON . stringify ( organizationsContext ) } </ pre >
20
+ </ >
21
+ ) }
22
+ </ EventListenerContext . Consumer >
23
+ </ EventListenerProvider >
7
24
</ AuthorizedLayout >
8
25
) ;
9
26
} ;
You can’t perform that action at this time.
0 commit comments