mirror of
https://github.com/jhillyerd/inbucket.git
synced 2025-12-17 09:37:02 +00:00
feat: Monitor tab dynamically updates when messages are deleted (#337)
* WIP: msghub handles deletes, UI does not yet display them Signed-off-by: James Hillyerd <james@hillyerd.com> * socket and UI support message deletes Signed-off-by: James Hillyerd <james@hillyerd.com> * use Delete naming for consistency Signed-off-by: James Hillyerd <james@hillyerd.com> --------- Signed-off-by: James Hillyerd <james@hillyerd.com>
This commit is contained in:
44
ui/src/Data/MonitorEvent.elm
Normal file
44
ui/src/Data/MonitorEvent.elm
Normal file
@@ -0,0 +1,44 @@
|
||||
module Data.MonitorEvent exposing (MessageID, MonitorEvent(..), decoder)
|
||||
|
||||
import Data.MessageHeader as MessageHeader exposing (MessageHeader)
|
||||
import Json.Decode exposing (Decoder, andThen, fail, field, string, succeed)
|
||||
import Json.Decode.Pipeline exposing (required)
|
||||
|
||||
|
||||
type alias MessageID =
|
||||
{ mailbox : String
|
||||
, id : String
|
||||
}
|
||||
|
||||
|
||||
type MonitorEvent
|
||||
= MessageStored MessageHeader
|
||||
| MessageDeleted MessageID
|
||||
|
||||
|
||||
decoder : Decoder MonitorEvent
|
||||
decoder =
|
||||
field "variant" string
|
||||
|> andThen variantDecoder
|
||||
|
||||
|
||||
variantDecoder : String -> Decoder MonitorEvent
|
||||
variantDecoder variant =
|
||||
case variant of
|
||||
"message-deleted" ->
|
||||
succeed MessageDeleted
|
||||
|> required "header" messageIdDecoder
|
||||
|
||||
"message-stored" ->
|
||||
succeed MessageStored
|
||||
|> required "header" MessageHeader.decoder
|
||||
|
||||
unknown ->
|
||||
fail <| "Unknown variant: " ++ unknown
|
||||
|
||||
|
||||
messageIdDecoder : Decoder MessageID
|
||||
messageIdDecoder =
|
||||
succeed MessageID
|
||||
|> required "mailbox" string
|
||||
|> required "id" string
|
||||
@@ -1,7 +1,8 @@
|
||||
module Page.Monitor exposing (Model, Msg, init, update, view)
|
||||
|
||||
import Api
|
||||
import Data.MessageHeader as MessageHeader exposing (MessageHeader)
|
||||
import Data.MessageHeader exposing (MessageHeader)
|
||||
import Data.MonitorEvent as MonitorEvent
|
||||
import Data.Session exposing (Session)
|
||||
import DateFormat as DF
|
||||
import Effect exposing (Effect)
|
||||
@@ -68,11 +69,23 @@ update msg model =
|
||||
( { model | connected = False }, Effect.none )
|
||||
|
||||
MessageReceived value ->
|
||||
case D.decodeValue (MessageHeader.decoder |> D.at [ "detail" ]) value of
|
||||
Ok header ->
|
||||
( { model | messages = header :: List.take 500 model.messages }
|
||||
, Effect.none
|
||||
)
|
||||
case D.decodeValue (MonitorEvent.decoder |> D.at [ "detail" ]) value of
|
||||
Ok event ->
|
||||
case event of
|
||||
MonitorEvent.MessageDeleted deleted ->
|
||||
( { model
|
||||
| messages =
|
||||
List.filter
|
||||
(\x -> x.mailbox /= deleted.mailbox || x.id /= deleted.id)
|
||||
model.messages
|
||||
}
|
||||
, Effect.none
|
||||
)
|
||||
|
||||
MonitorEvent.MessageStored header ->
|
||||
( { model | messages = header :: List.take 500 model.messages }
|
||||
, Effect.none
|
||||
)
|
||||
|
||||
Err err ->
|
||||
let
|
||||
|
||||
Reference in New Issue
Block a user