diff --git a/dev/App/Admin.js b/dev/App/Admin.js index f1f1d2b27..daf61cf85 100644 --- a/dev/App/Admin.js +++ b/dev/App/Admin.js @@ -1,14 +1,9 @@ import 'External/Admin/ko'; -import ko from 'ko'; -import { StorageResultType } from 'Common/Enums'; import { Settings, SettingsGet } from 'Common/Globals'; import { AppAdminStore } from 'Stores/Admin/App'; import { CapaAdminStore } from 'Stores/Admin/Capa'; -import { DomainAdminStore } from 'Stores/Admin/Domain'; -import { PluginAdminStore } from 'Stores/Admin/Plugin'; -import { PackageAdminStore } from 'Stores/Admin/Package'; import Remote from 'Remote/Admin/Fetch'; import { SettingsAdminScreen } from 'Screen/Admin/Settings'; @@ -26,72 +21,6 @@ class AdminApp extends AbstractApp { return Remote; } - reloadDomainList() { - DomainAdminStore.loading(true); - Remote.domainList((result, data) => { - DomainAdminStore.loading(false); - if (StorageResultType.Success === result && data && data.Result) { - DomainAdminStore( - Object.entries(data.Result).map(([name, [enabled, alias]]) => ({ - name: name, - disabled: ko.observable(!enabled), - alias: alias, - deleteAccess: ko.observable(false) - })) - ); - } - }); - } - - reloadPluginList() { - PluginAdminStore.loading(true); - Remote.pluginList((result, data) => { - PluginAdminStore.loading(false); - if (StorageResultType.Success === result && data && data.Result) { - PluginAdminStore( - data.Result.map(item => ({ - name: item.Name, - disabled: ko.observable(!item.Enabled), - configured: ko.observable(!!item.Configured) - })) - ); - } - }); - } - - reloadPackagesList() { - PackageAdminStore.loading(true); - Remote.packagesList((result, data) => { - PackageAdminStore.loading(false); - if (StorageResultType.Success === result && data && data.Result) { - PackageAdminStore.real(!!data.Result.Real); - - let list = []; - const loading = {}; - - PackageAdminStore.forEach(item => { - if (item && item.loading()) { - loading[item.file] = item; - } - }); - - if (Array.isArray(data.Result.List)) { - list = data.Result.List.map(item => { - if (item) { - item.loading = ko.observable(loading[item.file] !== undefined); - return 'core' === item.type && !item.canBeInstalled ? null : item; - } - return null; - }).filter(v => v); - } - - PackageAdminStore(list); - } else { - PackageAdminStore.real(false); - } - }); - } - bootend() { progressJs.end(); } diff --git a/dev/Settings/Admin/Domains.js b/dev/Settings/Admin/Domains.js index 6afc986ce..8614cc4cc 100644 --- a/dev/Settings/Admin/Domains.js +++ b/dev/Settings/Admin/Domains.js @@ -13,8 +13,6 @@ export class DomainsAdminSettings { constructor() { this.domains = DomainAdminStore; - this.visibility = ko.computed(() => (DomainAdminStore.loading() ? 'visible' : 'hidden')); - this.domainForDeletion = ko.observable(null).deleteAccessHelper(); this.onDomainListChangeRequest = this.onDomainListChangeRequest.bind(this); @@ -45,7 +43,7 @@ export class DomainsAdminSettings { el && ko.dataFor(el) && Remote.domain(this.onDomainLoadRequest, ko.dataFor(el).name); }); - rl.app.reloadDomainList(); + DomainAdminStore.fetch(); } onDomainLoadRequest(sResult, oData) { @@ -55,6 +53,6 @@ export class DomainsAdminSettings { } onDomainListChangeRequest() { - rl.app.reloadDomainList(); + DomainAdminStore.fetch(); } } diff --git a/dev/Settings/Admin/Packages.js b/dev/Settings/Admin/Packages.js index e7fa4fab1..0db6cf6fc 100644 --- a/dev/Settings/Admin/Packages.js +++ b/dev/Settings/Admin/Packages.js @@ -30,7 +30,7 @@ export class PackagesAdminSettings { } onBuild() { - rl.app.reloadPackagesList(); + PackageAdminStore.fetch(); } requestHelper(packageToRequest, install) { @@ -55,7 +55,7 @@ export class PackagesAdminSettings { if (StorageResultType.Success === result && data && data.Result && data.Result.Reload) { location.reload(); } else { - rl.app.reloadPackagesList(); + PackageAdminStore.fetch(); } }; } diff --git a/dev/Settings/Admin/Plugins.js b/dev/Settings/Admin/Plugins.js index 7d7199b5a..13b48fa43 100644 --- a/dev/Settings/Admin/Plugins.js +++ b/dev/Settings/Admin/Plugins.js @@ -19,8 +19,6 @@ export class PluginsAdminSettings { this.plugins = PluginAdminStore; this.pluginsError = PluginAdminStore.error; - this.visibility = ko.computed(() => (PluginAdminStore.loading() ? 'visible' : 'hidden')); - this.onPluginLoadRequest = this.onPluginLoadRequest.bind(this); this.onPluginDisableRequest = this.onPluginDisableRequest.bind(this); } @@ -52,7 +50,7 @@ export class PluginsAdminSettings { onShow() { PluginAdminStore.error(''); - rl.app.reloadPluginList(); + PluginAdminStore.fetch(); } onPluginLoadRequest(result, data) { @@ -72,6 +70,6 @@ export class PluginsAdminSettings { } } - rl.app.reloadPluginList(); + PluginAdminStore.fetch(); } } diff --git a/dev/Stores/Admin/Domain.js b/dev/Stores/Admin/Domain.js index 8e44f53d8..5be6b861a 100644 --- a/dev/Stores/Admin/Domain.js +++ b/dev/Stores/Admin/Domain.js @@ -1,5 +1,24 @@ import ko from 'ko'; +import Remote from 'Remote/Admin/Fetch'; +import { StorageResultType } from 'Common/Enums'; export const DomainAdminStore = ko.observableArray(); -DomainAdminStore.loading = ko.observable(false).extend({ 'throttle': 100 }); +DomainAdminStore.loading = ko.observable(false); + +DomainAdminStore.fetch = () => { + DomainAdminStore.loading(true); + Remote.domainList((result, data) => { + DomainAdminStore.loading(false); + if (StorageResultType.Success === result && data && data.Result) { + DomainAdminStore( + Object.entries(data.Result).map(([name, [enabled, alias]]) => ({ + name: name, + disabled: ko.observable(!enabled), + alias: alias, + deleteAccess: ko.observable(false) + })) + ); + } + }); +}; diff --git a/dev/Stores/Admin/Package.js b/dev/Stores/Admin/Package.js index 74fefdb22..9936cdc2b 100644 --- a/dev/Stores/Admin/Package.js +++ b/dev/Stores/Admin/Package.js @@ -1,7 +1,42 @@ import ko from 'ko'; +import Remote from 'Remote/Admin/Fetch'; +import { StorageResultType } from 'Common/Enums'; export const PackageAdminStore = ko.observableArray(); PackageAdminStore.real = ko.observable(true); -PackageAdminStore.loading = ko.observable(false).extend({ debounce: 100 }); +PackageAdminStore.loading = ko.observable(false); + +PackageAdminStore.fetch = () => { + PackageAdminStore.loading(true); + Remote.packagesList((result, data) => { + PackageAdminStore.loading(false); + if (StorageResultType.Success === result && data && data.Result) { + PackageAdminStore.real(!!data.Result.Real); + + let list = []; + const loading = {}; + + PackageAdminStore.forEach(item => { + if (item && item.loading()) { + loading[item.file] = item; + } + }); + + if (Array.isArray(data.Result.List)) { + list = data.Result.List.map(item => { + if (item) { + item.loading = ko.observable(loading[item.file] !== undefined); + return 'core' === item.type && !item.canBeInstalled ? null : item; + } + return null; + }).filter(v => v); + } + + PackageAdminStore(list); + } else { + PackageAdminStore.real(false); + } + }); +}; diff --git a/dev/Stores/Admin/Plugin.js b/dev/Stores/Admin/Plugin.js index d72bf12bc..c5b4f721d 100644 --- a/dev/Stores/Admin/Plugin.js +++ b/dev/Stores/Admin/Plugin.js @@ -1,5 +1,25 @@ import ko from 'ko'; +import Remote from 'Remote/Admin/Fetch'; +import { StorageResultType } from 'Common/Enums'; export const PluginAdminStore = ko.observableArray(); -PluginAdminStore.loading = ko.observable(false).extend({ debounce: 100 }); + +PluginAdminStore.loading = ko.observable(false); + PluginAdminStore.error = ko.observable(''); + +PluginAdminStore.fetch = () => { + PluginAdminStore.loading(true); + Remote.pluginList((result, data) => { + PluginAdminStore.loading(false); + if (StorageResultType.Success === result && data && data.Result) { + PluginAdminStore( + data.Result.map(item => ({ + name: item.Name, + disabled: ko.observable(!item.Enabled), + configured: ko.observable(!!item.Configured) + })) + ); + } + }); +}; diff --git a/dev/View/Admin/Settings/Pane.js b/dev/View/Admin/Settings/Pane.js index 93780de7d..016241a81 100644 --- a/dev/View/Admin/Settings/Pane.js +++ b/dev/View/Admin/Settings/Pane.js @@ -2,8 +2,6 @@ import ko from 'ko'; import Remote from 'Remote/Admin/Fetch'; -import { DomainAdminStore } from 'Stores/Admin/Domain'; -import { PluginAdminStore } from 'Stores/Admin/Plugin'; import { PackageAdminStore } from 'Stores/Admin/Package'; import { AbstractViewRight } from 'Knoin/AbstractViews'; @@ -19,10 +17,7 @@ class PaneSettingsAdminView extends AbstractViewRight { this.leftPanelDisabled = leftPanelDisabled; this.adminManLoadingVisibility = ko - .computed(() => (DomainAdminStore.loading() - || PluginAdminStore.loading() - || PackageAdminStore.loading()) ? 'visible' : 'hidden') - .extend({ rateLimit: 300 }); + .computed(() => PackageAdminStore.loading() ? 'visible' : 'hidden'); } toggleLeft(item, event) { diff --git a/dev/View/Popup/Domain.js b/dev/View/Popup/Domain.js index bb14cd2c3..c77aefe1c 100644 --- a/dev/View/Popup/Domain.js +++ b/dev/View/Popup/Domain.js @@ -7,6 +7,8 @@ import Remote from 'Remote/Admin/Fetch'; import { decorateKoCommands } from 'Knoin/Knoin'; import { AbstractViewPopup } from 'Knoin/AbstractViews'; +import { DomainAdminStore } from 'Stores/Admin/Domain'; + class DomainPopupView extends AbstractViewPopup { constructor() { super('Domain'); @@ -250,7 +252,7 @@ class DomainPopupView extends AbstractViewPopup { this.saving(false); if (StorageResultType.Success === sResult && oData) { if (oData.Result) { - rl.app.reloadDomainList(); + DomainAdminStore.fetch(); this.closeCommand(); } else if (Notification.DomainAlreadyExists === oData.ErrorCode) { this.savingError(i18n('ERRORS/DOMAIN_ALREADY_EXISTS')); diff --git a/dev/View/Popup/DomainAlias.js b/dev/View/Popup/DomainAlias.js index 0d49161a7..c62cb81d3 100644 --- a/dev/View/Popup/DomainAlias.js +++ b/dev/View/Popup/DomainAlias.js @@ -45,7 +45,7 @@ class DomainAliasPopupView extends AbstractViewPopup { this.saving(false); if (StorageResultType.Success === result && data) { if (data.Result) { - rl.app.reloadDomainList(); + DomainAdminStore.fetch(); this.closeCommand(); } else if (Notification.DomainAlreadyExists === data.ErrorCode) { this.savingError(i18n('ERRORS/DOMAIN_ALREADY_EXISTS')); diff --git a/snappymail/v/0.0.0/app/templates/Views/Admin/AdminSettingsDomains.html b/snappymail/v/0.0.0/app/templates/Views/Admin/AdminSettingsDomains.html index daa2a1b5f..eec1fd49b 100644 --- a/snappymail/v/0.0.0/app/templates/Views/Admin/AdminSettingsDomains.html +++ b/snappymail/v/0.0.0/app/templates/Views/Admin/AdminSettingsDomains.html @@ -1,5 +1,8 @@
-
+
+ + +
diff --git a/snappymail/v/0.0.0/app/templates/Views/Admin/AdminSettingsPlugins.html b/snappymail/v/0.0.0/app/templates/Views/Admin/AdminSettingsPlugins.html index 7b1000c4f..fe509618d 100644 --- a/snappymail/v/0.0.0/app/templates/Views/Admin/AdminSettingsPlugins.html +++ b/snappymail/v/0.0.0/app/templates/Views/Admin/AdminSettingsPlugins.html @@ -7,7 +7,10 @@
-
+
+ + +