Extract map of final values into change event
Cached on first use for performance and more DRY
This commit is contained in:
parent
d62136e180
commit
6542047b7c
1 changed files with 9 additions and 2 deletions
11
state.js
11
state.js
|
@ -1,8 +1,15 @@
|
|||
export class ChangeEvent extends Event {
|
||||
#final
|
||||
constructor(...changes) {
|
||||
super('change')
|
||||
this.changes = changes
|
||||
}
|
||||
get final() {
|
||||
if (!this.#final) {
|
||||
this.#final = new Map(changes)
|
||||
}
|
||||
return this.#final
|
||||
}
|
||||
}
|
||||
|
||||
export class MapStorage extends Storage {
|
||||
|
@ -50,8 +57,8 @@ export class State extends EventTarget {
|
|||
// Try running a "<name>Changed" method for every changed property
|
||||
// Can be disabled to maybe squeeze out some performance
|
||||
if (options.methods ?? true) {
|
||||
this.addEventListener("change", ({changes}) => {
|
||||
new Map(changes).forEach((value, prop) => {
|
||||
this.addEventListener("change", ({final}) => {
|
||||
final.forEach((value, prop) => {
|
||||
if (`${prop}Changed` in this) this[`${prop}Changed`](value)
|
||||
})
|
||||
})
|
||||
|
|
Loading…
Reference in a new issue