vasille
Version:
The same framework which is designed to build bulletproof frontends (core library).
58 lines (57 loc) • 1.34 kB
JavaScript
import { Listener } from "./listener.js";
/**
* A `Set` based model
* @class SetModel
* @extends Set
* @implements ListenableModel
*/
export class SetModel extends Set {
listener;
/**
* Constructs a set model based on a set
*/
constructor(set, ctx) {
super();
this.listener = new Listener();
set?.forEach(item => {
super.add(item);
});
ctx?.bind(this);
}
/**
* 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();
}
}