mirror of
https://github.com/jhillyerd/inbucket.git
synced 2026-01-26 13:05:56 +00:00
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.
This commit is contained in:
@@ -5,6 +5,7 @@ import Browser.Navigation as Nav
|
||||
import Data.MessageHeader as MessageHeader exposing (MessageHeader)
|
||||
import Data.Session as Session exposing (Session)
|
||||
import DateFormat as DF
|
||||
import Effect exposing (Effect)
|
||||
import Html
|
||||
exposing
|
||||
( Attribute
|
||||
@@ -41,9 +42,9 @@ type alias Model =
|
||||
}
|
||||
|
||||
|
||||
init : Session -> ( Model, Cmd Msg )
|
||||
init : Session -> ( Model, Effect Msg )
|
||||
init session =
|
||||
( Model session False [], Cmd.none )
|
||||
( Model session False [], Effect.none )
|
||||
|
||||
|
||||
|
||||
@@ -58,20 +59,20 @@ type Msg
|
||||
| MessageKeyPress MessageHeader Int
|
||||
|
||||
|
||||
update : Msg -> Model -> ( Model, Cmd Msg )
|
||||
update : Msg -> Model -> ( Model, Effect Msg )
|
||||
update msg model =
|
||||
case msg of
|
||||
Connected True ->
|
||||
( { model | connected = True, messages = [] }, Cmd.none )
|
||||
( { model | connected = True, messages = [] }, Effect.none )
|
||||
|
||||
Connected False ->
|
||||
( { model | connected = False }, Cmd.none )
|
||||
( { model | connected = False }, Effect.none )
|
||||
|
||||
MessageReceived value ->
|
||||
case D.decodeValue (MessageHeader.decoder |> D.at [ "detail" ]) value of
|
||||
Ok header ->
|
||||
( { model | messages = header :: List.take 500 model.messages }
|
||||
, Cmd.none
|
||||
, Effect.none
|
||||
)
|
||||
|
||||
Err err ->
|
||||
@@ -81,12 +82,10 @@ update msg model =
|
||||
, table = [ ( "Error", D.errorToString err ) ]
|
||||
}
|
||||
in
|
||||
( { model | session = Session.showFlash flash model.session }
|
||||
, Cmd.none
|
||||
)
|
||||
( model, Effect.showFlash flash )
|
||||
|
||||
Clear ->
|
||||
( { model | messages = [] }, Cmd.none )
|
||||
( { model | messages = [] }, Effect.none )
|
||||
|
||||
OpenMessage header ->
|
||||
openMessage header model
|
||||
@@ -97,15 +96,16 @@ update msg model =
|
||||
openMessage header model
|
||||
|
||||
_ ->
|
||||
( model, Cmd.none )
|
||||
( model, Effect.none )
|
||||
|
||||
|
||||
openMessage : MessageHeader -> Model -> ( Model, Cmd Msg )
|
||||
openMessage : MessageHeader -> Model -> ( Model, Effect Msg )
|
||||
openMessage header model =
|
||||
( model
|
||||
, Route.Message header.mailbox header.id
|
||||
|> model.session.router.toPath
|
||||
|> Nav.replaceUrl model.session.key
|
||||
|> Effect.wrap
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user