Only scroll to the last visited item when initializing the page

When searching again on that page, scrolling/highlighting should not
happen. It now happens whenever coming to this page (not only when
going back from detail view).

Fixes: #373
This commit is contained in:
Eike Kettner 2020-10-22 23:33:57 +02:00
parent 3e752487e4
commit 6ea9193b5e
2 changed files with 27 additions and 24 deletions

View File

@ -89,7 +89,7 @@ type Msg
| SearchMenuMsg Comp.SearchMenu.Msg
| ResetSearch
| ItemCardListMsg Comp.ItemCardList.Msg
| ItemSearchResp (Result Http.Error ItemLightList)
| ItemSearchResp Bool (Result Http.Error ItemLightList)
| ItemSearchAddResp (Result Http.Error ItemLightList)
| DoSearch
| ToggleSearchMenu
@ -136,21 +136,21 @@ itemNav id model =
}
doSearchCmd : Flags -> UiSettings -> Int -> Model -> Cmd Msg
doSearchCmd flags settings offset model =
doSearchCmd : Flags -> UiSettings -> Int -> Bool -> Model -> Cmd Msg
doSearchCmd flags settings offset scroll model =
case model.searchType of
BasicSearch ->
doSearchDefaultCmd flags settings offset model
doSearchDefaultCmd flags settings offset scroll model
ContentSearch ->
doSearchDefaultCmd flags settings offset model
doSearchDefaultCmd flags settings offset scroll model
ContentOnlySearch ->
doSearchIndexCmd flags settings offset model
doSearchIndexCmd flags settings offset scroll model
doSearchDefaultCmd : Flags -> UiSettings -> Int -> Model -> Cmd Msg
doSearchDefaultCmd flags settings offset model =
doSearchDefaultCmd : Flags -> UiSettings -> Int -> Bool -> Model -> Cmd Msg
doSearchDefaultCmd flags settings offset scroll model =
let
smask =
Comp.SearchMenu.getItemSearch model.searchMenuModel
@ -162,14 +162,14 @@ doSearchDefaultCmd flags settings offset model =
}
in
if offset == 0 then
Api.itemSearch flags mask ItemSearchResp
Api.itemSearch flags mask (ItemSearchResp scroll)
else
Api.itemSearch flags mask ItemSearchAddResp
doSearchIndexCmd : Flags -> UiSettings -> Int -> Model -> Cmd Msg
doSearchIndexCmd flags settings offset model =
doSearchIndexCmd : Flags -> UiSettings -> Int -> Bool -> Model -> Cmd Msg
doSearchIndexCmd flags settings offset scroll model =
case model.contentOnlySearch of
Just q ->
let
@ -180,7 +180,7 @@ doSearchIndexCmd flags settings offset model =
}
in
if offset == 0 then
Api.itemIndexSearch flags mask ItemSearchResp
Api.itemIndexSearch flags mask (ItemSearchResp scroll)
else
Api.itemIndexSearch flags mask ItemSearchAddResp
@ -195,7 +195,7 @@ doSearchIndexCmd flags settings offset model =
mask =
{ emptyMask | limit = settings.itemSearchPageSize }
in
Api.itemSearch flags mask ItemSearchResp
Api.itemSearch flags mask (ItemSearchResp scroll)
resultsBelowLimit : UiSettings -> Model -> Bool

View File

@ -26,7 +26,7 @@ update mId key flags settings msg model =
Init ->
Util.Update.andThen2
[ update mId key flags settings (SearchMenuMsg Comp.SearchMenu.Init)
, doSearch flags settings
, doSearch flags settings True
]
model
@ -61,7 +61,7 @@ update mId key flags settings msg model =
( m2, c2, s2 ) =
if nextState.stateChange && not model.searchInProgress then
doSearch flags settings newModel
doSearch flags settings False newModel
else
withSub ( newModel, Cmd.none )
@ -91,7 +91,7 @@ update mId key flags settings msg model =
, Cmd.batch [ Cmd.map ItemCardListMsg result.cmd ]
)
ItemSearchResp (Ok list) ->
ItemSearchResp scroll (Ok list) ->
let
noff =
settings.itemSearchPageSize
@ -105,7 +105,11 @@ update mId key flags settings msg model =
in
Util.Update.andThen2
[ update mId key flags settings (ItemCardListMsg (Comp.ItemCardList.SetResults list))
, scrollToCard mId
, if scroll then
scrollToCard mId
else
\next -> ( next, Cmd.none, Sub.none )
]
m
@ -124,7 +128,6 @@ update mId key flags settings msg model =
in
Util.Update.andThen2
[ update mId key flags settings (ItemCardListMsg (Comp.ItemCardList.AddResults list))
, scrollToCard mId
]
m
@ -136,7 +139,7 @@ update mId key flags settings msg model =
, Cmd.none
)
ItemSearchResp (Err _) ->
ItemSearchResp _ (Err _) ->
withSub
( { model
| searchInProgress = False
@ -153,7 +156,7 @@ update mId key flags settings msg model =
withSub ( model, Cmd.none )
else
doSearch flags settings nm
doSearch flags settings False nm
ToggleSearchMenu ->
withSub
@ -272,8 +275,8 @@ scrollToCard mId model =
( model, Cmd.none, Sub.none )
doSearch : Flags -> UiSettings -> Model -> ( Model, Cmd Msg, Sub Msg )
doSearch flags settings model =
doSearch : Flags -> UiSettings -> Bool -> Model -> ( Model, Cmd Msg, Sub Msg )
doSearch flags settings scroll model =
let
stype =
if
@ -289,7 +292,7 @@ doSearch flags settings model =
{ model | searchType = stype }
searchCmd =
doSearchCmd flags settings 0 model_
doSearchCmd flags settings 0 scroll model_
( newThrottle, cmd ) =
Throttle.try searchCmd model.throttle
@ -308,7 +311,7 @@ doSearchMore : Flags -> UiSettings -> Model -> ( Model, Cmd Msg )
doSearchMore flags settings model =
let
cmd =
doSearchCmd flags settings model.searchOffset model
doSearchCmd flags settings model.searchOffset False model
in
( { model | moreInProgress = True }
, cmd