11import { type ReactNode , createContext , useCallback , useContext , useEffect , useState } from "react"
2+ import { eventClient } from "../../../shared/event-client"
23import type { RequestEvent } from "../../../shared/request-event"
34
45const RequestContext = createContext < {
@@ -10,24 +11,21 @@ const requestMap = new Map<string, RequestEvent>()
1011
1112export const RequestProvider = ( { children } : { children : ReactNode } ) => {
1213 const [ requests , setRequests ] = useState < RequestEvent [ ] > ( [ ] )
13- const setNewRequests = useCallback ( ( payload : string ) => {
14- const requests = JSON . parse ( payload )
15- const newRequests = Array . isArray ( requests ) ? requests : [ requests ]
16- for ( const req of newRequests ) {
17- requestMap . set ( req . id + req . startTime , req )
18- import . meta. hot ?. send ( "remove-event" , { ...req , fromClient : true } )
19- }
14+
15+ const handleRequestEvent = useCallback ( ( event : { payload : RequestEvent } ) => {
16+ const req = event . payload
17+ requestMap . set ( req . id + req . startTime , req )
18+
2019 setRequests ( Array . from ( requestMap . values ( ) ) )
2120 } , [ ] )
21+
2222 useEffect ( ( ) => {
23- import . meta. hot ?. send ( "get-events" )
24- import . meta. hot ?. on ( "get-events" , setNewRequests )
25- import . meta. hot ?. on ( "request-event" , setNewRequests )
23+ const unsubscribeRequestEvent = eventClient . on ( "request-event" , handleRequestEvent )
24+
2625 return ( ) => {
27- import . meta. hot ?. off ?.( "get-events" , setNewRequests )
28- import . meta. hot ?. off ?.( "request-event" , setNewRequests )
26+ unsubscribeRequestEvent ( )
2927 }
30- } , [ setNewRequests ] )
28+ } , [ handleRequestEvent ] )
3129
3230 const removeAllRequests = useCallback ( ( ) => {
3331 setRequests ( [ ] )
0 commit comments