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

ui: Mailbox headers get a MessageList type for search

This commit is contained in:
James Hillyerd
2018-11-04 16:40:39 -08:00
parent 852b9fce26
commit c8dabf8593

View File

@@ -26,16 +26,22 @@ type Body
type State type State
= LoadingList (Maybe MessageID) = LoadingList (Maybe MessageID)
| ShowingList (List MessageHeader) (Maybe MessageID) | ShowingList MessageList (Maybe MessageID)
| LoadingMessage (List MessageHeader) MessageID | LoadingMessage MessageList MessageID
| ShowingMessage (List MessageHeader) VisibleMessage | ShowingMessage MessageList VisibleMessage
| Transitioning (List MessageHeader) VisibleMessage MessageID | Transitioning MessageList VisibleMessage MessageID
type alias MessageID = type alias MessageID =
String String
type alias MessageList =
{ headers : List MessageHeader
, searchFilter : String
}
type alias VisibleMessage = type alias VisibleMessage =
{ message : Message { message : Message
, markSeenAt : Maybe Time , markSeenAt : Maybe Time
@@ -128,7 +134,7 @@ update session msg model =
LoadingList selection -> LoadingList selection ->
let let
newModel = newModel =
{ model | state = ShowingList headers selection } { model | state = ShowingList (MessageList headers "") selection }
in in
case selection of case selection of
Just id -> Just id ->
@@ -263,10 +269,15 @@ deleteMessage model msg =
cmd = cmd =
HttpUtil.delete url HttpUtil.delete url
|> Http.send DeleteMessageResult |> Http.send DeleteMessageResult
filter f messageList =
{ messageList | headers = List.filter f messageList.headers }
in in
case model.state of case model.state of
ShowingMessage list _ -> ShowingMessage list _ ->
( { model | state = ShowingList (List.filter (\x -> x.id /= msg.id) list) Nothing } ( { model
| state = ShowingList (filter (\x -> x.id /= msg.id) list) Nothing
}
, cmd , cmd
, Session.none , Session.none
) )
@@ -309,10 +320,13 @@ markMessageSeen model message =
|> Http.jsonBody |> Http.jsonBody
|> HttpUtil.patch url |> HttpUtil.patch url
|> Http.send MarkSeenResult |> Http.send MarkSeenResult
map f messageList =
{ messageList | headers = List.map f messageList.headers }
in in
( { model ( { model
| state = | state =
ShowingMessage (List.map updateSeen list) ShowingMessage (map updateSeen list)
{ visible { visible
| message = { message | seen = True } | message = { message | seen = True }
, markSeenAt = Nothing , markSeenAt = Nothing
@@ -336,7 +350,7 @@ view session model =
[ aside [ id "message-list" ] [ aside [ id "message-list" ]
[ case model.state of [ case model.state of
LoadingList _ -> LoadingList _ ->
messageList [] Nothing div [] []
ShowingList list selection -> ShowingList list selection ->
messageList list selection messageList list selection
@@ -371,9 +385,9 @@ view session model =
] ]
messageList : List MessageHeader -> Maybe MessageID -> Html Msg messageList : MessageList -> Maybe MessageID -> Html Msg
messageList list selected = messageList list selected =
div [] (List.map (messageChip selected) (List.reverse list)) div [] (List.map (messageChip selected) (List.reverse list.headers))
messageChip : Maybe MessageID -> MessageHeader -> Html Msg messageChip : Maybe MessageID -> MessageHeader -> Html Msg