docspell/modules/webapp/src/main/elm/Page/UserSettings/Update.elm
2021-09-21 22:35:38 +02:00

175 lines
5.4 KiB
Elm

{-
Copyright 2020 Eike K. & Contributors
SPDX-License-Identifier: AGPL-3.0-or-later
-}
module Page.UserSettings.Update exposing (UpdateResult, update)
import Comp.ChangePasswordForm
import Comp.EmailSettingsManage
import Comp.ImapSettingsManage
import Comp.NotificationManage
import Comp.OtpSetup
import Comp.ScanMailboxManage
import Comp.UiSettingsManage
import Data.Flags exposing (Flags)
import Data.UiSettings exposing (UiSettings)
import Page.UserSettings.Data exposing (..)
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
SetTab t ->
let
m =
{ model | currentTab = Just t }
in
case t of
EmailSettingsTab ->
let
( em, c ) =
Comp.EmailSettingsManage.init flags
in
{ model = { m | emailSettingsModel = em }
, cmd = Cmd.map EmailSettingsMsg c
, sub = Sub.none
, newSettings = Nothing
}
ImapSettingsTab ->
let
( em, c ) =
Comp.ImapSettingsManage.init flags
in
{ model = { m | imapSettingsModel = em }
, cmd = Cmd.map ImapSettingsMsg c
, sub = Sub.none
, newSettings = Nothing
}
ChangePassTab ->
UpdateResult m Cmd.none Sub.none Nothing
NotificationTab ->
let
initCmd =
Cmd.map NotificationMsg
(Tuple.second (Comp.NotificationManage.init flags))
in
UpdateResult m initCmd Sub.none Nothing
ScanMailboxTab ->
let
initCmd =
Cmd.map ScanMailboxMsg
(Tuple.second (Comp.ScanMailboxManage.init flags))
in
UpdateResult m initCmd Sub.none Nothing
UiSettingsTab ->
UpdateResult m Cmd.none Sub.none Nothing
OtpTab ->
UpdateResult m Cmd.none Sub.none Nothing
ChangePassMsg m ->
let
( m2, c2 ) =
Comp.ChangePasswordForm.update flags m model.changePassModel
in
{ model = { model | changePassModel = m2 }
, cmd = Cmd.map ChangePassMsg c2
, sub = Sub.none
, newSettings = Nothing
}
EmailSettingsMsg m ->
let
( m2, c2 ) =
Comp.EmailSettingsManage.update flags m model.emailSettingsModel
in
{ model = { model | emailSettingsModel = m2 }
, cmd = Cmd.map EmailSettingsMsg c2
, sub = Sub.none
, newSettings = Nothing
}
ImapSettingsMsg m ->
let
( m2, c2 ) =
Comp.ImapSettingsManage.update flags m model.imapSettingsModel
in
{ model = { model | imapSettingsModel = m2 }
, cmd = Cmd.map ImapSettingsMsg c2
, sub = Sub.none
, newSettings = Nothing
}
NotificationMsg lm ->
let
( m2, c2 ) =
Comp.NotificationManage.update flags lm model.notificationModel
in
{ model = { model | notificationModel = m2 }
, cmd = Cmd.map NotificationMsg c2
, sub = Sub.none
, newSettings = Nothing
}
ScanMailboxMsg lm ->
let
( m2, c2 ) =
Comp.ScanMailboxManage.update flags lm model.scanMailboxModel
in
{ model = { model | scanMailboxModel = m2 }
, cmd = Cmd.map ScanMailboxMsg c2
, sub = Sub.none
, newSettings = Nothing
}
UiSettingsMsg lm ->
let
res =
Comp.UiSettingsManage.update flags settings lm model.uiSettingsModel
in
{ model = { model | uiSettingsModel = res.model }
, cmd = Cmd.map UiSettingsMsg res.cmd
, sub = Sub.map UiSettingsMsg res.sub
, newSettings = res.newSettings
}
OtpSetupMsg lm ->
let
( otpm, otpc ) =
Comp.OtpSetup.update flags lm model.otpSetupModel
in
{ model = { model | otpSetupModel = otpm }
, cmd = Cmd.map OtpSetupMsg otpc
, sub = Sub.none
, newSettings = Nothing
}
UpdateSettings ->
update flags
settings
(UiSettingsMsg Comp.UiSettingsManage.UpdateSettings)
model
ReceiveBrowserSettings sett ->
let
lm =
Comp.UiSettingsManage.ReceiveBrowserSettings sett
in
update flags settings (UiSettingsMsg lm) model