From 34799b9a04ad5d9633db245523f5452cfd993d59 Mon Sep 17 00:00:00 2001 From: James Hillyerd Date: Sun, 17 Feb 2019 11:57:10 -0800 Subject: [PATCH] ui: Move ClearFlash & ViewMailbox into Layout --- ui/src/Layout.elm | 57 +++++++++++++++++++++++++++++++---------------- ui/src/Main.elm | 22 +++++++----------- 2 files changed, 46 insertions(+), 33 deletions(-) diff --git a/ui/src/Layout.elm b/ui/src/Layout.elm index 18c18ff..d2eddc8 100644 --- a/ui/src/Layout.elm +++ b/ui/src/Layout.elm @@ -31,19 +31,15 @@ type Page type alias Model msg = { mapMsg : Msg -> msg - , clearFlash : msg - , viewMailbox : String -> msg , menuVisible : Bool , recentVisible : Bool , mailboxName : String } -init : (Msg -> msg) -> msg -> (String -> msg) -> Model msg -init mapMsg clearFlash viewMailbox = +init : (Msg -> msg) -> Model msg +init mapMsg = { mapMsg = mapMsg - , clearFlash = clearFlash - , viewMailbox = viewMailbox , menuVisible = False , recentVisible = False , mailboxName = "" @@ -62,22 +58,45 @@ reset model = type Msg - = ToggleMenu - | ShowRecent Bool + = ClearFlash | OnMailboxNameInput String + | OpenMailbox + | ShowRecent Bool + | ToggleMenu -update : Msg -> Model msg -> Model msg -update msg model = +update : Msg -> Model msg -> Session -> ( Model msg, Session, Cmd msg ) +update msg model session = case msg of - ToggleMenu -> - { model | menuVisible = not model.menuVisible } - - ShowRecent visible -> - { model | recentVisible = visible } + ClearFlash -> + ( model + , Session.clearFlash session + , Cmd.none + ) OnMailboxNameInput name -> - { model | mailboxName = name } + ( { model | mailboxName = name } + , session + , Cmd.none + ) + + OpenMailbox -> + ( model + , session + , Route.pushUrl session.key (Route.Mailbox model.mailboxName) + ) + + ShowRecent visible -> + ( { model | recentVisible = visible } + , session + , Cmd.none + ) + + ToggleMenu -> + ( { model | menuVisible = not model.menuVisible } + , session + , Cmd.none + ) type alias State msg = @@ -108,7 +127,7 @@ frame { model, session, activePage, activeMailbox, modal, content } = , navbarLink Status Route.Status [ text "Status" ] activePage , navbarRecent activePage activeMailbox model session , li [ class "navbar-mailbox" ] - [ form [ Events.onSubmit (model.viewMailbox model.mailboxName) ] + [ form [ Events.onSubmit (OpenMailbox |> model.mapMsg) ] [ input [ type_ "text" , placeholder "mailbox" @@ -148,7 +167,7 @@ frameModal maybeModal = errorFlash : Model msg -> Maybe Session.Flash -> Html msg -errorFlash controls maybeFlash = +errorFlash model maybeFlash = let row ( heading, message ) = tr [] @@ -164,7 +183,7 @@ errorFlash controls maybeFlash = div [ class "well well-error" ] [ div [ class "flash-header" ] [ h2 [] [ text flash.title ] - , a [ href "#", Events.onClick controls.clearFlash ] [ text "Close" ] + , a [ href "#", Events.onClick (ClearFlash |> model.mapMsg) ] [ text "Close" ] ] , div [ class "flash-table" ] (List.map row flash.table) ] diff --git a/ui/src/Main.elm b/ui/src/Main.elm index 26b104d..1bd0833 100644 --- a/ui/src/Main.elm +++ b/ui/src/Main.elm @@ -61,7 +61,7 @@ init configValue location key = Home.init session initModel = - { layout = Layout.init LayoutMsg ClearFlash ViewMailbox + { layout = Layout.init LayoutMsg , page = Home subModel } @@ -79,8 +79,6 @@ type Msg | LinkClicked UrlRequest | SessionUpdated (Result D.Error Session.Persistent) | TimeZoneLoaded Time.Zone - | ClearFlash - | ViewMailbox String | LayoutMsg Layout.Msg | HomeMsg Home.Msg | MailboxMsg Mailbox.Msg @@ -179,11 +177,6 @@ updateMain msg model session = , Cmd.none ) - ClearFlash -> - ( applyToModelSession Session.clearFlash model - , Cmd.none - ) - SessionUpdated (Ok persistent) -> ( updateSession model { session | persistent = persistent } , Cmd.none @@ -205,13 +198,14 @@ updateMain msg model session = , Cmd.none ) - ViewMailbox name -> - ( applyToModelSession Session.clearFlash model - , Route.pushUrl session.key (Route.Mailbox name) - ) - LayoutMsg subMsg -> - ( { model | layout = Layout.update subMsg model.layout }, Cmd.none ) + let + ( layout, newSession, cmd ) = + Layout.update subMsg model.layout session + in + ( updateSession { model | layout = layout } newSession + , cmd + ) _ -> updatePage msg model