@@ -14,6 +14,11 @@ import React.Basic.DOM.Events (preventDefault, targetValue)
14
14
type Props =
15
15
{ }
16
16
17
+ type Form =
18
+ { item :: Item
19
+ , items :: Items
20
+ , name :: String
21
+ }
17
22
type Item = String
18
23
type Items = Array Item
19
24
type Name = String
@@ -22,11 +27,7 @@ data Select = Select Name Items
22
27
23
28
type State =
24
29
{ built :: Maybe Select
25
- , form ::
26
- { item :: Item
27
- , name :: String
28
- }
29
- , items :: Items
30
+ , form :: Form
30
31
}
31
32
32
33
data Action
@@ -42,18 +43,20 @@ component = createComponent "App"
42
43
app :: JSX
43
44
app = make component { initialState, render, update } {}
44
45
46
+ buildFromForm :: Form -> Select
47
+ buildFromForm { name, items } = Select name items
48
+
49
+ initialForm :: Form
50
+ initialForm = { item: " " , items: [] , name: " " }
51
+
45
52
initialState :: State
46
53
initialState =
47
54
{ built: Nothing
48
- , form:
49
- { item: " "
50
- , name: " "
51
- }
52
- , items: []
55
+ , form: initialForm
53
56
}
54
57
55
58
render :: Self Props State Action -> JSX
56
- render self@{ state: { built, form, items } } =
59
+ render self@{ state: { built, form } } =
57
60
H .div
58
61
{ className: " app"
59
62
, children:
@@ -91,7 +94,6 @@ render self@{ state: { built, form, items } } =
91
94
, value: form.item
92
95
}
93
96
]
94
- , H .br {}
95
97
, H .button
96
98
{ onClick:
97
99
capture
@@ -104,7 +106,7 @@ render self@{ state: { built, form, items } } =
104
106
, H .div_
105
107
[ H .ul_
106
108
(mapFlipped
107
- items
109
+ form. items
108
110
(\i ->
109
111
H .li_
110
112
[ H .text i
@@ -147,9 +149,11 @@ render self@{ state: { built, form, items } } =
147
149
update :: Self Props State Action -> Action -> StateUpdate Props State Action
148
150
update self Noop = NoUpdate
149
151
update self@{ state } AddItem =
150
- Update state { form = state.form { item = " " }, items = Array .snoc state.items state.form.item }
152
+ Update
153
+ state
154
+ { form = state.form { item = " " , items = Array .snoc state.form.items state.form.item } }
151
155
update self@{ state } BuildForm =
152
- Update state { built = Just (Select state.form.name state.items ), form = { item: " " , name: " " } }
156
+ Update state { built = Just (buildFromForm state.form), form = initialForm }
153
157
update self@{ state } (EditItem v) =
154
158
Update state { form = state.form { item = v } }
155
159
update self@{ state } (EditName v) =
0 commit comments