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