1
+ import * as React from 'react'
2
+ import * as CR from 'typings'
3
+
4
+ import Debugger from './components/Debugger'
5
+ import Routes from './Routes'
6
+
7
+ interface ReceivedEvent {
8
+ data :CR . Action
9
+ }
10
+
11
+ const initialState = { SelectTutorial :'Initial ' }
12
+ const initialData :CR . MachineContext = {
13
+ position :{ levelId :'' , stageId :'' , stepId :'' } ,
14
+ data :{
15
+ summary :{
16
+ title :'' ,
17
+ description :'' ,
18
+ levelList :[ ] ,
19
+ } ,
20
+ levels :{ } ,
21
+ stages :{ } ,
22
+ steps :{ } ,
23
+ } ,
24
+ progress :{ levels :{ } , stages :{ } , steps :{ } , complete :false } ,
25
+ }
26
+
27
+ const DataContext = React . createContext ( { state :initialState , ...initialData } )
28
+
29
+
30
+
31
+ const App = ( ) => {
32
+ const [ state , setState ] = React . useState ( initialState )
33
+ const [ data , setData ] :[ CR . MachineContext , ( data :CR . MachineContext ) => void ] = React . useState ( initialData )
34
+
35
+ const handleEvent = ( event :ReceivedEvent ) :void => {
36
+ const message = event . data
37
+ console . log ( 'RECEIVED' )
38
+ console . log ( message )
39
+ // messages from core
40
+ if ( message . type === 'SET_STATE' ) {
41
+ setState ( message . payload . state )
42
+ setData ( message . payload . data )
43
+ } else if ( message . type === 'SET_DATA' ) {
44
+ setData ( message . payload . data )
45
+ }
46
+ }
47
+
48
+ // event bus listener
49
+ React . useEffect ( ( ) => {
50
+ const listener = 'message'
51
+ window . addEventListener ( listener , handleEvent )
52
+ return ( ) => {
53
+ window . removeEventListener ( listener , handleEvent )
54
+ }
55
+ } )
56
+
57
+ const value = {
58
+ state,
59
+ position :data . position ,
60
+ data :data . data ,
61
+ progress :data . progress ,
62
+ }
63
+
64
+ // TODO: refactor cond to user <Router><Route> and accept first route as if/else if
65
+ return (
66
+ < DataContext . Provider value = { value } >
67
+ < div >
68
+ < Debugger value = { value } />
69
+ < Routes state = { state } />
70
+ </ div >
71
+ </ DataContext . Provider >
72
+ )
73
+ }
74
+
75
+ export default App