@@ -7,36 +7,30 @@ import Prim
77
88import Data.Array ((:))
99import Data.Foldable (for_)
10+import Data.Maybe (Maybe(..))
1011import Data.URL as URL
1112import Effect (Effect)
1213import Plum as Plum
1314import PureStack.Client (client)
15+import Unsafe.Coerce (unsafeCoerce)
1416
15−type Model = { newTodo :: String, todos :: Array TodoItem }
17+type Model = { newTodo :: String, todos :: Array String }
1618
1719data Msg
1820 = UpdateNewTodo String
19− | SetTodos (Array TodoItem)
2021 | AddNewTodo
2122 | TodoAdded
2223
2324main :: Effect Unit
2425main = do
25− origin <- Plum.currentOrigin
26− let api = getApi (origin `URL.addSegment` "api")
2726 Plum.run @Model @Msg "plum"
28− { init: \runMsg -> do
29− runMsg $ SetTodos <$> api.getTodos
30− pure { newTodo: "", todos: [] }
27+ { init: \_runMsg -> pure { newTodo: "", todos: [] }
3128 , update: \runMsg msg model -> case msg of
3229 UpdateNewTodo newTodo -> pure model { newTodo = newTodo }
3330 AddNewTodo -> do
3431 runMsg $ api.createTodo (TodoItem { text: model.newTodo, done: false }) $> TodoAdded
35− pure model
36− TodoAdded -> do
37− runMsg $ SetTodos <$> api.getTodos
38− pure model
39− SetTodos todos -> pure model { todos = todos }
32+ pure model { newTodo = "", todos = model.newTodo : model.todos }
33+ TodoAdded -> pure model
4034 , view: \model -> column do
4135 font "sans-serif"
4236
@@ -52,9 +46,13 @@ main = do
5246
5347 onKey "Enter" AddNewTodo
5448
55− for_ model.todos $ \(TodoItem todo) -> do
56− text todo.text mempty
49+ for_ model.todos $ \todo -> do
50+ text todo mempty
5751 }
5852
59−getApi = client @API
53+url = case URL.fromString "http://localhost" of
54+ Just x -> x
55+ Nothing -> unsafeCoerce unit
56+
57+api = client @API url
6058