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

ui: Adding Transistioning state to Mailbox to stop flicker

This commit is contained in:
James Hillyerd
2018-11-04 13:39:28 -08:00
parent bcf0cafb34
commit a8795f46dc

View File

@@ -26,8 +26,13 @@ type Body
type State type State
= NoSelection = NoSelection
| Selected String | Selected MessageID
| Viewing Visible | Viewing Visible
| Transitioning Visible MessageID
type alias MessageID =
String
type alias Visible = type alias Visible =
@@ -44,8 +49,13 @@ type alias Model =
} }
init : String -> Maybe String -> Model init : String -> Maybe MessageID -> Model
init name id = init name selection =
case selection of
Just id ->
Model name (Selected id) [] SafeHtmlBody
Nothing ->
Model name NoSelection [] SafeHtmlBody Model name NoSelection [] SafeHtmlBody
@@ -79,8 +89,8 @@ subscriptions model =
type Msg type Msg
= ClickMessage String = ClickMessage MessageID
| ViewMessage String | ViewMessage MessageID
| DeleteMessage Message | DeleteMessage Message
| DeleteMessageResult (Result Http.Error ()) | DeleteMessageResult (Result Http.Error ())
| MailboxResult (Result Http.Error (List MessageHeader)) | MailboxResult (Result Http.Error (List MessageHeader))
@@ -95,7 +105,7 @@ update : Session -> Msg -> Model -> ( Model, Cmd Msg, Session.Msg )
update session msg model = update session msg model =
case msg of case msg of
ClickMessage id -> ClickMessage id ->
( { model | state = Selected id } ( updateSelected model id
, Cmd.batch , Cmd.batch
[ Route.newUrl (Route.Message model.name id) [ Route.newUrl (Route.Message model.name id)
, getMessage model.name id , getMessage model.name id
@@ -104,7 +114,7 @@ update session msg model =
) )
ViewMessage id -> ViewMessage id ->
( { model | state = Selected id } ( updateSelected model id
, getMessage model.name id , getMessage model.name id
, Session.AddRecent model.name , Session.AddRecent model.name
) )
@@ -200,6 +210,17 @@ update session msg model =
( model, Cmd.none, Session.none ) ( model, Cmd.none, Session.none )
updateSelected : Model -> MessageID -> Model
updateSelected model id =
case model.state of
Viewing visible ->
-- Use Transitioning state to prevent message flicker.
{ model | state = Transitioning visible id }
_ ->
{ model | state = Selected id }
getMailbox : String -> Cmd Msg getMailbox : String -> Cmd Msg
getMailbox name = getMailbox name =
let let
@@ -229,7 +250,7 @@ deleteMessage model msg =
) )
getMessage : String -> String -> Cmd Msg getMessage : String -> MessageID -> Cmd Msg
getMessage mailbox id = getMessage mailbox id =
let let
url = url =
@@ -301,6 +322,9 @@ view session model =
Viewing { message } -> Viewing { message } ->
viewMessage message model.bodyMode viewMessage message model.bodyMode
Transitioning { message } _ ->
viewMessage message model.bodyMode
_ -> _ ->
text "" text ""
] ]
@@ -324,7 +348,7 @@ messageList model =
div [] (List.map (messageChip selected) (List.reverse model.headers)) div [] (List.map (messageChip selected) (List.reverse model.headers))
messageChip : Maybe String -> MessageHeader -> Html Msg messageChip : Maybe MessageID -> MessageHeader -> Html Msg
messageChip selected msg = messageChip selected msg =
div div
[ classList [ classList