@universis/candidates
Version:
Universis api server plugin for study program candidates, internship selection etc
53 lines (47 loc) • 1.76 kB
JavaScript
;Object.defineProperty(exports, "__esModule", { value: true });exports.insertListener = insertListener;var _common = require("@themost/common");
/**
*
* @param {*} listener Object {type: string}
* @param {*} model model definition (via DataConfiguration or SchemaLoader strategies)
* @returns true if the listener was inserted (model definition has to be updated outside of this function), false otherwise
*/
function insertListener(listener, model) {
_common.Args.check(listener && typeof listener.type === 'string' && model);
// ensure model event listeners
model.eventListeners = model.eventListeners || [];
// try to find target listener
const listenerExists = model.eventListeners.find(eventListener => {
return (
eventListener.type === listener.type ||
eventListener.type === listener.type.replace(/\.js$/, ''));
});
// if it exists, exit
if (listenerExists) {
return false;
}
// check insertBefore
if (typeof listener.insertBefore !== 'string') {
// push the listener and exit
model.eventListeners.push({
type: listener.type });
return true;
}
// find before listener's index
const beforeListener = model.eventListeners.findIndex(eventListener => {
return (
eventListener.type.endsWith(listener.insertBefore) ||
eventListener.type.endsWith(listener.insertBefore.replace(/\.js$/, '')));
});
// if it's not there
if (beforeListener < 0) {
// push the listener and exit
model.eventListeners.push({
type: listener.type });
return true;
}
// push the listener at the specified index
model.eventListeners.splice(beforeListener, 0, {
type: listener.type });
return true;
}
//# sourceMappingURL=insertListener.js.map