-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathMain.elm
70 lines (51 loc) · 1.39 KB
/
Main.elm
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
-- module Scuttlebot exposing (..)
--
--
-- save : Json.Value -> Cmd msg
--
--
-- subscribe : (Json.Value -> msg) -> Sub msg
module Main exposing (..)
import Html.App
import Html exposing (Html)
import WebSocket
import Vote
import Json.Decode
import Json.Encode
wsUrl =
"ws://localhost:8080"
type alias Model =
{ votes : Vote.Model }
initialModel : Model
initialModel =
{ votes = Vote.initialModel }
type Msg
= FromWebsocket String
| AppMessage Vote.Msg
update : Msg -> Model -> ( Model, Cmd msg )
update msg model =
case msg of
FromWebsocket string ->
case Debug.log "decoded" (Json.Decode.decodeString Vote.decodeMsg string) of
Err msg ->
( model, Cmd.none )
Ok voteMsg ->
( { model | votes = Vote.update voteMsg model.votes }, Cmd.none )
AppMessage localVoteMsg ->
-- TODO: persiste the new message to scuttlebot
( model
, WebSocket.send wsUrl
(Json.Encode.encode 0 (Vote.encodeMsg localVoteMsg))
)
view : Model -> Html Msg
view model =
Html.App.map AppMessage (Vote.view model.votes)
main =
Html.App.program
{ init = ( initialModel, Cmd.none )
, update = update
, subscriptions =
\_ ->
WebSocket.listen wsUrl FromWebsocket
, view = view
}