module Page.Landing exposing ( Model , Msg , view , init , update , subscriptions ) import Element exposing (Element) import Websockets import Ports import Json.Decode as Decode import Html.Attributes exposing (placeholder) import Element.Input type alias Model = { time : String } type alias Landing = { time : String } type Msg = ToFrontend Landing | DecodeError Decode.Error | GreetWidgetText String | NoOp init : () -> Model init flags = { time = "time not yet set" } decodeToFrontend message = let decodeTime = Decode.field "time" Decode.string |> Decode.map Landing decodeLanding = Decode.field "Landing" decodeTime |> Decode.map ToFrontend decodedMessage = Decode.decodeString decodeLanding message in case decodedMessage of Ok decoded -> decoded Err err -> DecodeError err subscriptions : Model -> Sub Msg subscriptions model = Ports.socketOnEvent (Websockets.EventHandlers (\_ -> NoOp) (\_ -> NoOp) (\_ -> NoOp) (\message -> (message.data |> decodeToFrontend)) (\_ -> NoOp) ) update : Msg -> Model -> (Model, Cmd Msg) update msg model = case msg of ToFrontend landing -> ( {model | time = landing.time}, Cmd.none ) _ -> (model, Cmd.none) greetWidget = let textInput = Element.Input.text [] { onChange = GreetWidgetText , text = "text" , placeholder = Nothing , label = Element.Input.labelHidden "Greet" } in Element.row [] [ textInput ] view : Model -> Element Msg view model = Element.column [] [ Element.text "Landing" , Element.text <| "Current time is : " ++ model.time , greetWidget ]