From 830fa5b753809affec8ce1f82378d76c6911a2d9 Mon Sep 17 00:00:00 2001 From: djmaze Date: Wed, 24 Mar 2021 14:25:25 +0100 Subject: [PATCH] Added back base for simple plugins hooks --- dev/Common/Plugins.js | 27 ++++++++++++++++++++++++++- dev/Knoin/Knoin.js | 5 +++++ dev/Remote/AbstractFetch.js | 11 +++++++++++ dev/View/User/Login.js | 15 +++++++++++++++ 4 files changed, 57 insertions(+), 1 deletion(-) diff --git a/dev/Common/Plugins.js b/dev/Common/Plugins.js index 370eaa446..d1a92528c 100644 --- a/dev/Common/Plugins.js +++ b/dev/Common/Plugins.js @@ -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 diff --git a/dev/Knoin/Knoin.js b/dev/Knoin/Knoin.js index a061f0925..62c18990f 100644 --- a/dev/Knoin/Knoin.js +++ b/dev/Knoin/Knoin.js @@ -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]); } }); } diff --git a/dev/Remote/AbstractFetch.js b/dev/Remote/AbstractFetch.js index 631c5fc1b..5379c18f7 100644 --- a/dev/Remote/AbstractFetch.js +++ b/dev/Remote/AbstractFetch.js @@ -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, diff --git a/dev/View/User/Login.js b/dev/View/User/Login.js index d84524762..f5c15c149 100644 --- a/dev/View/User/Login.js +++ b/dev/View/User/Login.js @@ -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) {