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

@ -0,0 +1,63 @@
module Data.UiSettings exposing
( StoredUiSettings
, UiSettings
, defaults
, merge
, mergeDefaults
, toStoredUiSettings
)
{-| Settings for the web ui. All fields should be optional, since it
is loaded from local storage.
Making fields optional, allows it to evolve without breaking previous
versions. Also if a user is logged out, an empty object is send to
force default settings.
-}
type alias StoredUiSettings =
{ itemSearchPageSize : Maybe Int
}
{-| Settings for the web ui. These fields are all mandatory, since
there is always a default value.
When loaded from local storage, all optional fields can fallback to a
default value, converting the StoredUiSettings into a UiSettings.
-}
type alias UiSettings =
{ itemSearchPageSize : Int
}
defaults : UiSettings
defaults =
{ itemSearchPageSize = 90
}
merge : StoredUiSettings -> UiSettings -> UiSettings
merge given fallback =
{ itemSearchPageSize =
choose given.itemSearchPageSize fallback.itemSearchPageSize
}
mergeDefaults : StoredUiSettings -> UiSettings
mergeDefaults given =
merge given defaults
toStoredUiSettings : UiSettings -> StoredUiSettings
toStoredUiSettings settings =
{ itemSearchPageSize = Just settings.itemSearchPageSize
}
choose : Maybe a -> a -> a
choose m1 m2 =
Maybe.withDefault m2 m1