UNPKG

@universis/candidates

Version:

Universis api server plugin for study program candidates, internship selection etc

53 lines (51 loc) 1.61 kB
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; }