@universis/candidates
Version:
Universis api server plugin for study program candidates, internship selection etc
53 lines (51 loc) • 1.61 kB
JavaScript
import { Args } from '@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
*/
export function insertListener(listener, model) {
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;
}