Merge Admin Plugins and Packages into single management page

This commit is contained in:
djmaze 2021-07-16 13:57:04 +02:00
parent d69743cee5
commit 79945d45b4
20 changed files with 142 additions and 322 deletions

View file

@ -38,13 +38,6 @@ class RemoteAdminFetch extends AbstractFetchRemote {
});
}
/**
* @param {?Function} fCallback
*/
pluginList(fCallback) {
this.defaultRequest(fCallback, 'AdminPluginList');
}
/**
* @param {?Function} fCallback
*/

View file

@ -7,7 +7,6 @@ import { DomainsAdminSettings } from 'Settings/Admin/Domains';
import { LoginAdminSettings } from 'Settings/Admin/Login';
import { ContactsAdminSettings } from 'Settings/Admin/Contacts';
import { SecurityAdminSettings } from 'Settings/Admin/Security';
import { PluginsAdminSettings } from 'Settings/Admin/Plugins';
import { PackagesAdminSettings } from 'Settings/Admin/Packages';
import { AboutAdminSettings } from 'Settings/Admin/About';
import { BrandingAdminSettings } from 'Settings/Admin/Branding';
@ -38,7 +37,6 @@ export class SettingsAdminScreen extends AbstractSettingsScreen {
[BrandingAdminSettings, 'Branding'],
[ContactsAdminSettings, 'Contacts'],
[SecurityAdminSettings, 'Security'],
[PluginsAdminSettings, 'Plugins'],
[PackagesAdminSettings, 'Packages'],
[AboutAdminSettings, 'About'],
].forEach(item =>

View file

@ -6,6 +6,10 @@ import { getNotification } from 'Common/Translator';
import { PackageAdminStore } from 'Stores/Admin/Package';
import Remote from 'Remote/Admin/Fetch';
import { showScreenPopup } from 'Knoin/Knoin';
import { PluginPopupView } from 'View/Popup/Plugin';
import { SettingsGet } from 'Common/Globals';
export class PackagesAdminSettings {
constructor() {
this.packagesError = ko.observable('');
@ -13,24 +17,42 @@ export class PackagesAdminSettings {
this.packages = PackageAdminStore;
this.packagesCurrent = ko.computed(() =>
PackageAdminStore.filter(item => item && item.installed && !item.compare)
PackageAdminStore.filter(item => item && item.installed && !item.canBeUpdated)
);
this.packagesAvailableForUpdate = ko.computed(() =>
PackageAdminStore.filter(item => item && item.installed && !!item.compare)
PackageAdminStore.filter(item => item && item.installed && !!item.canBeUpdated)
);
this.packagesAvailableForInstallation = ko.computed(() =>
PackageAdminStore.filter(item => item && !item.installed)
);
this.visibility = ko.computed(() => (PackageAdminStore.loading() ? 'visible' : 'hidden'));
this.enabledPlugins = ko.observable(!!SettingsGet('EnabledPlugins'));
this.enabledPlugins.subscribe(value =>
Remote.saveAdminConfig(null, {
EnabledPlugins: value ? 1 : 0
})
);
}
onShow() {
this.packagesError('');
}
onBuild() {
onBuild(oDom) {
PackageAdminStore.fetch();
oDom.addEventListener('click', event => {
// configurePlugin
let el = event.target.closestWithin('.package-configure', oDom),
data = el ? ko.dataFor(el) : 0;
data && Remote.plugin((iError, data) => iError || showScreenPopup(PluginPopupView, [data.Result]), data.name)
// disablePlugin
el = event.target.closestWithin('.package-active', oDom);
data = el ? ko.dataFor(el) : 0;
data && this.disablePlugin(data);
});
}
requestHelper(packageToRequest, install) {
@ -70,4 +92,20 @@ export class PackagesAdminSettings {
Remote.packageInstall(this.requestHelper(packageToInstall, true), packageToInstall);
}
}
disablePlugin(plugin) {
let b = !plugin.enabled();
plugin.enabled(b);
Remote.pluginDisable((iError, data) => {
if (iError) {
this.packagesError(
(Notification.UnsupportedPluginPackage === iError && data && data.ErrorMessage)
? data.ErrorMessage
: getNotification(iError)
);
}
// PackageAdminStore.fetch();
}, plugin.name, !b);
}
}

View file

@ -1,63 +0,0 @@
import ko from 'ko';
import { Notification } from 'Common/Enums';
import { SettingsGet } from 'Common/Globals';
import { getNotification } from 'Common/Translator';
import { showScreenPopup } from 'Knoin/Knoin';
import { PluginAdminStore } from 'Stores/Admin/Plugin';
import Remote from 'Remote/Admin/Fetch';
import { PluginPopupView } from 'View/Popup/Plugin';
export class PluginsAdminSettings
{
constructor() {
this.enabledPlugins = ko.observable(!!SettingsGet('EnabledPlugins'));
this.plugins = PluginAdminStore;
this.pluginsError = PluginAdminStore.error;
this.enabledPlugins.subscribe(value =>
Remote.saveAdminConfig(null, {
EnabledPlugins: value ? 1 : 0
})
);
}
disablePlugin(plugin) {
let b = !plugin.disabled();
plugin.disabled(b);
Remote.pluginDisable((iError, data) => {
if (iError) {
PluginAdminStore.error(
(Notification.UnsupportedPluginPackage === iError && data && data.ErrorMessage)
? data.ErrorMessage
: getNotification(iError)
);
}
PluginAdminStore.fetch();
}, plugin.name, b);
}
configurePlugin(plugin) {
Remote.plugin((iError, data) => iError || showScreenPopup(PluginPopupView, [data.Result]), plugin.name);
}
onBuild(oDom) {
oDom.addEventListener('click', event => {
let el = event.target.closestWithin('.configure-plugin-action', oDom);
el && ko.dataFor(el) && this.configurePlugin(ko.dataFor(el));
el = event.target.closestWithin('.disabled-plugin', oDom);
el && ko.dataFor(el) && this.disablePlugin(ko.dataFor(el));
});
}
onShow() {
PluginAdminStore.error('');
PluginAdminStore.fetch();
}
}

View file

@ -8,35 +8,34 @@ PackageAdminStore.real = ko.observable(true);
PackageAdminStore.loading = ko.observable(false);
//PackageAdminStore.error = ko.observable('');
PackageAdminStore.fetch = () => {
PackageAdminStore.loading(true);
Remote.packagesList((iError, data) => {
PackageAdminStore.loading(false);
if (!iError) {
if (iError) {
PackageAdminStore.real(false);
} else {
PackageAdminStore.real(!!data.Result.Real);
let list = [];
const loading = {};
PackageAdminStore.forEach(item => {
if (item && item.loading()) {
loading[item.file] = item;
}
});
let list = [];
if (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);
list = data.Result.List.filter(v => v).map(item => {
item.loading = ko.observable(loading[item.file] !== undefined);
item.enabled = ko.observable(item.enabled);
return item;
});
}
PackageAdminStore(list);
} else {
PackageAdminStore.real(false);
}
});
};

View file

@ -1,24 +0,0 @@
import ko from 'ko';
import Remote from 'Remote/Admin/Fetch';
export const PluginAdminStore = ko.observableArray();
PluginAdminStore.loading = ko.observable(false);
PluginAdminStore.error = ko.observable('');
PluginAdminStore.fetch = () => {
PluginAdminStore.loading(true);
Remote.pluginList((iError, data) => {
PluginAdminStore.loading(false);
if (!iError) {
PluginAdminStore(
data.Result.map(item => ({
name: item.Name,
disabled: ko.observable(!item.Enabled),
configured: ko.observable(!!item.Configured)
}))
);
}
});
};

View file

@ -35,7 +35,6 @@
@import "AdminDomains.less";
@import "AdminDomain.less";
@import "AdminPackages.less";
@import "AdminPlugins.less";
@import "AdminPlugin.less";
@import "AdminAbout.less";

View file

@ -5,6 +5,11 @@
width: 650px;
}
.disabled table,
table .disabled {
opacity: 0.5;
}
}
.b-admin-packages-list-table {
@ -30,4 +35,9 @@
.package-actions {
vertical-align: middle;
}
.package-configure, .package-active {
cursor: pointer;
margin-right: 1em;
}
}