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

View File

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