Extract map of final values into change event

Cached on first use for performance and more DRY
This commit is contained in:
Talia 2023-09-20 13:26:14 +02:00
parent d62136e180
commit 6542047b7c

View file

@ -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)
})
})