mirror of
https://github.com/jhillyerd/inbucket.git
synced 2025-12-17 09:37:02 +00:00
ui: Convert Layout to use Effects
This commit is contained in:
@@ -3,10 +3,12 @@ module Effect exposing
|
|||||||
, addRecent
|
, addRecent
|
||||||
, append
|
, append
|
||||||
, batch
|
, batch
|
||||||
|
, clearFlash
|
||||||
, deleteMessage
|
, deleteMessage
|
||||||
, disableRouting
|
, disableRouting
|
||||||
, enableRouting
|
, enableRouting
|
||||||
, focusModal
|
, focusModal
|
||||||
|
, focusModalResult
|
||||||
, getGreeting
|
, getGreeting
|
||||||
, getHeaderList
|
, getHeaderList
|
||||||
, getMessage
|
, getMessage
|
||||||
@@ -64,6 +66,7 @@ type ApiEffect msg
|
|||||||
type SessionEffect
|
type SessionEffect
|
||||||
= FlashClear
|
= FlashClear
|
||||||
| FlashShow Session.Flash
|
| FlashShow Session.Flash
|
||||||
|
| ModalFocusResult Modal.Msg
|
||||||
| RecentAdd String
|
| RecentAdd String
|
||||||
| RoutingDisable
|
| RoutingDisable
|
||||||
| RoutingEnable
|
| RoutingEnable
|
||||||
@@ -233,6 +236,9 @@ performSession ( session, effect ) =
|
|||||||
FlashShow flash ->
|
FlashShow flash ->
|
||||||
( Session.showFlash flash session, Cmd.none )
|
( Session.showFlash flash session, Cmd.none )
|
||||||
|
|
||||||
|
ModalFocusResult result ->
|
||||||
|
( Modal.updateSession result session, Cmd.none )
|
||||||
|
|
||||||
RoutingDisable ->
|
RoutingDisable ->
|
||||||
( Session.disableRouting session, Cmd.none )
|
( Session.disableRouting session, Cmd.none )
|
||||||
|
|
||||||
@@ -283,6 +289,11 @@ focusModal toMsg =
|
|||||||
ModalFocus toMsg
|
ModalFocus toMsg
|
||||||
|
|
||||||
|
|
||||||
|
focusModalResult : Modal.Msg -> Effect msg
|
||||||
|
focusModalResult msg =
|
||||||
|
SessionEffect (ModalFocusResult msg)
|
||||||
|
|
||||||
|
|
||||||
deleteMessage : HttpResult msg -> String -> String -> Effect msg
|
deleteMessage : HttpResult msg -> String -> String -> Effect msg
|
||||||
deleteMessage toMsg mailboxName id =
|
deleteMessage toMsg mailboxName id =
|
||||||
ApiEffect (DeleteMessage toMsg mailboxName id)
|
ApiEffect (DeleteMessage toMsg mailboxName id)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
module Layout exposing (Model, Msg, Page(..), frame, init, reset, update)
|
module Layout exposing (Model, Msg, Page(..), frame, init, reset, update)
|
||||||
|
|
||||||
import Browser.Navigation as Nav
|
|
||||||
import Data.Session as Session exposing (Session)
|
import Data.Session as Session exposing (Session)
|
||||||
|
import Effect exposing (Effect)
|
||||||
import Html
|
import Html
|
||||||
exposing
|
exposing
|
||||||
( Attribute
|
( Attribute
|
||||||
@@ -39,7 +39,7 @@ import Html.Attributes
|
|||||||
)
|
)
|
||||||
import Html.Events as Events
|
import Html.Events as Events
|
||||||
import Modal
|
import Modal
|
||||||
import Route exposing (Route)
|
import Route
|
||||||
import Timer exposing (Timer)
|
import Timer exposing (Timer)
|
||||||
|
|
||||||
|
|
||||||
@@ -96,46 +96,31 @@ type Msg
|
|||||||
| RecentMenuToggled
|
| RecentMenuToggled
|
||||||
|
|
||||||
|
|
||||||
update : Msg -> Model msg -> Session -> ( Model msg, Session, Cmd msg )
|
update : Msg -> Model msg -> ( Model msg, Effect msg )
|
||||||
update msg model session =
|
update msg model =
|
||||||
case msg of
|
case msg of
|
||||||
ClearFlash ->
|
ClearFlash ->
|
||||||
( model
|
( model, Effect.clearFlash )
|
||||||
, Session.clearFlash session
|
|
||||||
, Cmd.none
|
|
||||||
)
|
|
||||||
|
|
||||||
MainMenuToggled ->
|
MainMenuToggled ->
|
||||||
( { model | mainMenuVisible = not model.mainMenuVisible }
|
( { model | mainMenuVisible = not model.mainMenuVisible }, Effect.none )
|
||||||
, session
|
|
||||||
, Cmd.none
|
|
||||||
)
|
|
||||||
|
|
||||||
ModalFocused message ->
|
ModalFocused message ->
|
||||||
( model
|
( model, Effect.focusModalResult message )
|
||||||
, Modal.updateSession message session
|
|
||||||
, Cmd.none
|
|
||||||
)
|
|
||||||
|
|
||||||
ModalUnfocused ->
|
ModalUnfocused ->
|
||||||
( model, session, Modal.resetFocusCmd (ModalFocused >> model.mapMsg) )
|
( model, Effect.focusModal (ModalFocused >> model.mapMsg) )
|
||||||
|
|
||||||
OnMailboxNameInput name ->
|
OnMailboxNameInput name ->
|
||||||
( { model | mailboxName = name }
|
( { model | mailboxName = name }, Effect.none )
|
||||||
, session
|
|
||||||
, Cmd.none
|
|
||||||
)
|
|
||||||
|
|
||||||
OpenMailbox ->
|
OpenMailbox ->
|
||||||
if model.mailboxName == "" then
|
if model.mailboxName == "" then
|
||||||
( model, session, Cmd.none )
|
( model, Effect.none )
|
||||||
|
|
||||||
else
|
else
|
||||||
( model
|
( model
|
||||||
, session
|
, Effect.navigateRoute True (Route.Mailbox model.mailboxName)
|
||||||
, Route.Mailbox model.mailboxName
|
|
||||||
|> session.router.toPath
|
|
||||||
|> Nav.pushUrl session.key
|
|
||||||
)
|
)
|
||||||
|
|
||||||
RecentMenuMouseOver ->
|
RecentMenuMouseOver ->
|
||||||
@@ -143,20 +128,19 @@ update msg model session =
|
|||||||
| recentMenuVisible = True
|
| recentMenuVisible = True
|
||||||
, recentMenuTimer = Timer.cancel model.recentMenuTimer
|
, recentMenuTimer = Timer.cancel model.recentMenuTimer
|
||||||
}
|
}
|
||||||
, session
|
, Effect.none
|
||||||
, Cmd.none
|
|
||||||
)
|
)
|
||||||
|
|
||||||
RecentMenuMouseOut ->
|
RecentMenuMouseOut ->
|
||||||
let
|
let
|
||||||
|
-- Keep the recent menu open for a moment even if the mouse leaves it.
|
||||||
newTimer =
|
newTimer =
|
||||||
Timer.replace model.recentMenuTimer
|
Timer.replace model.recentMenuTimer
|
||||||
in
|
in
|
||||||
( { model
|
( { model
|
||||||
| recentMenuTimer = newTimer
|
| recentMenuTimer = newTimer
|
||||||
}
|
}
|
||||||
, session
|
, Effect.schedule (RecentMenuTimeout >> model.mapMsg) newTimer 400
|
||||||
, Timer.schedule (RecentMenuTimeout >> model.mapMsg) newTimer 400
|
|
||||||
)
|
)
|
||||||
|
|
||||||
RecentMenuTimeout timer ->
|
RecentMenuTimeout timer ->
|
||||||
@@ -165,18 +149,16 @@ update msg model session =
|
|||||||
| recentMenuVisible = False
|
| recentMenuVisible = False
|
||||||
, recentMenuTimer = Timer.cancel timer
|
, recentMenuTimer = Timer.cancel timer
|
||||||
}
|
}
|
||||||
, session
|
, Effect.none
|
||||||
, Cmd.none
|
|
||||||
)
|
)
|
||||||
|
|
||||||
else
|
else
|
||||||
-- Timer was no longer valid.
|
-- Timer was no longer valid.
|
||||||
( model, session, Cmd.none )
|
( model, Effect.none )
|
||||||
|
|
||||||
RecentMenuToggled ->
|
RecentMenuToggled ->
|
||||||
( { model | recentMenuVisible = not model.recentMenuVisible }
|
( { model | recentMenuVisible = not model.recentMenuVisible }
|
||||||
, session
|
, Effect.none
|
||||||
, Cmd.none
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -199,12 +199,10 @@ updateMain msg model session =
|
|||||||
|
|
||||||
LayoutMsg subMsg ->
|
LayoutMsg subMsg ->
|
||||||
let
|
let
|
||||||
( layout, newSession, cmd ) =
|
( layout, effect ) =
|
||||||
Layout.update subMsg model.layout session
|
Layout.update subMsg model.layout
|
||||||
in
|
in
|
||||||
( updateSession { model | layout = layout } newSession
|
( { model | layout = layout }, effect ) |> performEffects
|
||||||
, cmd
|
|
||||||
)
|
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
updatePage msg model |> performEffects
|
updatePage msg model |> performEffects
|
||||||
|
|||||||
Reference in New Issue
Block a user