-
Notifications
You must be signed in to change notification settings - Fork 22
Expand file tree
/
Copy pathMain.purs
More file actions
79 lines (59 loc) · 1.88 KB
/
Main.purs
File metadata and controls
79 lines (59 loc) · 1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
module Main where
import Prelude
import Effect (Effect)
import Data.Array (snoc, modifyAt, elemIndex)
import Data.Maybe (Maybe(..), fromJust, fromMaybe)
import Web.HTML.HTMLDocument (toNonElementParentNode) as DOM
import Web.DOM.NonElementParentNode (getElementById) as DOM
import Web.HTML (window) as DOM
import Web.HTML.Window (document) as DOM
import Partial.Unsafe (unsafePartial)
import React as React
import ReactDOM as ReactDOM
import Example.TodoList (todoListClass)
import Example.Types (Todo(..), TodoStatus(..))
main :: Effect Unit
main = void $ do
window <- DOM.window
document <- DOM.document window
let
node = DOM.toNonElementParentNode document
element <- DOM.getElementById "example" node
let
element' = unsafePartial (fromJust element)
ReactDOM.render (React.createLeafElement mainClass { }) element'
mainClass :: React.ReactClass { }
mainClass = React.component "Main" component
where
component this =
pure { state:
{ todo: Nothing
, todos: []
}
, render: render <$> React.getState this
}
where
render
{ todo
, todos
} =
React.createLeafElement todoListClass
{ todos
, todo
, onAdd: \todo' -> React.modifyState this \a ->
a { todo = Nothing
, todos = snoc a.todos todo'
}
, onEdit: \todo' -> React.modifyState this
_ { todo = Just todo'
}
, onDone: \todo' -> React.modifyState this \a ->
a { todos = setStatus a.todos todo' TodoDone
}
, onClear : \todo' -> React.modifyState this \a ->
a { todos = setStatus a.todos todo' TodoCleared
}
}
setStatus todos todo status = fromMaybe todos $ do
i <- elemIndex todo todos
modifyAt i (\(Todo a) -> Todo a { status = status }) todos