Carbon/src/js/store/subscribe_map.js

56 lines
992 B
JavaScript

const {Subscribable} = require("./subscribable.js")
class SubscribeMap extends Subscribable {
constructor() {
super()
Object.assign(this.events, {
addItem: [],
editItem: [],
deleteItem: [],
changeItem: [],
askSet: []
})
Object.assign(this.eventDeps, {
addItem: ["changeItem"],
editItem: ["changeItem"],
deleteItem: ["changeItem"],
changeItem: [],
askSet: []
})
this.backing = new Map()
}
has(key) {
return this.backing.has(key)
}
forEach(f) {
for (const key of this.backing.keys()) {
f(key, this.backing.get(key))
}
}
askSet(key, value) {
this.broadcast("askSet", key, value)
}
set(key, value) {
const existed = this.backing.has(key)
this.backing.set(key, value)
if (existed) {
this.broadcast("addItem", key)
} else {
this.broadcast("editItem", key)
}
}
delete(key) {
if (this.backing.has(key)) {
this.backing.delete(key)
this.broadcast("deleteItem", key)
}
}
}
module.exports = {SubscribeMap}