mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-21 18:08:25 +00:00
Introduce ui settings and let user set page size for item search
This commit is contained in:
63
modules/webapp/src/main/elm/Data/UiSettings.elm
Normal file
63
modules/webapp/src/main/elm/Data/UiSettings.elm
Normal 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
|
Reference in New Issue
Block a user