56 lines
992 B
JavaScript
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}
|