1
0
mirror of https://github.com/jhillyerd/inbucket.git synced 2025-12-18 10:07:02 +00:00

ui: Refactor message/markSeenAt into visible record.

This commit is contained in:
James Hillyerd
2018-11-04 11:24:44 -08:00
parent 7dade7f0e4
commit 04a3f58e6d

View File

@@ -28,15 +28,18 @@ type alias Model =
{ name : String { name : String
, selected : Maybe String , selected : Maybe String
, headers : List MessageHeader , headers : List MessageHeader
, message : Maybe Message , visible :
, bodyMode : Body Maybe
{ message : Message
, markSeenAt : Maybe Time , markSeenAt : Maybe Time
} }
, bodyMode : Body
}
init : String -> Maybe String -> Model init : String -> Maybe String -> Model
init name id = init name id =
Model name id [] Nothing SafeHtmlBody Nothing Model name id [] Nothing SafeHtmlBody
load : String -> Cmd Msg load : String -> Cmd Msg
@@ -53,13 +56,18 @@ load name =
subscriptions : Model -> Sub Msg subscriptions : Model -> Sub Msg
subscriptions model = subscriptions model =
case model.markSeenAt of case model.visible of
Just { message, markSeenAt } ->
case markSeenAt of
Just time -> Just time ->
Time.every (250 * Time.millisecond) Tick Time.every (250 * Time.millisecond) Tick
Nothing -> Nothing ->
Sub.none Sub.none
Nothing ->
Sub.none
-- UPDATE -- UPDATE
@@ -136,7 +144,7 @@ update session msg model =
model.bodyMode model.bodyMode
in in
( { model ( { model
| message = Just msg | visible = Just { message = msg, markSeenAt = Nothing }
, bodyMode = bodyMode , bodyMode = bodyMode
} }
, Task.perform OpenedTime Time.now , Task.perform OpenedTime Time.now
@@ -150,16 +158,19 @@ update session msg model =
( { model | bodyMode = bodyMode }, Cmd.none, Session.none ) ( { model | bodyMode = bodyMode }, Cmd.none, Session.none )
OpenedTime time -> OpenedTime time ->
case model.message of case model.visible of
Just message -> Just visible ->
if message.seen then if visible.message.seen then
( { model | markSeenAt = Nothing } ( model, Cmd.none, Session.none )
, Cmd.none
, Session.none
)
else else
-- Set delay to report message as seen to backend. -- Set delay to report message as seen to backend.
( { model | markSeenAt = Just (time + (1.5 * Time.second)) } ( { model
| visible =
Just
{ visible
| markSeenAt = Just (time + (1.5 * Time.second))
}
}
, Cmd.none , Cmd.none
, Session.none , Session.none
) )
@@ -167,15 +178,20 @@ update session msg model =
Nothing -> Nothing ->
( model, Cmd.none, Session.none ) ( model, Cmd.none, Session.none )
Tick time -> Tick now ->
case ( model.message, model.markSeenAt ) of case model.visible of
( Just message, Just markSeenAt ) -> Just { message, markSeenAt } ->
if time > markSeenAt then case markSeenAt of
Just deadline ->
if now >= deadline then
markMessageSeen model message markMessageSeen model message
else else
( model, Cmd.none, Session.none ) ( model, Cmd.none, Session.none )
_ -> Nothing ->
( model, Cmd.none, Session.none )
Nothing ->
( model, Cmd.none, Session.none ) ( model, Cmd.none, Session.none )
@@ -200,7 +216,7 @@ deleteMessage model msg =
|> Http.send DeleteMessageResult |> Http.send DeleteMessageResult
in in
( { model ( { model
| message = Nothing | visible = Nothing
, selected = Nothing , selected = Nothing
, headers = List.filter (\x -> x.id /= msg.id) model.headers , headers = List.filter (\x -> x.id /= msg.id) model.headers
} }
@@ -221,6 +237,8 @@ getMessage mailbox id =
markMessageSeen : Model -> Message -> ( Model, Cmd Msg, Session.Msg ) markMessageSeen : Model -> Message -> ( Model, Cmd Msg, Session.Msg )
markMessageSeen model message = markMessageSeen model message =
case model.visible of
Just visible ->
let let
updateSeen header = updateSeen header =
if header.id == message.id then if header.id == message.id then
@@ -240,13 +258,16 @@ markMessageSeen model message =
|> Http.send MarkSeenResult |> Http.send MarkSeenResult
in in
( { model ( { model
| markSeenAt = Nothing | visible = Just { visible | markSeenAt = Nothing }
, headers = List.map updateSeen model.headers , headers = List.map updateSeen model.headers
} }
, command , command
, Session.None , Session.None
) )
Nothing ->
( model, Cmd.none, Session.none )
-- VIEW -- VIEW
@@ -258,8 +279,8 @@ view session model =
[ aside [ id "message-list" ] [ messageList model ] [ aside [ id "message-list" ] [ messageList model ]
, main_ , main_
[ id "message" ] [ id "message" ]
[ case model.message of [ case model.visible of
Just message -> Just { message } ->
viewMessage message model.bodyMode viewMessage message model.bodyMode
Nothing -> Nothing ->