UNPKG

vasille

Version:

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

64 lines (63 loc) 1.54 kB
import { Listener } from "./listener.js"; /** * A `Map` based memory * @class MapModel * @extends Map * @implements ListenableModel */ export class MapModel extends Map { listener; /** * Constructs a map model * @param map {[*, *][]} input data * @param ctx lifetime context */ constructor(map, ctx) { super(); this.listener = new Listener(); map?.forEach(([key, value]) => { super.set(key, value); }); ctx?.bind(this); } /** * 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(); } }