Added back base for simple plugins hooks

This commit is contained in:
djmaze 2021-03-24 14:25:25 +01:00
parent fe4dbc729c
commit 830fa5b753
4 changed files with 57 additions and 1 deletions

View file

@ -1,9 +1,34 @@
import { settingsAddViewModel } from 'Screen/AbstractSettings';
import { SettingsGet } from 'Common/Globals';
import { isArray, isFunction } from 'Common/Utils';
const USER_VIEW_MODELS_HOOKS = [],
const SIMPLE_HOOKS = {},
USER_VIEW_MODELS_HOOKS = [],
ADMIN_VIEW_MODELS_HOOKS = [];
/**
* @param {string} name
* @param {Function} callback
*/
rl.addHook = (name, callback) => {
if (isFunction(callback)) {
if (!isArray(SIMPLE_HOOKS[name])) {
SIMPLE_HOOKS[name] = [];
}
SIMPLE_HOOKS[name].push(callback);
}
};
/**
* @param {string} name
* @param {Array=} args = []
*/
export function runHook(name, args = []) {
if (isArray(SIMPLE_HOOKS[name])) {
SIMPLE_HOOKS[name].forEach(callback => callback(...args));
}
}
/**
* @param {Function} callback
* @param {string} action

View file

@ -1,6 +1,7 @@
import ko from 'ko';
import { doc, $htmlCL } from 'Common/Globals';
import { runHook } from 'Common/Plugins';
import { isNonEmptyArray, isFunction } from 'Common/Utils';
let currentScreen = null,
@ -172,6 +173,8 @@ export function showScreenPopup(ViewModelClassToShow, params = []) {
vm.modalVisibility(true);
vm.onShow && vm.onShow(...params);
runHook('view-model-on-show', [vm.name, vm.__vm, params]);
}
}
@ -275,6 +278,8 @@ function screenOnRoute(screenName, subPart) {
autofocus(ViewModelClass.__dom);
ViewModelClass.__vm.onShowWithDelay && setTimeout(()=>ViewModelClass.__vm.onShowWithDelay, 200);
runHook('view-model-on-show', [ViewModelClass.name, ViewModelClass.__vm, params]);
}
});
}

View file

@ -2,6 +2,7 @@ import { Notification } from 'Common/Enums';
import { Settings } from 'Common/Globals';
import { isArray, pInt, pString } from 'Common/Utils';
import { serverRequest } from 'Common/Links';
import { runHook } from 'Common/Plugins';
let iJsonErrorCount = 0,
iTokenErrorCount = 0;
@ -92,6 +93,8 @@ export class AbstractFetchRemote
abortActions.forEach(actionToAbort => abort(actionToAbort));
}
runHook('json-default-request', [sAction, params, sGetAdd]);
fetchJSON(sAction, sGetAdd,
params,
undefined === iTimeout ? 30000 : pInt(iTimeout),
@ -127,6 +130,14 @@ export class AbstractFetchRemote
}
}
runHook('json-default-response', [
sAction,
iError,
data,
cached,
params
]);
fCallback && fCallback(
iError,
data,

View file

@ -4,6 +4,7 @@ import { Notification } from 'Common/Enums';
import { ClientSideKeyName } from 'Common/EnumsUser';
import { Settings, SettingsGet } from 'Common/Globals';
import { getNotification, reload as translatorReload, convertLangName } from 'Common/Translator';
import { runHook } from 'Common/Plugins';
import { LanguageStore } from 'Stores/Language';
@ -127,6 +128,20 @@ class LoginUserView extends AbstractViewCenter {
this.emailError(!email);
this.passwordError(!pass);
this.additionalCodeError(totp && !code);
let pluginResultCode = 0, pluginResultMessage = '';
Plugins.runHook('user-login-submit', [(iResultCode, sResultMessage) => {
pluginResultCode = iResultCode;
pluginResultMessage = sResultMessage;
}]);
if (0 < pluginResultCode) {
this.submitError(getNotification(pluginResultCode));
valid = false;
} else if (pluginResultMessage) {
this.submitError(pluginResultMessage);
valid = false;
}
this.formError(!valid);
if (valid) {