Introduce ui settings and let user set page size for item search

This commit is contained in:
Eike Kettner
2020-06-07 00:51:11 +02:00
parent 6abdb95f02
commit 79fc5a30a1
13 changed files with 530 additions and 66 deletions

View File

@ -6,7 +6,6 @@ module Page.Home.Data exposing
, init
, itemNav
, resultsBelowLimit
, searchLimit
)
import Api
@ -15,6 +14,7 @@ import Comp.ItemCardList
import Comp.SearchMenu
import Data.Flags exposing (Flags)
import Data.Items
import Data.UiSettings exposing (UiSettings)
import Http
@ -27,6 +27,7 @@ type alias Model =
, searchOffset : Int
, moreAvailable : Bool
, moreInProgress : Bool
, uiSettings : UiSettings
}
@ -40,6 +41,7 @@ init _ =
, searchOffset = 0
, moreAvailable = True
, moreInProgress = False
, uiSettings = Data.UiSettings.defaults
}
@ -49,9 +51,11 @@ type Msg
| ResetSearch
| ItemCardListMsg Comp.ItemCardList.Msg
| ItemSearchResp (Result Http.Error ItemLightList)
| ItemSearchAddResp (Result Http.Error ItemLightList)
| DoSearch
| ToggleSearchMenu
| LoadMore
| GetUiSettings UiSettings
type ViewMode
@ -73,24 +77,23 @@ itemNav id model =
}
searchLimit : Int
searchLimit =
90
doSearchCmd : Flags -> Int -> Comp.SearchMenu.Model -> Cmd Msg
doSearchCmd : Flags -> Int -> Model -> Cmd Msg
doSearchCmd flags offset model =
let
smask =
Comp.SearchMenu.getItemSearch model
Comp.SearchMenu.getItemSearch model.searchMenuModel
mask =
{ smask
| limit = searchLimit
| limit = model.uiSettings.itemSearchPageSize
, offset = offset
}
in
Api.itemSearch flags mask ItemSearchResp
if offset == 0 then
Api.itemSearch flags mask ItemSearchResp
else
Api.itemSearch flags mask ItemSearchAddResp
resultsBelowLimit : Model -> Bool
@ -99,4 +102,4 @@ resultsBelowLimit model =
len =
Data.Items.length model.itemListModel.results
in
len < searchLimit
len < model.uiSettings.itemSearchPageSize

View File

@ -15,7 +15,6 @@ update key flags msg model =
Init ->
Util.Update.andThen1
[ update key flags (SearchMenuMsg Comp.SearchMenu.Init)
, doSearch flags
]
model
@ -63,7 +62,22 @@ update key flags msg model =
ItemSearchResp (Ok list) ->
let
noff =
model.searchOffset + searchLimit
model.uiSettings.itemSearchPageSize
m =
{ model
| searchInProgress = False
, searchOffset = noff
, viewMode = Listing
, moreAvailable = list.groups /= []
}
in
update key flags (ItemCardListMsg (Comp.ItemCardList.SetResults list)) m
ItemSearchAddResp (Ok list) ->
let
noff =
model.searchOffset + model.uiSettings.itemSearchPageSize
m =
{ model
@ -74,11 +88,14 @@ update key flags msg model =
, moreAvailable = list.groups /= []
}
in
if model.searchOffset == 0 then
update key flags (ItemCardListMsg (Comp.ItemCardList.SetResults list)) m
update key flags (ItemCardListMsg (Comp.ItemCardList.AddResults list)) m
else
update key flags (ItemCardListMsg (Comp.ItemCardList.AddResults list)) m
ItemSearchAddResp (Err _) ->
( { model
| moreInProgress = False
}
, Cmd.none
)
ItemSearchResp (Err _) ->
( { model
@ -106,12 +123,19 @@ update key flags msg model =
else
( model, Cmd.none )
GetUiSettings settings ->
let
m_ =
{ model | uiSettings = settings }
in
doSearch flags m_
doSearch : Flags -> Model -> ( Model, Cmd Msg )
doSearch flags model =
let
cmd =
doSearchCmd flags 0 model.searchMenuModel
doSearchCmd flags 0 model
in
( { model
| searchInProgress = True
@ -126,7 +150,7 @@ doSearchMore : Flags -> Model -> ( Model, Cmd Msg )
doSearchMore flags model =
let
cmd =
doSearchCmd flags model.searchOffset model.searchMenuModel
doSearchCmd flags model.searchOffset model
in
( { model | moreInProgress = True, viewMode = Listing }
, cmd