From a691de6567512e70cca77f84ae6aa319f64898f5 Mon Sep 17 00:00:00 2001 From: Yehowshua Immanuel Date: Wed, 1 Jan 2025 22:34:38 -0500 Subject: [PATCH] now successfully decoding time --- README.md | 2 ++ frontend/src/Main.elm | 1 - frontend/src/Page/Landing.elm | 51 ++++++++++++++++++++++++++++++----- 3 files changed, 46 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 817e41c..302d371 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,8 @@ Now open `http://127.0.0.1:8080` in your browser. # TODO - [x] Add Makefile + - [ ] `EventHandlers.onMessage` should inject successfully decoded message into + Msg type directly... - [ ] Run `uglify` twice as per [this link](https://github.com/rtfeldman/elm-spa-example/tree/master?tab=readme-ov-file#production-build) - [ ] Clicking in upper left should go to landing page. - [ ] Add GPLV3 License diff --git a/frontend/src/Main.elm b/frontend/src/Main.elm index 15057fd..38e8b90 100644 --- a/frontend/src/Main.elm +++ b/frontend/src/Main.elm @@ -65,7 +65,6 @@ subscriptions model = Sub.batch , model.page |> Body.subscriptions |> Sub.map Body ] - view : Model -> Browser.Document Msg view model = let diff --git a/frontend/src/Page/Landing.elm b/frontend/src/Page/Landing.elm index d36ee12..fbfbcd4 100644 --- a/frontend/src/Page/Landing.elm +++ b/frontend/src/Page/Landing.elm @@ -7,20 +7,57 @@ module Page.Landing exposing , subscriptions ) import Element exposing (Element) +import Websockets +import Ports +import Json.Decode as Decode -type alias Model = {} -type alias Msg = {} +type alias Model = { + time : String + } +type Msg + = SocketOpened + | SocketClosed + | SocketMessage String + | NoOp init : () -> Model -init flags = {} +init flags = { + time = "time not yet set" + } + +decodeMessage : String -> String +decodeMessage message = + let + decodedMessage = Decode.decodeString (Decode.field "time" Decode.string) message + in + case decodedMessage of + Ok decoded -> decoded + Err err -> "failed to decode" ++ message subscriptions : Model -> Sub Msg -subscriptions _ = Sub.none +subscriptions model = + Ports.socketOnEvent + (Websockets.EventHandlers + (\_ -> SocketOpened) + (\_ -> SocketClosed) + (\_ -> NoOp) + (\message -> SocketMessage message.data) + (\_ -> NoOp) + ) update : Msg -> Model -> (Model, Cmd Msg) -update msg model = (model, Cmd.none) +update msg model = + case msg of + SocketMessage message -> + let + decoded = decodeMessage message + in + ( {model | time = decoded}, Cmd.none ) + _ -> (model, Cmd.none) view : Model -> Element Msg view model = - Element.el [] - <| Element.text "Landing" + Element.column [] + [ Element.text "Landing", + Element.text <| "Time is : " ++ model.time + ]