1
0
mirror of https://github.com/jhillyerd/inbucket.git synced 2025-12-17 17:47:03 +00:00

ui: Move selected MessageID into MessageList record

This commit is contained in:
James Hillyerd
2018-11-05 22:07:57 -08:00
parent 54ca36c442
commit 5328406533

View File

@@ -43,9 +43,9 @@ type State
type MessageState type MessageState
= NoMessage = NoMessage
| LoadingMessage MessageID | LoadingMessage
| ShowingMessage VisibleMessage | ShowingMessage VisibleMessage
| Transitioning VisibleMessage MessageID | Transitioning VisibleMessage
type alias MessageID = type alias MessageID =
@@ -54,6 +54,7 @@ type alias MessageID =
type alias MessageList = type alias MessageList =
{ headers : List MessageHeader { headers : List MessageHeader
, selected : Maybe MessageID
, searchFilter : String , searchFilter : String
} }
@@ -153,7 +154,9 @@ update session msg model =
LoadingList selection -> LoadingList selection ->
let let
newModel = newModel =
{ model | state = ShowingList (MessageList headers "") NoMessage } { model
| state = ShowingList (MessageList headers Nothing "") NoMessage
}
in in
case selection of case selection of
Just id -> Just id ->
@@ -244,7 +247,10 @@ updateMessageResult model message =
ShowingList list _ -> ShowingList list _ ->
( { model ( { model
| state = ShowingList list (ShowingMessage (VisibleMessage message Nothing)) | state =
ShowingList
{ list | selected = Just message.id }
(ShowingMessage (VisibleMessage message Nothing))
, bodyMode = bodyMode , bodyMode = bodyMode
} }
, Task.perform OpenedTime Time.now , Task.perform OpenedTime Time.now
@@ -280,19 +286,28 @@ updateSearchInput model searchInput =
updateSelected : Model -> MessageID -> Model updateSelected : Model -> MessageID -> Model
updateSelected model id = updateSelected model id =
case model.state of case model.state of
ShowingList list NoMessage -> LoadingList _ ->
{ model | state = ShowingList list (LoadingMessage id) }
ShowingList list (ShowingMessage visible) ->
-- Use Transitioning state to prevent blank message flicker.
{ model | state = ShowingList list (Transitioning visible id) }
ShowingList list (Transitioning visible _) ->
{ model | state = ShowingList list (Transitioning visible id) }
_ ->
model model
ShowingList list messageState ->
let
newList =
{ list | selected = Just id }
in
case messageState of
NoMessage ->
{ model | state = ShowingList newList LoadingMessage }
LoadingMessage ->
model
ShowingMessage visible ->
-- Use Transitioning state to prevent blank message flicker.
{ model | state = ShowingList newList (Transitioning visible) }
Transitioning visible ->
{ model | state = ShowingList newList (Transitioning visible) }
updateDeleteMessage : Model -> Message -> ( Model, Cmd Msg, Session.Msg ) updateDeleteMessage : Model -> Message -> ( Model, Cmd Msg, Session.Msg )
updateDeleteMessage model message = updateDeleteMessage model message =
@@ -405,17 +420,8 @@ view session model =
LoadingList _ -> LoadingList _ ->
div [] [] div [] []
ShowingList list NoMessage -> ShowingList list _ ->
messageList list Nothing messageList list
ShowingList list (LoadingMessage id) ->
messageList list (Just id)
ShowingList list (ShowingMessage visible) ->
messageList list (Just visible.message.id)
ShowingList list (Transitioning _ id) ->
messageList list (Just id)
] ]
, main_ , main_
[ id "message" ] [ id "message" ]
@@ -429,7 +435,7 @@ view session model =
ShowingList _ (ShowingMessage { message }) -> ShowingList _ (ShowingMessage { message }) ->
viewMessage message model.bodyMode viewMessage message model.bodyMode
ShowingList _ (Transitioning { message } _) -> ShowingList _ (Transitioning { message }) ->
viewMessage message model.bodyMode viewMessage message model.bodyMode
_ -> _ ->
@@ -438,13 +444,13 @@ view session model =
] ]
messageList : MessageList -> Maybe MessageID -> Html Msg messageList : MessageList -> Html Msg
messageList list selected = messageList list =
div [] div []
(list (list
|> filterMessageList |> filterMessageList
|> List.reverse |> List.reverse
|> List.map (messageChip selected) |> List.map (messageChip list.selected)
) )