mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-23 10:58:26 +00:00
263 lines
6.7 KiB
Elm
263 lines
6.7 KiB
Elm
{-
|
|
Copyright 2020 Eike K. & Contributors
|
|
|
|
SPDX-License-Identifier: AGPL-3.0-or-later
|
|
-}
|
|
|
|
|
|
module Comp.UiSettingsManage exposing
|
|
( Model
|
|
, Msg(..)
|
|
, UpdateResult
|
|
, init
|
|
, update
|
|
, view2
|
|
)
|
|
|
|
import Api
|
|
import Api.Model.BasicResult exposing (BasicResult)
|
|
import Comp.MenuBar as MB
|
|
import Comp.UiSettingsForm
|
|
import Comp.UiSettingsMigrate
|
|
import Data.Flags exposing (Flags)
|
|
import Data.UiSettings exposing (StoredUiSettings, UiSettings)
|
|
import Html exposing (..)
|
|
import Html.Attributes exposing (..)
|
|
import Http
|
|
import Messages.Comp.UiSettingsManage exposing (Texts)
|
|
import Styles as S
|
|
|
|
|
|
type alias Model =
|
|
{ formModel : Comp.UiSettingsForm.Model
|
|
, settings : Maybe UiSettings
|
|
, formResult : FormResult
|
|
, settingsMigrate : Comp.UiSettingsMigrate.Model
|
|
}
|
|
|
|
|
|
type FormResult
|
|
= FormInit
|
|
| FormUnchanged
|
|
| FormSaved
|
|
| FormHttpError Http.Error
|
|
| FormUnknownError
|
|
|
|
|
|
type Msg
|
|
= UiSettingsFormMsg Comp.UiSettingsForm.Msg
|
|
| UiSettingsMigrateMsg Comp.UiSettingsMigrate.Msg
|
|
| Submit
|
|
| UpdateSettings
|
|
| SaveSettingsResp UiSettings (Result Http.Error BasicResult)
|
|
| ReceiveBrowserSettings StoredUiSettings
|
|
|
|
|
|
init : Flags -> UiSettings -> ( Model, Cmd Msg )
|
|
init flags settings =
|
|
let
|
|
( fm, fc ) =
|
|
Comp.UiSettingsForm.init flags settings
|
|
|
|
( mm, mc ) =
|
|
Comp.UiSettingsMigrate.init flags
|
|
in
|
|
( { formModel = fm
|
|
, settings = Nothing
|
|
, formResult = FormInit
|
|
, settingsMigrate = mm
|
|
}
|
|
, Cmd.batch
|
|
[ Cmd.map UiSettingsFormMsg fc
|
|
, Cmd.map UiSettingsMigrateMsg mc
|
|
]
|
|
)
|
|
|
|
|
|
|
|
--- update
|
|
|
|
|
|
type alias UpdateResult =
|
|
{ model : Model
|
|
, cmd : Cmd Msg
|
|
, sub : Sub Msg
|
|
, newSettings : Maybe UiSettings
|
|
}
|
|
|
|
|
|
update : Flags -> UiSettings -> Msg -> Model -> UpdateResult
|
|
update flags settings msg model =
|
|
case msg of
|
|
UiSettingsFormMsg lm ->
|
|
let
|
|
inSettings =
|
|
Maybe.withDefault settings model.settings
|
|
|
|
( m_, sett ) =
|
|
Comp.UiSettingsForm.update inSettings lm model.formModel
|
|
in
|
|
{ model =
|
|
{ model
|
|
| formModel = m_
|
|
, settings =
|
|
if sett == Nothing then
|
|
model.settings
|
|
|
|
else
|
|
sett
|
|
, formResult =
|
|
if sett /= Nothing then
|
|
FormInit
|
|
|
|
else
|
|
model.formResult
|
|
}
|
|
, cmd = Cmd.none
|
|
, sub = Sub.none
|
|
, newSettings = Nothing
|
|
}
|
|
|
|
UiSettingsMigrateMsg lm ->
|
|
let
|
|
result =
|
|
Comp.UiSettingsMigrate.update flags lm model.settingsMigrate
|
|
in
|
|
{ model = { model | settingsMigrate = result.model }
|
|
, cmd = Cmd.map UiSettingsMigrateMsg result.cmd
|
|
, sub = Sub.map UiSettingsMigrateMsg result.sub
|
|
, newSettings = result.newSettings
|
|
}
|
|
|
|
ReceiveBrowserSettings sett ->
|
|
let
|
|
lm =
|
|
UiSettingsMigrateMsg (Comp.UiSettingsMigrate.receiveBrowserSettings sett)
|
|
in
|
|
update flags settings lm model
|
|
|
|
Submit ->
|
|
case model.settings of
|
|
Just s ->
|
|
{ model = { model | formResult = FormInit }
|
|
, cmd = Api.saveClientSettings flags s (SaveSettingsResp s)
|
|
, sub = Sub.none
|
|
, newSettings = Nothing
|
|
}
|
|
|
|
Nothing ->
|
|
{ model = { model | formResult = FormUnchanged }
|
|
, cmd = Cmd.none
|
|
, sub = Sub.none
|
|
, newSettings = Nothing
|
|
}
|
|
|
|
SaveSettingsResp newSettings (Ok res) ->
|
|
if res.success then
|
|
{ model = { model | formResult = FormSaved }
|
|
, cmd = Cmd.none
|
|
, sub = Sub.none
|
|
, newSettings = Just newSettings
|
|
}
|
|
|
|
else
|
|
{ model = { model | formResult = FormUnknownError }
|
|
, cmd = Cmd.none
|
|
, sub = Sub.none
|
|
, newSettings = Nothing
|
|
}
|
|
|
|
SaveSettingsResp _ (Err err) ->
|
|
UpdateResult { model | formResult = FormHttpError err } Cmd.none Sub.none Nothing
|
|
|
|
UpdateSettings ->
|
|
let
|
|
( fm, fc ) =
|
|
Comp.UiSettingsForm.init flags settings
|
|
in
|
|
{ model = { model | formModel = fm }
|
|
, cmd = Cmd.map UiSettingsFormMsg fc
|
|
, sub = Sub.none
|
|
, newSettings = Nothing
|
|
}
|
|
|
|
|
|
|
|
--- View2
|
|
|
|
|
|
isError : Model -> Bool
|
|
isError model =
|
|
case model.formResult of
|
|
FormSaved ->
|
|
False
|
|
|
|
FormInit ->
|
|
False
|
|
|
|
FormUnchanged ->
|
|
True
|
|
|
|
FormHttpError _ ->
|
|
True
|
|
|
|
FormUnknownError ->
|
|
True
|
|
|
|
|
|
isSuccess : Model -> Bool
|
|
isSuccess model =
|
|
not (isError model)
|
|
|
|
|
|
view2 : Texts -> Flags -> UiSettings -> String -> Model -> Html Msg
|
|
view2 texts flags settings classes model =
|
|
div [ class classes ]
|
|
[ MB.view
|
|
{ start =
|
|
[ MB.PrimaryButton
|
|
{ tagger = Submit
|
|
, label = texts.basics.submit
|
|
, title = texts.saveSettings
|
|
, icon = Just "fa fa-save"
|
|
}
|
|
]
|
|
, end = []
|
|
, rootClasses = "mb-4"
|
|
}
|
|
, div []
|
|
[ Html.map UiSettingsMigrateMsg
|
|
(Comp.UiSettingsMigrate.view model.settingsMigrate)
|
|
]
|
|
, div
|
|
[ classList
|
|
[ ( S.successMessage, isSuccess model )
|
|
, ( S.errorMessage, isError model )
|
|
, ( "hidden", model.formResult == FormInit )
|
|
]
|
|
]
|
|
[ case model.formResult of
|
|
FormInit ->
|
|
text ""
|
|
|
|
FormUnchanged ->
|
|
text texts.settingsUnchanged
|
|
|
|
FormHttpError err ->
|
|
text (texts.httpError err)
|
|
|
|
FormSaved ->
|
|
text texts.settingsSaved
|
|
|
|
FormUnknownError ->
|
|
text texts.unknownSaveError
|
|
]
|
|
, Html.map UiSettingsFormMsg
|
|
(Comp.UiSettingsForm.view2
|
|
texts.uiSettingsForm
|
|
flags
|
|
settings
|
|
model.formModel
|
|
)
|
|
]
|