MCPcopy Create free account
hub / github.com/coderoad/coderoad-vscode / useStateMachine

Function useStateMachine

web-app/src/services/state/useStateMachine.tsx:25–57  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

23
24// router finds first state match of <Route path='' />
25const useStateMachine = (): Output => {
26 const [state, send] = useMachine<T.MachineContext, any>(createMachine({ editorSend }))
27
28 // event bus listener
29 React.useEffect(() => {
30 const listener = 'message'
31 // propagate channel event to state machine
32 const handler = (event: any) => {
33 // NOTE: must call event.data, cannot destructure. VSCode acts odd
34 const action = event.data
35
36 if (action.source !== 'coderoad') {
37 // filter out events from other extensions
38 return
39 }
40 send(action)
41 }
42 window.addEventListener(listener, handler)
43 return () => {
44 window.removeEventListener(listener, handler)
45 }
46 }, []) // eslint-disable-line
47
48 // convert route to a string to avoid unnecessary React re-renders on deeply nested objects
49 const route = createRouteString(state.value)
50 logger(`STATE: "${route}"`)
51
52 return {
53 context: state.context,
54 route,
55 send,
56 }
57}
58
59export default useStateMachine

Callers 1

RoutesFunction · 0.85

Calls 3

createMachineFunction · 0.90
createRouteStringFunction · 0.85
loggerFunction · 0.50

Tested by

no test coverage detected