UNPKG

vasille

Version:

The first Developer eXperience Orientated front-end framework (core library).

61 lines (60 loc) 1.45 kB
import { Listener } from "./listener.js"; /** * A Map based memory * @class MapModel * @extends Map * @implements IModel */ export class MapModel extends Map { /** * Constructs a map model * @param map {[*, *][]} input data */ constructor(map) { super(); this.listener = new Listener(); map?.forEach(([key, value]) => { super.set(key, value); }); } /** * Calls Map.clear and notify about changes */ clear() { this.forEach((value, key) => { this.listener.emitRemoved(key, value); }); super.clear(); } /** * Calls Map.delete and notify abut changes * @param key {*} key * @return {boolean} true if removed something, otherwise false */ delete(key) { const tmp = super.get(key); /* istanbul ignore else */ if (tmp) { this.listener.emitRemoved(key, tmp); } return super.delete(key); } /** * Calls Map.set and notify abut changes * @param key {*} key * @param value {*} value * @return {MapModel} a pointer to this */ set(key, value) { const tmp = super.get(key); if (tmp) { this.listener.emitRemoved(key, tmp); } super.set(key, value); this.listener.emitAdded(key, value); return this; } destroy() { this.clear(); } }