mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-22 02:18:26 +00:00
Introduce ui settings and let user set page size for item search
This commit is contained in:
@ -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
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user