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:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user