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