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,119 @@
module Comp.UiSettingsManage exposing
( Model
, Msg
, init
, update
, view
)
import Api.Model.BasicResult exposing (BasicResult)
import Comp.UiSettingsForm
import Data.Flags exposing (Flags)
import Data.UiSettings exposing (UiSettings)
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (onClick)
import Ports
type alias Model =
{ formModel : Comp.UiSettingsForm.Model
, settings : Maybe UiSettings
, message : Maybe BasicResult
}
type Msg
= UiSettingsFormMsg Comp.UiSettingsForm.Msg
| Submit
| SettingsSaved
init : UiSettings -> Model
init defaults =
{ formModel = Comp.UiSettingsForm.initWith defaults
, settings = Nothing
, message = Nothing
}
--- update
update : Flags -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg )
update flags msg model =
case msg of
UiSettingsFormMsg lm ->
let
( m_, sett ) =
Comp.UiSettingsForm.update lm model.formModel
in
( { model
| formModel = m_
, settings = sett
, message = Nothing
}
, Cmd.none
, Sub.none
)
Submit ->
case model.settings of
Just s ->
( { model | message = Nothing }
, Ports.storeUiSettings flags s
, Ports.onUiSettingsSaved SettingsSaved
)
Nothing ->
( { model | message = Just (BasicResult False "Settings unchanged or invalid.") }
, Cmd.none
, Sub.none
)
SettingsSaved ->
( { model | message = Just (BasicResult True "Settings saved.") }
, Cmd.none
, Sub.none
)
--- View
isError : Model -> Bool
isError model =
Maybe.map .success model.message == Just False
isSuccess : Model -> Bool
isSuccess model =
Maybe.map .success model.message == Just True
view : String -> Model -> Html Msg
view classes model =
div [ class classes ]
[ Html.map UiSettingsFormMsg (Comp.UiSettingsForm.view model.formModel)
, div [ class "ui divider" ] []
, button
[ class "ui primary button"
, onClick Submit
]
[ text "Submit"
]
, div
[ classList
[ ( "ui message", True )
, ( "success", isSuccess model )
, ( "error", isError model )
, ( "hidden invisible", model.message == Nothing )
]
]
[ Maybe.map .message model.message
|> Maybe.withDefault ""
|> text
]
]