mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-23 10:58:26 +00:00
194 lines
5.2 KiB
Elm
194 lines
5.2 KiB
Elm
{-
|
|
Copyright 2020 Eike K. & Contributors
|
|
|
|
SPDX-License-Identifier: AGPL-3.0-or-later
|
|
-}
|
|
|
|
|
|
module Comp.UiSettingsMigrate exposing
|
|
( Model
|
|
, Msg
|
|
, UpdateResult
|
|
, init
|
|
, receiveBrowserSettings
|
|
, update
|
|
, view
|
|
)
|
|
|
|
import Api
|
|
import Api.Model.BasicResult exposing (BasicResult)
|
|
import Data.Flags exposing (Flags)
|
|
import Data.UiSettings exposing (StoredUiSettings, UiSettings)
|
|
import Html exposing (..)
|
|
import Html.Attributes exposing (class, href, title)
|
|
import Html.Events exposing (onClick)
|
|
import Http
|
|
import Messages.Comp.HttpError
|
|
import Ports
|
|
import Styles as S
|
|
|
|
|
|
init : Flags -> ( Model, Cmd Msg )
|
|
init flags =
|
|
( Initialized
|
|
, Cmd.batch
|
|
[ Api.getClientSettings flags GetClientSettingsResp
|
|
, requestBrowserSettings flags
|
|
]
|
|
)
|
|
|
|
|
|
type Model
|
|
= Initialized
|
|
| WaitingForHttp StoredUiSettings
|
|
| WaitingForBrowser
|
|
| MigrateActive StoredUiSettings
|
|
| MigrateDone
|
|
| MigrateRequestRunning
|
|
| MigrateRequestFailed String
|
|
|
|
|
|
type Msg
|
|
= GetClientSettingsResp (Result Http.Error UiSettings)
|
|
| GetBrowserSettings StoredUiSettings
|
|
| MigrateSettings StoredUiSettings
|
|
| SaveSettingsResp UiSettings (Result Http.Error BasicResult)
|
|
|
|
|
|
receiveBrowserSettings : StoredUiSettings -> Msg
|
|
receiveBrowserSettings sett =
|
|
GetBrowserSettings sett
|
|
|
|
|
|
|
|
--- Update
|
|
|
|
|
|
requestBrowserSettings : Flags -> Cmd Msg
|
|
requestBrowserSettings flags =
|
|
case flags.account of
|
|
Just acc ->
|
|
Ports.requestUiSettings acc
|
|
|
|
Nothing ->
|
|
Cmd.none
|
|
|
|
|
|
type alias UpdateResult =
|
|
{ model : Model
|
|
, cmd : Cmd Msg
|
|
, sub : Sub Msg
|
|
, newSettings : Maybe UiSettings
|
|
}
|
|
|
|
|
|
update : Flags -> Msg -> Model -> UpdateResult
|
|
update flags msg model =
|
|
let
|
|
empty =
|
|
{ model = model
|
|
, cmd = Cmd.none
|
|
, sub = Sub.none
|
|
, newSettings = Nothing
|
|
}
|
|
in
|
|
case msg of
|
|
GetClientSettingsResp (Err (Http.BadStatus 404)) ->
|
|
case model of
|
|
Initialized ->
|
|
{ model = WaitingForBrowser
|
|
, cmd = requestBrowserSettings flags
|
|
, sub = Sub.none
|
|
, newSettings = Nothing
|
|
}
|
|
|
|
WaitingForHttp sett ->
|
|
{ empty | model = MigrateActive sett }
|
|
|
|
_ ->
|
|
{ empty
|
|
| sub = Sub.none
|
|
, cmd = requestBrowserSettings flags
|
|
, model = model
|
|
}
|
|
|
|
GetBrowserSettings sett ->
|
|
case model of
|
|
Initialized ->
|
|
{ empty | model = WaitingForHttp sett }
|
|
|
|
WaitingForBrowser ->
|
|
{ empty | model = MigrateActive sett }
|
|
|
|
_ ->
|
|
empty
|
|
|
|
GetClientSettingsResp _ ->
|
|
{ empty | model = MigrateDone }
|
|
|
|
MigrateSettings settings ->
|
|
let
|
|
uiSettings =
|
|
Data.UiSettings.merge settings Data.UiSettings.defaults
|
|
|
|
cmd =
|
|
Api.saveClientSettings flags uiSettings (SaveSettingsResp uiSettings)
|
|
in
|
|
{ empty | model = MigrateRequestRunning, cmd = cmd }
|
|
|
|
SaveSettingsResp settings (Ok res) ->
|
|
if res.success then
|
|
{ empty | model = MigrateDone, newSettings = Just settings }
|
|
|
|
else
|
|
{ empty | model = MigrateRequestFailed "Unknown error saving settings." }
|
|
|
|
SaveSettingsResp _ (Err err) ->
|
|
{ empty | model = MigrateRequestFailed <| Messages.Comp.HttpError.gb err }
|
|
|
|
|
|
|
|
--- View
|
|
{-
|
|
Note: this module will be removed later, it only exists for the
|
|
transition from storing ui settings at the server. Therefore
|
|
strings here are not externalized; translation is not necessary.
|
|
|
|
-}
|
|
|
|
|
|
view : Model -> Html Msg
|
|
view model =
|
|
case model of
|
|
MigrateActive sett ->
|
|
div
|
|
[ class (S.box ++ " px-2 py-2")
|
|
, class S.infoMessage
|
|
, class "flex flex-col"
|
|
]
|
|
[ div [ class S.header2 ] [ text "Migrate your settings" ]
|
|
, p [ class " mb-3" ]
|
|
[ text "The UI settings are now stored at the server. You have "
|
|
, text "settings stored at the browser that you can now move to the "
|
|
, text "server by clicking below."
|
|
]
|
|
, p [ class " mb-2" ]
|
|
[ text "Alternatively, change the default settings here and submit "
|
|
, text "this form. This message will disappear as soon as there are "
|
|
, text "settings at the server."
|
|
]
|
|
, div [ class "flex flex-row items-center justify-center" ]
|
|
[ a
|
|
[ href "#"
|
|
, title "Move current settings to the server"
|
|
, onClick (MigrateSettings sett)
|
|
, class S.primaryButton
|
|
]
|
|
[ text "Migrate current settings"
|
|
]
|
|
]
|
|
]
|
|
|
|
_ ->
|
|
span [ class "hidden" ] []
|