mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-04-18 05:49:32 +00:00
Add api functions for getting/setting client settings
This commit is contained in:
parent
414ffba453
commit
9f76357879
@ -37,6 +37,7 @@ module Api exposing
|
||||
, deleteUser
|
||||
, fileURL
|
||||
, getAttachmentMeta
|
||||
, getClientSettings
|
||||
, getCollective
|
||||
, getCollectiveSettings
|
||||
, getContacts
|
||||
@ -91,6 +92,7 @@ module Api exposing
|
||||
, removeTagsMultiple
|
||||
, reprocessItem
|
||||
, reprocessMultiple
|
||||
, saveClientSettings
|
||||
, sendMail
|
||||
, setAttachmentName
|
||||
, setCollectiveSettings
|
||||
@ -204,8 +206,10 @@ import Api.Model.VersionInfo exposing (VersionInfo)
|
||||
import Data.ContactType exposing (ContactType)
|
||||
import Data.Flags exposing (Flags)
|
||||
import Data.Priority exposing (Priority)
|
||||
import Data.UiSettings exposing (UiSettings)
|
||||
import File exposing (File)
|
||||
import Http
|
||||
import Json.Decode as JsonDecode
|
||||
import Json.Encode as JsonEncode
|
||||
import Set exposing (Set)
|
||||
import Task
|
||||
@ -1981,6 +1985,44 @@ getItemProposals flags item receive =
|
||||
|
||||
|
||||
|
||||
--- Client Settings
|
||||
|
||||
|
||||
getClientSettings : Flags -> (Result Http.Error UiSettings -> msg) -> Cmd msg
|
||||
getClientSettings flags receive =
|
||||
let
|
||||
defaults =
|
||||
Data.UiSettings.defaults
|
||||
|
||||
decoder =
|
||||
JsonDecode.map (\s -> Data.UiSettings.merge s defaults)
|
||||
Data.UiSettings.storedUiSettingsDecoder
|
||||
in
|
||||
Http2.authGet
|
||||
{ url = flags.config.baseUrl ++ "/api/v1/sec/clientSettings/webClient"
|
||||
, account = getAccount flags
|
||||
, expect = Http.expectJson receive decoder
|
||||
}
|
||||
|
||||
|
||||
saveClientSettings : Flags -> UiSettings -> (Result Http.Error BasicResult -> msg) -> Cmd msg
|
||||
saveClientSettings flags settings receive =
|
||||
let
|
||||
storedSettings =
|
||||
Data.UiSettings.toStoredUiSettings settings
|
||||
|
||||
encode =
|
||||
Data.UiSettings.storedUiSettingsEncode storedSettings
|
||||
in
|
||||
Http2.authPut
|
||||
{ url = flags.config.baseUrl ++ "/api/v1/sec/clientSettings/webClient"
|
||||
, account = getAccount flags
|
||||
, body = Http.jsonBody encode
|
||||
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
|
||||
}
|
||||
|
||||
|
||||
|
||||
--- Helper
|
||||
|
||||
|
||||
|
@ -6,6 +6,7 @@ module Comp.UiSettingsManage exposing
|
||||
, view2
|
||||
)
|
||||
|
||||
import Api
|
||||
import Api.Model.BasicResult exposing (BasicResult)
|
||||
import Comp.MenuBar as MB
|
||||
import Comp.UiSettingsForm
|
||||
@ -14,6 +15,7 @@ import Data.UiSettings exposing (UiSettings)
|
||||
import Html exposing (..)
|
||||
import Html.Attributes exposing (..)
|
||||
import Html.Events exposing (onClick)
|
||||
import Http
|
||||
import Messages.Comp.UiSettingsManage exposing (Texts)
|
||||
import Ports
|
||||
import Styles as S
|
||||
@ -31,6 +33,7 @@ type Msg
|
||||
| Submit
|
||||
| SettingsSaved
|
||||
| UpdateSettings
|
||||
| SaveSettingsResp (Result Http.Error BasicResult)
|
||||
|
||||
|
||||
init : Flags -> UiSettings -> ( Model, Cmd Msg )
|
||||
@ -85,7 +88,7 @@ update flags settings msg model =
|
||||
case model.settings of
|
||||
Just s ->
|
||||
( { model | message = Nothing }
|
||||
, Ports.storeUiSettings flags s
|
||||
, Api.saveClientSettings flags s SaveSettingsResp
|
||||
, Ports.onUiSettingsSaved SettingsSaved
|
||||
)
|
||||
|
||||
@ -101,6 +104,12 @@ update flags settings msg model =
|
||||
, Sub.none
|
||||
)
|
||||
|
||||
SaveSettingsResp (Ok res) ->
|
||||
( { model | message = Just res }, Cmd.none, Sub.none )
|
||||
|
||||
SaveSettingsResp (Err err) ->
|
||||
( model, Cmd.none, Sub.none )
|
||||
|
||||
UpdateSettings ->
|
||||
let
|
||||
( fm, fc ) =
|
||||
|
@ -15,6 +15,8 @@ module Data.UiSettings exposing
|
||||
, mergeDefaults
|
||||
, posFromString
|
||||
, posToString
|
||||
, storedUiSettingsDecoder
|
||||
, storedUiSettingsEncode
|
||||
, tagColor
|
||||
, tagColorFg2
|
||||
, tagColorString2
|
||||
@ -30,6 +32,9 @@ import Data.UiTheme exposing (UiTheme)
|
||||
import Dict exposing (Dict)
|
||||
import Html exposing (Attribute)
|
||||
import Html.Attributes as HA
|
||||
import Json.Decode as Decode
|
||||
import Json.Decode.Pipeline as P
|
||||
import Json.Encode as Encode
|
||||
import Messages
|
||||
import Messages.UiLanguage exposing (UiLanguage)
|
||||
|
||||
@ -67,6 +72,70 @@ type alias StoredUiSettings =
|
||||
}
|
||||
|
||||
|
||||
storedUiSettingsDecoder : Decode.Decoder StoredUiSettings
|
||||
storedUiSettingsDecoder =
|
||||
let
|
||||
maybeInt =
|
||||
Decode.maybe Decode.int
|
||||
|
||||
maybeString =
|
||||
Decode.maybe Decode.string
|
||||
in
|
||||
Decode.succeed StoredUiSettings
|
||||
|> P.optional "itemSearchPageSize" maybeInt Nothing
|
||||
|> P.optional "tagCategoryColors" (Decode.keyValuePairs Decode.string) []
|
||||
|> P.optional "nativePdfPreview" Decode.bool False
|
||||
|> P.optional "itemSearchNoteLength" maybeInt Nothing
|
||||
|> P.optional "itemDetailNotesPosition" maybeString Nothing
|
||||
|> P.optional "searchMenuFolderCount" maybeInt Nothing
|
||||
|> P.optional "searchMenuTagCount" maybeInt Nothing
|
||||
|> P.optional "searchMenuTagCatCount" maybeInt Nothing
|
||||
|> P.optional "formFields" (Decode.maybe <| Decode.list Decode.string) Nothing
|
||||
|> P.optional "itemDetailShortcuts" Decode.bool False
|
||||
|> P.optional "searchMenuVisible" Decode.bool False
|
||||
|> P.optional "editMenuVisible" Decode.bool False
|
||||
|> P.optional "cardPreviewSize" maybeString Nothing
|
||||
|> P.optional "cardTitleTemplate" maybeString Nothing
|
||||
|> P.optional "cardSubtitleTemplate" maybeString Nothing
|
||||
|> P.optional "searchStatsVisible" Decode.bool False
|
||||
|> P.optional "cardPreviewFullWidth" Decode.bool False
|
||||
|> P.optional "uiTheme" maybeString Nothing
|
||||
|> P.optional "sideMenuVisible" Decode.bool False
|
||||
|> P.optional "powerSearchEnabled" Decode.bool False
|
||||
|> P.optional "uiLang" maybeString Nothing
|
||||
|
||||
|
||||
storedUiSettingsEncode : StoredUiSettings -> Encode.Value
|
||||
storedUiSettingsEncode value =
|
||||
let
|
||||
maybeEnc enca ma =
|
||||
Maybe.map enca ma |> Maybe.withDefault Encode.null
|
||||
in
|
||||
Encode.object
|
||||
[ ( "itemSearchPageSize", maybeEnc Encode.int value.itemSearchPageSize )
|
||||
, ( "tagCategoryColors", Encode.dict identity Encode.string (Dict.fromList value.tagCategoryColors) )
|
||||
, ( "nativePdfPreview", Encode.bool value.nativePdfPreview )
|
||||
, ( "itemSearchNoteLength", maybeEnc Encode.int value.itemSearchNoteLength )
|
||||
, ( "itemDetailNotesPosition", maybeEnc Encode.string value.itemDetailNotesPosition )
|
||||
, ( "searchMenuFolderCount", maybeEnc Encode.int value.searchMenuFolderCount )
|
||||
, ( "searchMenuTagCount", maybeEnc Encode.int value.searchMenuTagCount )
|
||||
, ( "searchMenuTagCatCount", maybeEnc Encode.int value.searchMenuTagCatCount )
|
||||
, ( "formFields", maybeEnc (Encode.list Encode.string) value.formFields )
|
||||
, ( "itemDetailShortcuts", Encode.bool value.itemDetailShortcuts )
|
||||
, ( "searchMenuVisible", Encode.bool value.searchMenuVisible )
|
||||
, ( "editMenuVisible", Encode.bool value.editMenuVisible )
|
||||
, ( "cardPreviewSize", maybeEnc Encode.string value.cardPreviewSize )
|
||||
, ( "cardTitleTemplate", maybeEnc Encode.string value.cardTitleTemplate )
|
||||
, ( "cardSubtitleTemplate", maybeEnc Encode.string value.cardSubtitleTemplate )
|
||||
, ( "searchStatsVisible", Encode.bool value.searchStatsVisible )
|
||||
, ( "cardPreviewFullWidth", Encode.bool value.cardPreviewFullWidth )
|
||||
, ( "uiTheme", maybeEnc Encode.string value.uiTheme )
|
||||
, ( "sideMenuVisible", Encode.bool value.sideMenuVisible )
|
||||
, ( "powerSearchEnabled", Encode.bool value.powerSearchEnabled )
|
||||
, ( "uiLang", maybeEnc Encode.string value.uiLang )
|
||||
]
|
||||
|
||||
|
||||
{-| Settings for the web ui. These fields are all mandatory, since
|
||||
there is always a default value.
|
||||
|
||||
|
@ -12,7 +12,6 @@ port module Ports exposing
|
||||
)
|
||||
|
||||
import Api.Model.AuthResult exposing (AuthResult)
|
||||
import Api.Model.BasicResult exposing (BasicResult)
|
||||
import Data.Flags exposing (Flags)
|
||||
import Data.QueryParseResult exposing (QueryParseResult)
|
||||
import Data.UiSettings exposing (StoredUiSettings, UiSettings)
|
||||
|
Loading…
x
Reference in New Issue
Block a user