From 888f63d90d63b2e349c5ed51d3dffbe63006735f Mon Sep 17 00:00:00 2001 From: Quentin Deroubaix Date: Mon, 6 Jan 2025 15:28:29 +0100 Subject: [PATCH] feat: use createSubscriber in coffee brewer --- .../samples/progressbar/brewer.svelte.ts | 36 +++++++------------ 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/svelte/demo/src/bootstrap/samples/progressbar/brewer.svelte.ts b/svelte/demo/src/bootstrap/samples/progressbar/brewer.svelte.ts index ffe227d050..924ce92cc8 100644 --- a/svelte/demo/src/bootstrap/samples/progressbar/brewer.svelte.ts +++ b/svelte/demo/src/bootstrap/samples/progressbar/brewer.svelte.ts @@ -1,33 +1,23 @@ -import {tick} from 'svelte'; +import {createSubscriber} from 'svelte/reactivity'; export class Brewer { #running = $state(false); #value = $state(0); #interval?: any; - #subscribers = 0; + readonly #subscribe = createSubscriber(() => { + this.#interval = setInterval(() => { + if (this.#running && this.#value < 100) { + this.#value = this.#value + 10; + } + }, 500); + return () => { + clearInterval(this.#interval); + this.#interval = undefined; + }; + }); get value() { - if ($effect.tracking()) { - $effect(() => { - if (this.#subscribers === 0) { - this.#interval = setInterval(() => { - if (this.#running && this.#value < 100) { - this.#value = this.#value + 10; - } - }, 500); - } - this.#subscribers++; - return () => { - void tick().then(() => { - this.#subscribers--; - if (this.#subscribers === 0) { - clearInterval(this.#interval); - this.#interval = undefined; - } - }); - }; - }); - } + this.#subscribe(); return this.#value; }