vasille
Version:
The first Developer eXperience Orientated front-end framework (core library).
61 lines (60 loc) • 1.45 kB
JavaScript
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();
}
}