vasille
Version:
The same framework which is designed to build bulletproof frontends (core library).
65 lines (64 loc) • 1.56 kB
JavaScript
/**
* Represent a listener for a model
* @class Listener
*/
export class Listener {
/**
* Functions to run on adding new items
* @type Set
*/
onAdded = new Set();
/**
* Functions to run on item removing
* @type Set
*/
onRemoved = new Set();
/**
* Emits added event to listeners
* @param index {*} index of value
* @param value {*} value of added item
*/
emitAdded(index, value) {
this.onAdded.forEach(handler => {
handler(index, value);
});
}
/**
* Emits removed event to listeners
* @param index {*} index of removed value
* @param value {*} value of removed item
*/
emitRemoved(index, value) {
this.onRemoved.forEach(handler => {
handler(index, value);
});
}
/**
* Adds a handler to added event
* @param handler {function} function to run on event emitting
*/
onAdd(handler) {
this.onAdded.add(handler);
}
/**
* Adds a handler to removed event
* @param handler {function} function to run on event emitting
*/
onRemove(handler) {
this.onRemoved.add(handler);
}
/**
* Removes a handler from added event
* @param handler {function} handler to remove
*/
offAdd(handler) {
this.onAdded.delete(handler);
}
/**
* Removes a handler form removed event
* @param handler {function} handler to remove
*/
offRemove(handler) {
this.onRemoved.delete(handler);
}
}