Scroll to the current item when going back from detail

The list view now supports an item id that will be scrolled to and is
highlighted with a shadow. When going back from detail view this is
now used to scroll to the currently viewed item.
This commit is contained in:
Eike Kettner
2020-09-14 18:43:04 +02:00
parent 913bfb611c
commit 3852c69da1
15 changed files with 131 additions and 52 deletions

View File

@@ -8,6 +8,7 @@ import Data.Flags exposing (Flags)
import Data.UiSettings exposing (UiSettings)
import Page exposing (Page(..))
import Page.Home.Data exposing (..)
import Ports
import Throttle
import Time
import Util.Html exposing (KeyCode(..))
@@ -17,12 +18,12 @@ import Util.String
import Util.Update
update : Nav.Key -> Flags -> UiSettings -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg )
update key flags settings msg model =
update : Maybe String -> Nav.Key -> Flags -> UiSettings -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg )
update mId key flags settings msg model =
case msg of
Init ->
Util.Update.andThen2
[ update key flags settings (SearchMenuMsg Comp.SearchMenu.Init)
[ update mId key flags settings (SearchMenuMsg Comp.SearchMenu.Init)
, doSearch flags settings
]
model
@@ -35,7 +36,7 @@ update key flags settings msg model =
, searchType = defaultSearchType flags
}
in
update key flags settings (SearchMenuMsg Comp.SearchMenu.ResetForm) nm
update mId key flags settings (SearchMenuMsg Comp.SearchMenu.ResetForm) nm
SearchMenuMsg m ->
let
@@ -108,7 +109,11 @@ update key flags settings msg model =
, moreAvailable = list.groups /= []
}
in
update key flags settings (ItemCardListMsg (Comp.ItemCardList.SetResults list)) m
Util.Update.andThen2
[ update mId key flags settings (ItemCardListMsg (Comp.ItemCardList.SetResults list))
, scrollToCard mId
]
m
ItemSearchAddResp (Ok list) ->
let
@@ -123,7 +128,11 @@ update key flags settings msg model =
, moreAvailable = list.groups /= []
}
in
update key flags settings (ItemCardListMsg (Comp.ItemCardList.AddResults list)) m
Util.Update.andThen2
[ update mId key flags settings (ItemCardListMsg (Comp.ItemCardList.AddResults list))
, scrollToCard mId
]
m
ItemSearchAddResp (Err _) ->
withSub
@@ -185,7 +194,7 @@ update key flags settings msg model =
ContentOnlySearch ->
SetContentOnly str
in
update key flags settings smMsg model
update mId key flags settings smMsg model
SetContentOnly str ->
withSub
@@ -207,7 +216,7 @@ update key flags settings msg model =
)
KeyUpMsg (Just Enter) ->
update key flags settings DoSearch model
update mId key flags settings DoSearch model
KeyUpMsg _ ->
withSub ( model, Cmd.none )
@@ -217,6 +226,16 @@ update key flags settings msg model =
--- Helpers
scrollToCard : Maybe String -> Model -> ( Model, Cmd Msg, Sub Msg )
scrollToCard mId model =
case mId of
Just id ->
( model, Ports.scrollToElem ( id, 0 ), Sub.none )
Nothing ->
( model, Cmd.none, Sub.none )
doSearch : Flags -> UiSettings -> Model -> ( Model, Cmd Msg, Sub Msg )
doSearch flags settings model =
let

View File

@@ -14,8 +14,8 @@ import Page.Home.Data exposing (..)
import Util.Html
view : Flags -> UiSettings -> Model -> Html Msg
view flags settings model =
view : Maybe String -> Flags -> UiSettings -> Model -> Html Msg
view current flags settings model =
div [ class "home-page ui padded grid" ]
[ div
[ classList
@@ -82,7 +82,7 @@ view flags settings model =
]
[ viewSearchBar flags model
, Html.map ItemCardListMsg
(Comp.ItemCardList.view settings model.itemListModel)
(Comp.ItemCardList.view current settings model.itemListModel)
]
, div
[ classList