1
0
mirror of https://github.com/jhillyerd/inbucket.git synced 2025-12-18 01:57:02 +00:00
Files
go-inbucket/ui/src/Page/Home.elm
James Hillyerd 2162a4caaa ui: Add an Effect system to handle global state and Elm Cmds (#176)
All pages now leverage Effects for most of their Session and Cmd requests. More work required for routing and other lingering Cmd use.
2020-09-12 19:45:14 -07:00

60 lines
1.2 KiB
Elm

module Page.Home exposing (Model, Msg, init, update, view)
import Data.Session exposing (Session)
import Effect exposing (Effect)
import Html exposing (Html)
import Html.Attributes exposing (class, property)
import HttpUtil
import Json.Encode as Encode
-- MODEL --
type alias Model =
{ session : Session
, greeting : String
}
init : Session -> ( Model, Effect Msg )
init session =
( Model session "", Effect.getGreeting GreetingLoaded )
-- UPDATE --
type Msg
= GreetingLoaded (Result HttpUtil.Error String)
update : Msg -> Model -> ( Model, Effect Msg )
update msg model =
case msg of
GreetingLoaded (Ok greeting) ->
( { model | greeting = greeting }, Effect.none )
GreetingLoaded (Err err) ->
( model, Effect.showFlash (HttpUtil.errorFlash err) )
-- VIEW --
view : Model -> { title : String, modal : Maybe (Html msg), content : List (Html Msg) }
view model =
{ title = "Inbucket"
, modal = Nothing
, content =
[ Html.node "rendered-html"
[ class "greeting"
, property "content" (Encode.string model.greeting)
]
[]
]
}