2020-10-23 14:15:14 +00:00
|
|
|
const {Subscribable} = require("./subscribable.js")
|
2020-10-15 03:43:37 +00:00
|
|
|
|
|
|
|
class SubscribeMap extends Subscribable {
|
2020-11-25 06:54:09 +00:00
|
|
|
constructor(inner) {
|
2020-10-19 11:43:33 +00:00
|
|
|
super()
|
2020-11-25 06:54:09 +00:00
|
|
|
this.inner = inner
|
2020-10-19 11:43:33 +00:00
|
|
|
Object.assign(this.events, {
|
|
|
|
addItem: [],
|
2020-11-24 12:27:41 +00:00
|
|
|
editItem: [],
|
|
|
|
deleteItem: [],
|
2020-10-19 11:43:33 +00:00
|
|
|
changeItem: [],
|
2020-11-24 12:27:41 +00:00
|
|
|
askSet: []
|
2020-10-19 11:43:33 +00:00
|
|
|
})
|
2020-11-24 12:27:41 +00:00
|
|
|
Object.assign(this.eventDeps, {
|
|
|
|
addItem: ["changeItem"],
|
|
|
|
editItem: ["changeItem"],
|
|
|
|
deleteItem: ["changeItem"],
|
|
|
|
changeItem: [],
|
|
|
|
askSet: []
|
|
|
|
})
|
2020-11-25 06:54:09 +00:00
|
|
|
this.map = new Map()
|
2020-10-19 11:43:33 +00:00
|
|
|
}
|
2020-10-15 03:43:37 +00:00
|
|
|
|
2020-10-19 11:43:33 +00:00
|
|
|
has(key) {
|
2020-11-25 06:54:09 +00:00
|
|
|
return this.map.has(key) && this.map.get(key).exists()
|
|
|
|
}
|
|
|
|
|
|
|
|
get(key) {
|
|
|
|
if (this.map.has(key)) {
|
|
|
|
return this.map.get(key)
|
|
|
|
} else {
|
|
|
|
const item = new this.inner()
|
|
|
|
this.map.set(key, item)
|
|
|
|
return item
|
|
|
|
}
|
2020-10-19 11:43:33 +00:00
|
|
|
}
|
2020-10-15 03:43:37 +00:00
|
|
|
|
2020-11-24 12:27:41 +00:00
|
|
|
forEach(f) {
|
2020-11-25 06:54:09 +00:00
|
|
|
for (const entry of this.map.entries()) {
|
|
|
|
f(entry[0], entry[1])
|
2020-10-19 11:43:33 +00:00
|
|
|
}
|
|
|
|
}
|
2020-10-15 03:43:37 +00:00
|
|
|
|
2020-11-24 12:27:41 +00:00
|
|
|
askSet(key, value) {
|
2020-11-25 06:54:09 +00:00
|
|
|
this.broadcast("askSet", {key, value})
|
2020-11-24 12:27:41 +00:00
|
|
|
}
|
|
|
|
|
2020-10-19 11:43:33 +00:00
|
|
|
set(key, value) {
|
2020-11-25 06:54:09 +00:00
|
|
|
let s
|
|
|
|
if (this.map.has(key)) {
|
|
|
|
const exists = this.map.get(key).exists()
|
|
|
|
s = this.map.get(key).set(value)
|
|
|
|
if (exists) {
|
|
|
|
this.broadcast("editItem", key)
|
|
|
|
} else {
|
|
|
|
this.broadcast("addItem", key)
|
|
|
|
}
|
2020-11-24 12:27:41 +00:00
|
|
|
} else {
|
2020-11-25 06:54:09 +00:00
|
|
|
s = new this.inner().set(value)
|
|
|
|
this.map.set(key, s)
|
|
|
|
this.broadcast("addItem", key)
|
2020-11-24 12:27:41 +00:00
|
|
|
}
|
2020-11-25 06:54:09 +00:00
|
|
|
return s
|
2020-11-24 12:27:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
delete(key) {
|
|
|
|
if (this.backing.has(key)) {
|
|
|
|
this.backing.delete(key)
|
|
|
|
this.broadcast("deleteItem", key)
|
2020-10-19 11:43:33 +00:00
|
|
|
}
|
|
|
|
}
|
2020-10-15 03:43:37 +00:00
|
|
|
}
|
|
|
|
|
2020-10-23 14:15:14 +00:00
|
|
|
module.exports = {SubscribeMap}
|