UNPKG

vasille

Version:

The same framework which is designed to build bulletproof frontends (core library).

58 lines (57 loc) 1.34 kB
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(); } }