mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-06 15:15:58 +00:00
Store and load client settings
This commit is contained in:
parent
9f76357879
commit
9ccc3ce438
@ -7,6 +7,7 @@ module App.Data exposing
|
|||||||
)
|
)
|
||||||
|
|
||||||
import Api.Model.AuthResult exposing (AuthResult)
|
import Api.Model.AuthResult exposing (AuthResult)
|
||||||
|
import Api.Model.BasicResult exposing (BasicResult)
|
||||||
import Api.Model.VersionInfo exposing (VersionInfo)
|
import Api.Model.VersionInfo exposing (VersionInfo)
|
||||||
import Browser exposing (UrlRequest)
|
import Browser exposing (UrlRequest)
|
||||||
import Browser.Navigation exposing (Key)
|
import Browser.Navigation exposing (Key)
|
||||||
@ -155,11 +156,12 @@ type Msg
|
|||||||
| SessionCheckResp (Result Http.Error AuthResult)
|
| SessionCheckResp (Result Http.Error AuthResult)
|
||||||
| ToggleNavMenu
|
| ToggleNavMenu
|
||||||
| ToggleUserMenu
|
| ToggleUserMenu
|
||||||
| GetUiSettings UiSettings
|
| GetUiSettings (Result Http.Error UiSettings)
|
||||||
| ToggleSidebar
|
| ToggleSidebar
|
||||||
| ToggleDarkMode
|
| ToggleDarkMode
|
||||||
| ToggleLangMenu
|
| ToggleLangMenu
|
||||||
| SetLanguage UiLanguage
|
| SetLanguage UiLanguage
|
||||||
|
| ClientSettingsSaveResp UiSettings (Result Http.Error BasicResult)
|
||||||
|
|
||||||
|
|
||||||
defaultPage : Flags -> Page
|
defaultPage : Flags -> Page
|
||||||
|
@ -8,6 +8,7 @@ import App.Data exposing (..)
|
|||||||
import Browser exposing (UrlRequest(..))
|
import Browser exposing (UrlRequest(..))
|
||||||
import Browser.Navigation as Nav
|
import Browser.Navigation as Nav
|
||||||
import Data.Flags
|
import Data.Flags
|
||||||
|
import Data.UiSettings exposing (UiSettings)
|
||||||
import Data.UiTheme
|
import Data.UiTheme
|
||||||
import Page exposing (Page(..))
|
import Page exposing (Page(..))
|
||||||
import Page.CollectiveSettings.Data
|
import Page.CollectiveSettings.Data
|
||||||
@ -65,11 +66,11 @@ updateWithSub msg model =
|
|||||||
{ settings | uiTheme = next }
|
{ settings | uiTheme = next }
|
||||||
in
|
in
|
||||||
-- when authenticated, store it in settings only
|
-- when authenticated, store it in settings only
|
||||||
-- once new settings arrive via a subscription,
|
-- once new settings are successfully saved (the
|
||||||
-- the ui is updated. so it is also updated on
|
-- response is arrived), the ui is updated. so it
|
||||||
-- page refresh
|
-- is also updated on page refresh
|
||||||
( { model | userMenuOpen = False }
|
( { model | userMenuOpen = False }
|
||||||
, Ports.storeUiSettings model.flags newSettings
|
, Api.saveClientSettings model.flags newSettings (ClientSettingsSaveResp newSettings)
|
||||||
, Sub.none
|
, Sub.none
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -84,6 +85,16 @@ updateWithSub msg model =
|
|||||||
, Sub.none
|
, Sub.none
|
||||||
)
|
)
|
||||||
|
|
||||||
|
ClientSettingsSaveResp settings (Ok res) ->
|
||||||
|
if res.success then
|
||||||
|
applyClientSettings model settings
|
||||||
|
|
||||||
|
else
|
||||||
|
( model, Cmd.none, Sub.none )
|
||||||
|
|
||||||
|
ClientSettingsSaveResp _ (Err _) ->
|
||||||
|
( model, Cmd.none, Sub.none )
|
||||||
|
|
||||||
ToggleLangMenu ->
|
ToggleLangMenu ->
|
||||||
( { model | langMenuOpen = not model.langMenuOpen }
|
( { model | langMenuOpen = not model.langMenuOpen }
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
@ -258,22 +269,30 @@ updateWithSub msg model =
|
|||||||
, Sub.none
|
, Sub.none
|
||||||
)
|
)
|
||||||
|
|
||||||
GetUiSettings settings ->
|
GetUiSettings (Ok settings) ->
|
||||||
let
|
applyClientSettings model settings
|
||||||
setTheme =
|
|
||||||
Ports.setUiTheme settings.uiTheme
|
GetUiSettings (Err _) ->
|
||||||
in
|
( model, Cmd.none, Sub.none )
|
||||||
Util.Update.andThen2
|
|
||||||
[ \m ->
|
|
||||||
( { m | sidebarVisible = settings.sideMenuVisible }
|
applyClientSettings : Model -> UiSettings -> ( Model, Cmd Msg, Sub Msg )
|
||||||
, setTheme
|
applyClientSettings model settings =
|
||||||
, Sub.none
|
let
|
||||||
)
|
setTheme =
|
||||||
, updateUserSettings Page.UserSettings.Data.UpdateSettings
|
Ports.setUiTheme settings.uiTheme
|
||||||
, updateHome Page.Home.Data.UiSettingsUpdated
|
in
|
||||||
, updateItemDetail Page.ItemDetail.Data.UiSettingsUpdated
|
Util.Update.andThen2
|
||||||
]
|
[ \m ->
|
||||||
{ model | uiSettings = settings }
|
( { m | sidebarVisible = settings.sideMenuVisible }
|
||||||
|
, setTheme
|
||||||
|
, Sub.none
|
||||||
|
)
|
||||||
|
, updateUserSettings Page.UserSettings.Data.UpdateSettings
|
||||||
|
, updateHome Page.Home.Data.UiSettingsUpdated
|
||||||
|
, updateItemDetail Page.ItemDetail.Data.UiSettingsUpdated
|
||||||
|
]
|
||||||
|
{ model | uiSettings = settings }
|
||||||
|
|
||||||
|
|
||||||
updateItemDetail : Page.ItemDetail.Data.Msg -> Model -> ( Model, Cmd Msg, Sub Msg )
|
updateItemDetail : Page.ItemDetail.Data.Msg -> Model -> ( Model, Cmd Msg, Sub Msg )
|
||||||
@ -360,14 +379,26 @@ updateQueue lmsg model =
|
|||||||
updateUserSettings : Page.UserSettings.Data.Msg -> Model -> ( Model, Cmd Msg, Sub Msg )
|
updateUserSettings : Page.UserSettings.Data.Msg -> Model -> ( Model, Cmd Msg, Sub Msg )
|
||||||
updateUserSettings lmsg model =
|
updateUserSettings lmsg model =
|
||||||
let
|
let
|
||||||
( lm, lc, ls ) =
|
( lm, lc, newClientSettings ) =
|
||||||
Page.UserSettings.Update.update model.flags model.uiSettings lmsg model.userSettingsModel
|
Page.UserSettings.Update.update model.flags model.uiSettings lmsg model.userSettingsModel
|
||||||
|
|
||||||
|
model_ =
|
||||||
|
{ model | userSettingsModel = lm }
|
||||||
|
|
||||||
|
( lm2, lc2, s2 ) =
|
||||||
|
case newClientSettings of
|
||||||
|
Just sett ->
|
||||||
|
applyClientSettings model_ sett
|
||||||
|
|
||||||
|
Nothing ->
|
||||||
|
( model_, Cmd.none, Sub.none )
|
||||||
in
|
in
|
||||||
( { model
|
( lm2
|
||||||
| userSettingsModel = lm
|
, Cmd.batch
|
||||||
}
|
[ Cmd.map UserSettingsMsg lc
|
||||||
, Cmd.map UserSettingsMsg lc
|
, lc2
|
||||||
, Sub.map UserSettingsMsg ls
|
]
|
||||||
|
, s2
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -415,14 +446,29 @@ updateHome lmsg model =
|
|||||||
_ ->
|
_ ->
|
||||||
Nothing
|
Nothing
|
||||||
|
|
||||||
( lm, lc, ls ) =
|
result =
|
||||||
Page.Home.Update.update mid model.key model.flags model.uiSettings lmsg model.homeModel
|
Page.Home.Update.update mid model.key model.flags model.uiSettings lmsg model.homeModel
|
||||||
|
|
||||||
|
model_ =
|
||||||
|
{ model | homeModel = result.model }
|
||||||
|
|
||||||
|
( lm, lc, ls ) =
|
||||||
|
case result.newSettings of
|
||||||
|
Just sett ->
|
||||||
|
applyClientSettings model_ sett
|
||||||
|
|
||||||
|
Nothing ->
|
||||||
|
( model_, Cmd.none, Sub.none )
|
||||||
in
|
in
|
||||||
( { model
|
( lm
|
||||||
| homeModel = lm
|
, Cmd.batch
|
||||||
}
|
[ Cmd.map HomeMsg result.cmd
|
||||||
, Cmd.map HomeMsg lc
|
, lc
|
||||||
, Sub.map HomeMsg ls
|
]
|
||||||
|
, Sub.batch
|
||||||
|
[ Sub.map HomeMsg result.sub
|
||||||
|
, ls
|
||||||
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
module Comp.UiSettingsManage exposing
|
module Comp.UiSettingsManage exposing
|
||||||
( Model
|
( Model
|
||||||
, Msg(..)
|
, Msg(..)
|
||||||
|
, UpdateResult
|
||||||
, init
|
, init
|
||||||
, update
|
, update
|
||||||
, view2
|
, view2
|
||||||
@ -14,10 +15,8 @@ import Data.Flags exposing (Flags)
|
|||||||
import Data.UiSettings exposing (UiSettings)
|
import Data.UiSettings exposing (UiSettings)
|
||||||
import Html exposing (..)
|
import Html exposing (..)
|
||||||
import Html.Attributes exposing (..)
|
import Html.Attributes exposing (..)
|
||||||
import Html.Events exposing (onClick)
|
|
||||||
import Http
|
import Http
|
||||||
import Messages.Comp.UiSettingsManage exposing (Texts)
|
import Messages.Comp.UiSettingsManage exposing (Texts)
|
||||||
import Ports
|
|
||||||
import Styles as S
|
import Styles as S
|
||||||
|
|
||||||
|
|
||||||
@ -31,9 +30,8 @@ type alias Model =
|
|||||||
type Msg
|
type Msg
|
||||||
= UiSettingsFormMsg Comp.UiSettingsForm.Msg
|
= UiSettingsFormMsg Comp.UiSettingsForm.Msg
|
||||||
| Submit
|
| Submit
|
||||||
| SettingsSaved
|
|
||||||
| UpdateSettings
|
| UpdateSettings
|
||||||
| SaveSettingsResp (Result Http.Error BasicResult)
|
| SaveSettingsResp UiSettings (Result Http.Error BasicResult)
|
||||||
|
|
||||||
|
|
||||||
init : Flags -> UiSettings -> ( Model, Cmd Msg )
|
init : Flags -> UiSettings -> ( Model, Cmd Msg )
|
||||||
@ -54,7 +52,14 @@ init flags settings =
|
|||||||
--- update
|
--- update
|
||||||
|
|
||||||
|
|
||||||
update : Flags -> UiSettings -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg )
|
type alias UpdateResult =
|
||||||
|
{ model : Model
|
||||||
|
, cmd : Cmd Msg
|
||||||
|
, newSettings : Maybe UiSettings
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
update : Flags -> UiSettings -> Msg -> Model -> UpdateResult
|
||||||
update flags settings msg model =
|
update flags settings msg model =
|
||||||
case msg of
|
case msg of
|
||||||
UiSettingsFormMsg lm ->
|
UiSettingsFormMsg lm ->
|
||||||
@ -65,60 +70,58 @@ update flags settings msg model =
|
|||||||
( m_, sett ) =
|
( m_, sett ) =
|
||||||
Comp.UiSettingsForm.update inSettings lm model.formModel
|
Comp.UiSettingsForm.update inSettings lm model.formModel
|
||||||
in
|
in
|
||||||
( { model
|
{ model =
|
||||||
| formModel = m_
|
{ model
|
||||||
, settings =
|
| formModel = m_
|
||||||
if sett == Nothing then
|
, settings =
|
||||||
model.settings
|
if sett == Nothing then
|
||||||
|
model.settings
|
||||||
|
|
||||||
else
|
else
|
||||||
sett
|
sett
|
||||||
, message =
|
, message =
|
||||||
if sett /= Nothing then
|
if sett /= Nothing then
|
||||||
Nothing
|
Nothing
|
||||||
|
|
||||||
else
|
else
|
||||||
model.message
|
model.message
|
||||||
}
|
}
|
||||||
, Cmd.none
|
, cmd = Cmd.none
|
||||||
, Sub.none
|
, newSettings = Nothing
|
||||||
)
|
}
|
||||||
|
|
||||||
Submit ->
|
Submit ->
|
||||||
case model.settings of
|
case model.settings of
|
||||||
Just s ->
|
Just s ->
|
||||||
( { model | message = Nothing }
|
{ model = { model | message = Nothing }
|
||||||
, Api.saveClientSettings flags s SaveSettingsResp
|
, cmd = Api.saveClientSettings flags s (SaveSettingsResp s)
|
||||||
, Ports.onUiSettingsSaved SettingsSaved
|
, newSettings = Nothing
|
||||||
)
|
}
|
||||||
|
|
||||||
Nothing ->
|
Nothing ->
|
||||||
( { model | message = Just (BasicResult False "Settings unchanged or invalid.") }
|
{ model = { model | message = Just (BasicResult False "Settings unchanged or invalid.") }
|
||||||
, Cmd.none
|
, cmd = Cmd.none
|
||||||
, Sub.none
|
, newSettings = Nothing
|
||||||
)
|
}
|
||||||
|
|
||||||
SettingsSaved ->
|
SaveSettingsResp newSettings (Ok res) ->
|
||||||
( { model | message = Just (BasicResult True "Settings saved.") }
|
{ model = { model | message = Just res }
|
||||||
, Cmd.none
|
, cmd = Cmd.none
|
||||||
, Sub.none
|
, newSettings = Just newSettings
|
||||||
)
|
}
|
||||||
|
|
||||||
SaveSettingsResp (Ok res) ->
|
SaveSettingsResp _ (Err err) ->
|
||||||
( { model | message = Just res }, Cmd.none, Sub.none )
|
UpdateResult model Cmd.none Nothing
|
||||||
|
|
||||||
SaveSettingsResp (Err err) ->
|
|
||||||
( model, Cmd.none, Sub.none )
|
|
||||||
|
|
||||||
UpdateSettings ->
|
UpdateSettings ->
|
||||||
let
|
let
|
||||||
( fm, fc ) =
|
( fm, fc ) =
|
||||||
Comp.UiSettingsForm.init flags settings
|
Comp.UiSettingsForm.init flags settings
|
||||||
in
|
in
|
||||||
( { model | formModel = fm }
|
{ model = { model | formModel = fm }
|
||||||
, Cmd.map UiSettingsFormMsg fc
|
, cmd = Cmd.map UiSettingsFormMsg fc
|
||||||
, Sub.none
|
, newSettings = Nothing
|
||||||
)
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ init flags url key =
|
|||||||
|
|
||||||
else
|
else
|
||||||
Cmd.none
|
Cmd.none
|
||||||
, Ports.getUiSettings flags
|
, Api.getClientSettings flags GetUiSettings
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -85,5 +85,4 @@ subscriptions : Model -> Sub Msg
|
|||||||
subscriptions model =
|
subscriptions model =
|
||||||
Sub.batch
|
Sub.batch
|
||||||
[ model.subs
|
[ model.subs
|
||||||
, Ports.loadUiSettings GetUiSettings
|
|
||||||
]
|
]
|
||||||
|
@ -193,6 +193,7 @@ type Msg
|
|||||||
| KeyUpPowerSearchbarMsg (Maybe KeyCode)
|
| KeyUpPowerSearchbarMsg (Maybe KeyCode)
|
||||||
| RequestReprocessSelected
|
| RequestReprocessSelected
|
||||||
| ReprocessSelectedConfirmed
|
| ReprocessSelectedConfirmed
|
||||||
|
| ClientSettingsSaveResp UiSettings (Result Http.Error BasicResult)
|
||||||
|
|
||||||
|
|
||||||
type SearchType
|
type SearchType
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
module Page.Home.Update exposing (update)
|
module Page.Home.Update exposing
|
||||||
|
( UpdateResult
|
||||||
|
, update
|
||||||
|
)
|
||||||
|
|
||||||
import Api
|
import Api
|
||||||
import Api.Model.ItemLightList exposing (ItemLightList)
|
import Api.Model.ItemLightList exposing (ItemLightList)
|
||||||
@ -16,7 +19,6 @@ import Data.Items
|
|||||||
import Data.UiSettings exposing (UiSettings)
|
import Data.UiSettings exposing (UiSettings)
|
||||||
import Page exposing (Page(..))
|
import Page exposing (Page(..))
|
||||||
import Page.Home.Data exposing (..)
|
import Page.Home.Data exposing (..)
|
||||||
import Ports
|
|
||||||
import Process
|
import Process
|
||||||
import Scroll
|
import Scroll
|
||||||
import Set exposing (Set)
|
import Set exposing (Set)
|
||||||
@ -28,7 +30,15 @@ import Util.ItemDragDrop as DD
|
|||||||
import Util.Update
|
import Util.Update
|
||||||
|
|
||||||
|
|
||||||
update : Maybe String -> Nav.Key -> Flags -> UiSettings -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg )
|
type alias UpdateResult =
|
||||||
|
{ model : Model
|
||||||
|
, cmd : Cmd Msg
|
||||||
|
, sub : Sub Msg
|
||||||
|
, newSettings : Maybe UiSettings
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
update : Maybe String -> Nav.Key -> Flags -> UiSettings -> Msg -> Model -> UpdateResult
|
||||||
update mId key flags settings msg model =
|
update mId key flags settings msg model =
|
||||||
case msg of
|
case msg of
|
||||||
Init ->
|
Init ->
|
||||||
@ -41,11 +51,12 @@ update mId key flags settings msg model =
|
|||||||
, scroll = True
|
, scroll = True
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
Util.Update.andThen2
|
makeResult <|
|
||||||
[ update mId key flags settings (SearchMenuMsg Comp.SearchMenu.Init)
|
Util.Update.andThen3
|
||||||
, doSearch searchParam
|
[ update mId key flags settings (SearchMenuMsg Comp.SearchMenu.Init)
|
||||||
]
|
, doSearch searchParam
|
||||||
model
|
]
|
||||||
|
model
|
||||||
|
|
||||||
ResetSearch ->
|
ResetSearch ->
|
||||||
let
|
let
|
||||||
@ -79,21 +90,21 @@ update mId key flags settings msg model =
|
|||||||
BasicSearch
|
BasicSearch
|
||||||
}
|
}
|
||||||
|
|
||||||
( m2, c2, s2 ) =
|
result =
|
||||||
if nextState.stateChange && not model.searchInProgress then
|
if nextState.stateChange && not model.searchInProgress then
|
||||||
doSearch (SearchParam flags BasicSearch settings.itemSearchPageSize 0 False) newModel
|
doSearch (SearchParam flags BasicSearch settings.itemSearchPageSize 0 False) newModel
|
||||||
|
|
||||||
else
|
else
|
||||||
withSub ( newModel, Cmd.none )
|
withSub ( newModel, Cmd.none )
|
||||||
in
|
in
|
||||||
( m2
|
{ result
|
||||||
, Cmd.batch
|
| cmd =
|
||||||
[ c2
|
Cmd.batch
|
||||||
, Cmd.map SearchMenuMsg nextState.cmd
|
[ result.cmd
|
||||||
, dropCmd
|
, Cmd.map SearchMenuMsg nextState.cmd
|
||||||
]
|
, dropCmd
|
||||||
, s2
|
]
|
||||||
)
|
}
|
||||||
|
|
||||||
SetLinkTarget lt ->
|
SetLinkTarget lt ->
|
||||||
case linkTargetMsg lt of
|
case linkTargetMsg lt of
|
||||||
@ -101,7 +112,7 @@ update mId key flags settings msg model =
|
|||||||
update mId key flags settings m model
|
update mId key flags settings m model
|
||||||
|
|
||||||
Nothing ->
|
Nothing ->
|
||||||
( model, Cmd.none, Sub.none )
|
makeResult ( model, Cmd.none, Sub.none )
|
||||||
|
|
||||||
ItemCardListMsg m ->
|
ItemCardListMsg m ->
|
||||||
let
|
let
|
||||||
@ -144,15 +155,16 @@ update mId key flags settings msg model =
|
|||||||
, moreAvailable = list.groups /= []
|
, moreAvailable = list.groups /= []
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
Util.Update.andThen2
|
makeResult <|
|
||||||
[ update mId key flags settings (ItemCardListMsg (Comp.ItemCardList.SetResults list))
|
Util.Update.andThen3
|
||||||
, if scroll then
|
[ update mId key flags settings (ItemCardListMsg (Comp.ItemCardList.SetResults list))
|
||||||
scrollToCard mId
|
, if scroll then
|
||||||
|
scrollToCard mId
|
||||||
|
|
||||||
else
|
else
|
||||||
\next -> ( next, Cmd.none, Sub.none )
|
\next -> makeResult ( next, Cmd.none, Sub.none )
|
||||||
]
|
]
|
||||||
m
|
m
|
||||||
|
|
||||||
ItemSearchAddResp (Ok list) ->
|
ItemSearchAddResp (Ok list) ->
|
||||||
let
|
let
|
||||||
@ -167,10 +179,7 @@ update mId key flags settings msg model =
|
|||||||
, moreAvailable = list.groups /= []
|
, moreAvailable = list.groups /= []
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
Util.Update.andThen2
|
update mId key flags settings (ItemCardListMsg (Comp.ItemCardList.AddResults list)) m
|
||||||
[ update mId key flags settings (ItemCardListMsg (Comp.ItemCardList.AddResults list))
|
|
||||||
]
|
|
||||||
m
|
|
||||||
|
|
||||||
ItemSearchAddResp (Err _) ->
|
ItemSearchAddResp (Err _) ->
|
||||||
withSub
|
withSub
|
||||||
@ -514,10 +523,11 @@ update mId key flags settings msg model =
|
|||||||
res.change
|
res.change
|
||||||
(MultiUpdateResp res.change)
|
(MultiUpdateResp res.change)
|
||||||
in
|
in
|
||||||
( { model | viewMode = SelectView svm_ }
|
makeResult
|
||||||
, Cmd.batch [ cmd_, upCmd ]
|
( { model | viewMode = SelectView svm_ }
|
||||||
, sub_
|
, Cmd.batch [ cmd_, upCmd ]
|
||||||
)
|
, sub_
|
||||||
|
)
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
noSub ( model, Cmd.none )
|
noSub ( model, Cmd.none )
|
||||||
@ -540,10 +550,11 @@ update mId key flags settings msg model =
|
|||||||
noSub ( nm, Cmd.none )
|
noSub ( nm, Cmd.none )
|
||||||
|
|
||||||
MultiUpdateResp change (Err _) ->
|
MultiUpdateResp change (Err _) ->
|
||||||
( updateSelectViewNameState False model change
|
makeResult
|
||||||
, Cmd.none
|
( updateSelectViewNameState False model change
|
||||||
, Sub.none
|
, Cmd.none
|
||||||
)
|
, Sub.none
|
||||||
|
)
|
||||||
|
|
||||||
ReplaceChangedItemsResp (Ok items) ->
|
ReplaceChangedItemsResp (Ok items) ->
|
||||||
noSub ( replaceItems model items, Cmd.none )
|
noSub ( replaceItems model items, Cmd.none )
|
||||||
@ -592,10 +603,24 @@ update mId key flags settings msg model =
|
|||||||
{ settings | cardPreviewFullWidth = not settings.cardPreviewFullWidth }
|
{ settings | cardPreviewFullWidth = not settings.cardPreviewFullWidth }
|
||||||
|
|
||||||
cmd =
|
cmd =
|
||||||
Ports.storeUiSettings flags newSettings
|
Api.saveClientSettings flags newSettings (ClientSettingsSaveResp newSettings)
|
||||||
in
|
in
|
||||||
noSub ( model, cmd )
|
noSub ( model, cmd )
|
||||||
|
|
||||||
|
ClientSettingsSaveResp newSettings (Ok res) ->
|
||||||
|
if res.success then
|
||||||
|
{ model = model
|
||||||
|
, cmd = Cmd.none
|
||||||
|
, sub = Sub.none
|
||||||
|
, newSettings = Just newSettings
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
noSub ( model, Cmd.none )
|
||||||
|
|
||||||
|
ClientSettingsSaveResp _ (Err _) ->
|
||||||
|
noSub ( model, Cmd.none )
|
||||||
|
|
||||||
PowerSearchMsg lm ->
|
PowerSearchMsg lm ->
|
||||||
let
|
let
|
||||||
result =
|
result =
|
||||||
@ -609,7 +634,7 @@ update mId key flags settings msg model =
|
|||||||
in
|
in
|
||||||
case result.action of
|
case result.action of
|
||||||
Comp.PowerSearchInput.NoAction ->
|
Comp.PowerSearchInput.NoAction ->
|
||||||
( model_, cmd_, Sub.map PowerSearchMsg result.subs )
|
makeResult ( model_, cmd_, Sub.map PowerSearchMsg result.subs )
|
||||||
|
|
||||||
Comp.PowerSearchInput.SubmitSearch ->
|
Comp.PowerSearchInput.SubmitSearch ->
|
||||||
update mId key flags settings (DoSearch model_.searchTypeDropdownValue) model_
|
update mId key flags settings (DoSearch model_.searchTypeDropdownValue) model_
|
||||||
@ -703,21 +728,22 @@ loadChangedItems flags ids =
|
|||||||
Api.itemSearch flags search ReplaceChangedItemsResp
|
Api.itemSearch flags search ReplaceChangedItemsResp
|
||||||
|
|
||||||
|
|
||||||
scrollToCard : Maybe String -> Model -> ( Model, Cmd Msg, Sub Msg )
|
scrollToCard : Maybe String -> Model -> UpdateResult
|
||||||
scrollToCard mId model =
|
scrollToCard mId model =
|
||||||
let
|
let
|
||||||
scroll id =
|
scroll id =
|
||||||
Scroll.scrollElementY "item-card-list" id 0.5 0.5
|
Scroll.scrollElementY "item-card-list" id 0.5 0.5
|
||||||
in
|
in
|
||||||
case mId of
|
makeResult <|
|
||||||
Just id ->
|
case mId of
|
||||||
( { model | scrollToCard = mId }
|
Just id ->
|
||||||
, Task.attempt ScrollResult (scroll id)
|
( { model | scrollToCard = mId }
|
||||||
, Sub.none
|
, Task.attempt ScrollResult (scroll id)
|
||||||
)
|
, Sub.none
|
||||||
|
)
|
||||||
|
|
||||||
Nothing ->
|
Nothing ->
|
||||||
( model, Cmd.none, Sub.none )
|
( model, Cmd.none, Sub.none )
|
||||||
|
|
||||||
|
|
||||||
loadEditModel : Flags -> Cmd Msg
|
loadEditModel : Flags -> Cmd Msg
|
||||||
@ -725,7 +751,7 @@ loadEditModel flags =
|
|||||||
Cmd.map EditMenuMsg (Comp.ItemDetail.MultiEditMenu.loadModel flags)
|
Cmd.map EditMenuMsg (Comp.ItemDetail.MultiEditMenu.loadModel flags)
|
||||||
|
|
||||||
|
|
||||||
doSearch : SearchParam -> Model -> ( Model, Cmd Msg, Sub Msg )
|
doSearch : SearchParam -> Model -> UpdateResult
|
||||||
doSearch param model =
|
doSearch param model =
|
||||||
let
|
let
|
||||||
param_ =
|
param_ =
|
||||||
@ -798,16 +824,26 @@ doSearchMore flags settings model =
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
withSub : ( Model, Cmd Msg ) -> ( Model, Cmd Msg, Sub Msg )
|
withSub : ( Model, Cmd Msg ) -> UpdateResult
|
||||||
withSub ( m, c ) =
|
withSub ( m, c ) =
|
||||||
( m
|
makeResult
|
||||||
, c
|
( m
|
||||||
, Throttle.ifNeeded
|
, c
|
||||||
(Time.every 500 (\_ -> UpdateThrottle))
|
, Throttle.ifNeeded
|
||||||
m.throttle
|
(Time.every 500 (\_ -> UpdateThrottle))
|
||||||
)
|
m.throttle
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
noSub : ( Model, Cmd Msg ) -> ( Model, Cmd Msg, Sub Msg )
|
noSub : ( Model, Cmd Msg ) -> UpdateResult
|
||||||
noSub ( m, c ) =
|
noSub ( m, c ) =
|
||||||
( m, c, Sub.none )
|
makeResult ( m, c, Sub.none )
|
||||||
|
|
||||||
|
|
||||||
|
makeResult : ( Model, Cmd Msg, Sub Msg ) -> UpdateResult
|
||||||
|
makeResult ( m, c, s ) =
|
||||||
|
{ model = m
|
||||||
|
, cmd = c
|
||||||
|
, sub = s
|
||||||
|
, newSettings = Nothing
|
||||||
|
}
|
||||||
|
@ -11,7 +11,7 @@ import Data.UiSettings exposing (UiSettings)
|
|||||||
import Page.UserSettings.Data exposing (..)
|
import Page.UserSettings.Data exposing (..)
|
||||||
|
|
||||||
|
|
||||||
update : Flags -> UiSettings -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg )
|
update : Flags -> UiSettings -> Msg -> Model -> ( Model, Cmd Msg, Maybe UiSettings )
|
||||||
update flags settings msg model =
|
update flags settings msg model =
|
||||||
case msg of
|
case msg of
|
||||||
SetTab t ->
|
SetTab t ->
|
||||||
@ -25,17 +25,23 @@ update flags settings msg model =
|
|||||||
( em, c ) =
|
( em, c ) =
|
||||||
Comp.EmailSettingsManage.init flags
|
Comp.EmailSettingsManage.init flags
|
||||||
in
|
in
|
||||||
( { m | emailSettingsModel = em }, Cmd.map EmailSettingsMsg c, Sub.none )
|
( { m | emailSettingsModel = em }
|
||||||
|
, Cmd.map EmailSettingsMsg c
|
||||||
|
, Nothing
|
||||||
|
)
|
||||||
|
|
||||||
ImapSettingsTab ->
|
ImapSettingsTab ->
|
||||||
let
|
let
|
||||||
( em, c ) =
|
( em, c ) =
|
||||||
Comp.ImapSettingsManage.init flags
|
Comp.ImapSettingsManage.init flags
|
||||||
in
|
in
|
||||||
( { m | imapSettingsModel = em }, Cmd.map ImapSettingsMsg c, Sub.none )
|
( { m | imapSettingsModel = em }
|
||||||
|
, Cmd.map ImapSettingsMsg c
|
||||||
|
, Nothing
|
||||||
|
)
|
||||||
|
|
||||||
ChangePassTab ->
|
ChangePassTab ->
|
||||||
( m, Cmd.none, Sub.none )
|
( m, Cmd.none, Nothing )
|
||||||
|
|
||||||
NotificationTab ->
|
NotificationTab ->
|
||||||
let
|
let
|
||||||
@ -43,7 +49,7 @@ update flags settings msg model =
|
|||||||
Cmd.map NotificationMsg
|
Cmd.map NotificationMsg
|
||||||
(Tuple.second (Comp.NotificationManage.init flags))
|
(Tuple.second (Comp.NotificationManage.init flags))
|
||||||
in
|
in
|
||||||
( m, initCmd, Sub.none )
|
( m, initCmd, Nothing )
|
||||||
|
|
||||||
ScanMailboxTab ->
|
ScanMailboxTab ->
|
||||||
let
|
let
|
||||||
@ -51,31 +57,40 @@ update flags settings msg model =
|
|||||||
Cmd.map ScanMailboxMsg
|
Cmd.map ScanMailboxMsg
|
||||||
(Tuple.second (Comp.ScanMailboxManage.init flags))
|
(Tuple.second (Comp.ScanMailboxManage.init flags))
|
||||||
in
|
in
|
||||||
( m, initCmd, Sub.none )
|
( m, initCmd, Nothing )
|
||||||
|
|
||||||
UiSettingsTab ->
|
UiSettingsTab ->
|
||||||
( m, Cmd.none, Sub.none )
|
( m, Cmd.none, Nothing )
|
||||||
|
|
||||||
ChangePassMsg m ->
|
ChangePassMsg m ->
|
||||||
let
|
let
|
||||||
( m2, c2 ) =
|
( m2, c2 ) =
|
||||||
Comp.ChangePasswordForm.update flags m model.changePassModel
|
Comp.ChangePasswordForm.update flags m model.changePassModel
|
||||||
in
|
in
|
||||||
( { model | changePassModel = m2 }, Cmd.map ChangePassMsg c2, Sub.none )
|
( { model | changePassModel = m2 }
|
||||||
|
, Cmd.map ChangePassMsg c2
|
||||||
|
, Nothing
|
||||||
|
)
|
||||||
|
|
||||||
EmailSettingsMsg m ->
|
EmailSettingsMsg m ->
|
||||||
let
|
let
|
||||||
( m2, c2 ) =
|
( m2, c2 ) =
|
||||||
Comp.EmailSettingsManage.update flags m model.emailSettingsModel
|
Comp.EmailSettingsManage.update flags m model.emailSettingsModel
|
||||||
in
|
in
|
||||||
( { model | emailSettingsModel = m2 }, Cmd.map EmailSettingsMsg c2, Sub.none )
|
( { model | emailSettingsModel = m2 }
|
||||||
|
, Cmd.map EmailSettingsMsg c2
|
||||||
|
, Nothing
|
||||||
|
)
|
||||||
|
|
||||||
ImapSettingsMsg m ->
|
ImapSettingsMsg m ->
|
||||||
let
|
let
|
||||||
( m2, c2 ) =
|
( m2, c2 ) =
|
||||||
Comp.ImapSettingsManage.update flags m model.imapSettingsModel
|
Comp.ImapSettingsManage.update flags m model.imapSettingsModel
|
||||||
in
|
in
|
||||||
( { model | imapSettingsModel = m2 }, Cmd.map ImapSettingsMsg c2, Sub.none )
|
( { model | imapSettingsModel = m2 }
|
||||||
|
, Cmd.map ImapSettingsMsg c2
|
||||||
|
, Nothing
|
||||||
|
)
|
||||||
|
|
||||||
NotificationMsg lm ->
|
NotificationMsg lm ->
|
||||||
let
|
let
|
||||||
@ -84,7 +99,7 @@ update flags settings msg model =
|
|||||||
in
|
in
|
||||||
( { model | notificationModel = m2 }
|
( { model | notificationModel = m2 }
|
||||||
, Cmd.map NotificationMsg c2
|
, Cmd.map NotificationMsg c2
|
||||||
, Sub.none
|
, Nothing
|
||||||
)
|
)
|
||||||
|
|
||||||
ScanMailboxMsg lm ->
|
ScanMailboxMsg lm ->
|
||||||
@ -94,17 +109,17 @@ update flags settings msg model =
|
|||||||
in
|
in
|
||||||
( { model | scanMailboxModel = m2 }
|
( { model | scanMailboxModel = m2 }
|
||||||
, Cmd.map ScanMailboxMsg c2
|
, Cmd.map ScanMailboxMsg c2
|
||||||
, Sub.none
|
, Nothing
|
||||||
)
|
)
|
||||||
|
|
||||||
UiSettingsMsg lm ->
|
UiSettingsMsg lm ->
|
||||||
let
|
let
|
||||||
( m2, c2, s2 ) =
|
res =
|
||||||
Comp.UiSettingsManage.update flags settings lm model.uiSettingsModel
|
Comp.UiSettingsManage.update flags settings lm model.uiSettingsModel
|
||||||
in
|
in
|
||||||
( { model | uiSettingsModel = m2 }
|
( { model | uiSettingsModel = res.model }
|
||||||
, Cmd.map UiSettingsMsg c2
|
, Cmd.map UiSettingsMsg res.cmd
|
||||||
, Sub.map UiSettingsMsg s2
|
, res.newSettings
|
||||||
)
|
)
|
||||||
|
|
||||||
UpdateSettings ->
|
UpdateSettings ->
|
||||||
|
@ -1,20 +1,14 @@
|
|||||||
port module Ports exposing
|
port module Ports exposing
|
||||||
( checkSearchQueryString
|
( checkSearchQueryString
|
||||||
, getUiSettings
|
|
||||||
, initClipboard
|
, initClipboard
|
||||||
, loadUiSettings
|
|
||||||
, onUiSettingsSaved
|
|
||||||
, receiveCheckQueryResult
|
, receiveCheckQueryResult
|
||||||
, removeAccount
|
, removeAccount
|
||||||
, setAccount
|
, setAccount
|
||||||
, setUiTheme
|
, setUiTheme
|
||||||
, storeUiSettings
|
|
||||||
)
|
)
|
||||||
|
|
||||||
import Api.Model.AuthResult exposing (AuthResult)
|
import Api.Model.AuthResult exposing (AuthResult)
|
||||||
import Data.Flags exposing (Flags)
|
|
||||||
import Data.QueryParseResult exposing (QueryParseResult)
|
import Data.QueryParseResult exposing (QueryParseResult)
|
||||||
import Data.UiSettings exposing (StoredUiSettings, UiSettings)
|
|
||||||
import Data.UiTheme exposing (UiTheme)
|
import Data.UiTheme exposing (UiTheme)
|
||||||
|
|
||||||
|
|
||||||
@ -26,18 +20,6 @@ port setAccount : AuthResult -> Cmd msg
|
|||||||
port removeAccount : () -> Cmd msg
|
port removeAccount : () -> Cmd msg
|
||||||
|
|
||||||
|
|
||||||
port saveUiSettings : ( AuthResult, StoredUiSettings ) -> Cmd msg
|
|
||||||
|
|
||||||
|
|
||||||
port receiveUiSettings : (StoredUiSettings -> msg) -> Sub msg
|
|
||||||
|
|
||||||
|
|
||||||
port requestUiSettings : ( AuthResult, StoredUiSettings ) -> Cmd msg
|
|
||||||
|
|
||||||
|
|
||||||
port uiSettingsSaved : (() -> msg) -> Sub msg
|
|
||||||
|
|
||||||
|
|
||||||
port internalSetUiTheme : String -> Cmd msg
|
port internalSetUiTheme : String -> Cmd msg
|
||||||
|
|
||||||
|
|
||||||
@ -47,45 +29,9 @@ port checkSearchQueryString : String -> Cmd msg
|
|||||||
port receiveCheckQueryResult : (QueryParseResult -> msg) -> Sub msg
|
port receiveCheckQueryResult : (QueryParseResult -> msg) -> Sub msg
|
||||||
|
|
||||||
|
|
||||||
|
port initClipboard : ( String, String ) -> Cmd msg
|
||||||
|
|
||||||
|
|
||||||
setUiTheme : UiTheme -> Cmd msg
|
setUiTheme : UiTheme -> Cmd msg
|
||||||
setUiTheme theme =
|
setUiTheme theme =
|
||||||
internalSetUiTheme (Data.UiTheme.toString theme)
|
internalSetUiTheme (Data.UiTheme.toString theme)
|
||||||
|
|
||||||
|
|
||||||
onUiSettingsSaved : msg -> Sub msg
|
|
||||||
onUiSettingsSaved m =
|
|
||||||
uiSettingsSaved (\_ -> m)
|
|
||||||
|
|
||||||
|
|
||||||
storeUiSettings : Flags -> UiSettings -> Cmd msg
|
|
||||||
storeUiSettings flags settings =
|
|
||||||
case flags.account of
|
|
||||||
Just ar ->
|
|
||||||
saveUiSettings
|
|
||||||
( ar
|
|
||||||
, Data.UiSettings.toStoredUiSettings settings
|
|
||||||
)
|
|
||||||
|
|
||||||
Nothing ->
|
|
||||||
Cmd.none
|
|
||||||
|
|
||||||
|
|
||||||
loadUiSettings : (UiSettings -> msg) -> Sub msg
|
|
||||||
loadUiSettings tagger =
|
|
||||||
receiveUiSettings (Data.UiSettings.mergeDefaults >> tagger)
|
|
||||||
|
|
||||||
|
|
||||||
getUiSettings : Flags -> Cmd msg
|
|
||||||
getUiSettings flags =
|
|
||||||
case flags.account of
|
|
||||||
Just ar ->
|
|
||||||
requestUiSettings
|
|
||||||
( ar
|
|
||||||
, Data.UiSettings.toStoredUiSettings Data.UiSettings.defaults
|
|
||||||
)
|
|
||||||
|
|
||||||
Nothing ->
|
|
||||||
Cmd.none
|
|
||||||
|
|
||||||
|
|
||||||
port initClipboard : ( String, String ) -> Cmd msg
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
module Util.Update exposing
|
module Util.Update exposing
|
||||||
( andThen1
|
( andThen1
|
||||||
, andThen2
|
, andThen2
|
||||||
|
, andThen3
|
||||||
, cmdUnit
|
, cmdUnit
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -44,6 +45,21 @@ andThen2 fs m =
|
|||||||
|> combine
|
|> combine
|
||||||
|
|
||||||
|
|
||||||
|
andThen3 :
|
||||||
|
List (model -> { x | model : model, cmd : Cmd msg, sub : Sub msg })
|
||||||
|
-> model
|
||||||
|
-> ( model, Cmd msg, Sub msg )
|
||||||
|
andThen3 list m =
|
||||||
|
let
|
||||||
|
mkTuple r =
|
||||||
|
( r.model, r.cmd, r.sub )
|
||||||
|
|
||||||
|
list2 =
|
||||||
|
List.map (\e -> e >> mkTuple) list
|
||||||
|
in
|
||||||
|
andThen2 list2 m
|
||||||
|
|
||||||
|
|
||||||
cmdUnit : a -> Cmd a
|
cmdUnit : a -> Cmd a
|
||||||
cmdUnit a =
|
cmdUnit a =
|
||||||
Task.perform (\_ -> a) (Task.succeed ())
|
Task.perform (\_ -> a) (Task.succeed ())
|
||||||
|
@ -51,42 +51,42 @@ elmApp.ports.removeAccount.subscribe(function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
elmApp.ports.saveUiSettings.subscribe(function(args) {
|
// elmApp.ports.saveUiSettings.subscribe(function(args) {
|
||||||
if (Array.isArray(args) && args.length == 2) {
|
// if (Array.isArray(args) && args.length == 2) {
|
||||||
var authResult = args[0];
|
// var authResult = args[0];
|
||||||
var settings = args[1];
|
// var settings = args[1];
|
||||||
if (authResult && settings) {
|
// if (authResult && settings) {
|
||||||
var key = authResult.collective + "/" + authResult.user + "/uiSettings";
|
// var key = authResult.collective + "/" + authResult.user + "/uiSettings";
|
||||||
console.log("Save ui settings to local storage");
|
// console.log("Save ui settings to local storage");
|
||||||
localStorage.setItem(key, JSON.stringify(settings));
|
// localStorage.setItem(key, JSON.stringify(settings));
|
||||||
elmApp.ports.receiveUiSettings.send(settings);
|
// elmApp.ports.receiveUiSettings.send(settings);
|
||||||
elmApp.ports.uiSettingsSaved.send(null);
|
// elmApp.ports.uiSettingsSaved.send(null);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
});
|
// });
|
||||||
|
|
||||||
elmApp.ports.requestUiSettings.subscribe(function(args) {
|
// elmApp.ports.requestUiSettings.subscribe(function(args) {
|
||||||
console.log("Requesting ui settings");
|
// console.log("Requesting ui settings");
|
||||||
if (Array.isArray(args) && args.length == 2) {
|
// if (Array.isArray(args) && args.length == 2) {
|
||||||
var account = args[0];
|
// var account = args[0];
|
||||||
var defaults = args[1];
|
// var defaults = args[1];
|
||||||
var collective = account ? account.collective : null;
|
// var collective = account ? account.collective : null;
|
||||||
var user = account ? account.user : null;
|
// var user = account ? account.user : null;
|
||||||
if (collective && user) {
|
// if (collective && user) {
|
||||||
var key = collective + "/" + user + "/uiSettings";
|
// var key = collective + "/" + user + "/uiSettings";
|
||||||
var settings = localStorage.getItem(key);
|
// var settings = localStorage.getItem(key);
|
||||||
var data = settings ? JSON.parse(settings) : null;
|
// var data = settings ? JSON.parse(settings) : null;
|
||||||
if (data && defaults) {
|
// if (data && defaults) {
|
||||||
var defaults = extend(defaults, data);
|
// var defaults = extend(defaults, data);
|
||||||
elmApp.ports.receiveUiSettings.send(defaults);
|
// elmApp.ports.receiveUiSettings.send(defaults);
|
||||||
} else if (defaults) {
|
// } else if (defaults) {
|
||||||
elmApp.ports.receiveUiSettings.send(defaults);
|
// elmApp.ports.receiveUiSettings.send(defaults);
|
||||||
}
|
// }
|
||||||
} else if (defaults) {
|
// } else if (defaults) {
|
||||||
elmApp.ports.receiveUiSettings.send(defaults);
|
// elmApp.ports.receiveUiSettings.send(defaults);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
});
|
// });
|
||||||
|
|
||||||
var docspell_clipboards = {};
|
var docspell_clipboards = {};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user