vasille
Version:
The first Developer eXperience Orientated front-end framework (core library).
57 lines (56 loc) • 1.31 kB
JavaScript
import { Listener } from "./listener.js";
/**
* A Set based model
* @class SetModel
* @extends Set
* @implements IModel
*/
export class SetModel extends Set {
/**
* Constructs a set model based on a set
* @param set {Set} input data
*/
constructor(set) {
super();
this.listener = new Listener();
set?.forEach(item => {
super.add(item);
});
}
/**
* Calls Set.add and notify abut changes
* @param value {*} value
* @return {this} a pointer to this
*/
add(value) {
/* istanbul ignore else */
if (!super.has(value)) {
this.listener.emitAdded(value, value);
super.add(value);
}
return this;
}
/**
* Calls Set.clear and notify abut changes
*/
clear() {
this.forEach(item => {
this.listener.emitRemoved(item, item);
});
super.clear();
}
/**
* Calls Set.delete and notify abut changes
* @param value {*}
* @return {boolean} true if a value was deleted, otherwise false
*/
delete(value) {
if (super.has(value)) {
this.listener.emitRemoved(value, value);
}
return super.delete(value);
}
destroy() {
this.clear();
}
}