Add subscribe method to state class
This makes the State class fully compatible with svelte stores
This commit is contained in:
parent
69a2aa1ca3
commit
035eeb8fc0
2 changed files with 12 additions and 1 deletions
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "skooma",
|
"name": "skooma",
|
||||||
"version": "1.6.1",
|
"version": "1.7.0",
|
||||||
"author": "darkwiiplayer",
|
"author": "darkwiiplayer",
|
||||||
"license": "Unlicense",
|
"license": "Unlicense",
|
||||||
"main": "skooma.js",
|
"main": "skooma.js",
|
||||||
|
|
11
state.js
11
state.js
|
@ -160,6 +160,17 @@ export class State extends SimpleState {
|
||||||
return this.#target[prop]
|
return this.#target[prop]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
subscribe(prop, callback) {
|
||||||
|
if (!callback) return this.subscribe("value", prop)
|
||||||
|
|
||||||
|
const controller = new AbortController()
|
||||||
|
this.addEventListener("change", ({final}) => {
|
||||||
|
if (final.has(prop)) return callback(final.get(prop))
|
||||||
|
}, {signal: controller.signal})
|
||||||
|
callback(this.value)
|
||||||
|
return () => controller.abort()
|
||||||
|
}
|
||||||
|
|
||||||
// Backwards compatibility
|
// Backwards compatibility
|
||||||
get proxy() { return this.values }
|
get proxy() { return this.values }
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue