diff --git a/modules/webapp/src/main/elm/Page/Home/Data.elm b/modules/webapp/src/main/elm/Page/Home/Data.elm index fb2ee3c3..eda1efbf 100644 --- a/modules/webapp/src/main/elm/Page/Home/Data.elm +++ b/modules/webapp/src/main/elm/Page/Home/Data.elm @@ -98,7 +98,7 @@ type Msg | KeyUpMsg (Maybe KeyCode) | SetContentOnly String | ScrollResult (Result Dom.Error ()) - | ClearItemDetailId + | ClearItemDetailId (Maybe String) type SearchType diff --git a/modules/webapp/src/main/elm/Page/Home/Update.elm b/modules/webapp/src/main/elm/Page/Home/Update.elm index c8c3c04f..9db104d2 100644 --- a/modules/webapp/src/main/elm/Page/Home/Update.elm +++ b/modules/webapp/src/main/elm/Page/Home/Update.elm @@ -251,12 +251,18 @@ update mId key flags settings msg model = ScrollResult _ -> let cmd = - Process.sleep 800 |> Task.perform (always ClearItemDetailId) + Process.sleep 800 |> Task.perform (always (ClearItemDetailId mId)) in withSub ( model, cmd ) - ClearItemDetailId -> - withSub ( model, Page.set key (HomePage Nothing) ) + ClearItemDetailId id -> + -- if user clicks quickly away (e.g. on another item), the + -- deferred command should be ignored + if mId == id then + noSub ( model, Page.set key (HomePage Nothing) ) + + else + noSub ( model, Cmd.none ) @@ -328,3 +334,8 @@ withSub ( m, c ) = (Time.every 500 (\_ -> UpdateThrottle)) m.throttle ) + + +noSub : ( Model, Cmd Msg ) -> ( Model, Cmd Msg, Sub Msg ) +noSub ( m, c ) = + ( m, c, Sub.none )