diff --git a/custom_components/nestquest/www/nestquest-cards.js b/custom_components/nestquest/www/nestquest-cards.js index b7af5a7..d7ed393 100644 --- a/custom_components/nestquest/www/nestquest-cards.js +++ b/custom_components/nestquest/www/nestquest-cards.js @@ -1135,6 +1135,7 @@ class Te extends A { _clockTimer; _unsubs = []; _subscribed = !1; + _subGeneration = 0; setConfig(t) { if (!t || typeof t != "object") throw new Error("Invalid configuration"); @@ -1151,24 +1152,25 @@ class Te extends A { if (!t) return; this._subscribed = !0; - const e = (n) => { - n.then((i) => { - this._subscribed ? this._unsubs.push(i) : i(); + const e = ++this._subGeneration, n = (i) => { + i.then((r) => { + this._subscribed && e === this._subGeneration ? this._unsubs.push(r) : r(); }).catch(() => { }); }; - for (const n of pe) - e( - t.subscribeEvents(() => this.requestUpdate(), n) + for (const i of pe) + n( + t.subscribeEvents(() => this.requestUpdate(), i) ); - e( - t.subscribeEvents((n) => { - const i = he(n); - (i.startsWith("sensor.nestquest_") || i.startsWith("binary_sensor.nestquest_")) && this.requestUpdate(); + n( + t.subscribeEvents((i) => { + const r = he(i); + (r.startsWith("sensor.nestquest_") || r.startsWith("binary_sensor.nestquest_")) && this.requestUpdate(); }, "state_changed") ); } _unsubscribeLive() { + this._subGeneration++; for (const t of this._unsubs) t(); this._unsubs = [], this._subscribed = !1; @@ -2726,6 +2728,7 @@ class un extends A { _completeTimer; _unsubs = []; _subscribed = !1; + _subGeneration = 0; setConfig(t) { if (!t || typeof t != "object") throw new Error("Invalid configuration"); @@ -2742,24 +2745,25 @@ class un extends A { if (!t) return; this._subscribed = !0; - const e = (n) => { - n.then((i) => { - this._subscribed ? this._unsubs.push(i) : i(); + const e = ++this._subGeneration, n = (i) => { + i.then((r) => { + this._subscribed && e === this._subGeneration ? this._unsubs.push(r) : r(); }).catch(() => { }); }; - for (const n of Le) - e( - t.subscribeEvents(() => this.requestUpdate(), n) + for (const i of Le) + n( + t.subscribeEvents(() => this.requestUpdate(), i) ); - e( - t.subscribeEvents((n) => { - const i = De(n); - (i.startsWith("sensor.nestquest_") || i.startsWith("binary_sensor.nestquest_")) && this.requestUpdate(); + n( + t.subscribeEvents((i) => { + const r = De(i); + (r.startsWith("sensor.nestquest_") || r.startsWith("binary_sensor.nestquest_")) && this.requestUpdate(); }, "state_changed") ); } _unsubscribeLive() { + this._subGeneration++; for (const t of this._unsubs) t(); this._unsubs = [], this._subscribed = !1; diff --git a/frontend/src/cards/party-board.ts b/frontend/src/cards/party-board.ts index d8ce085..5b2843f 100644 --- a/frontend/src/cards/party-board.ts +++ b/frontend/src/cards/party-board.ts @@ -743,6 +743,7 @@ export class NestQuestPartyBoardCard extends LitElement { private _clockTimer?: number; private _unsubs: Array<() => void> = []; private _subscribed = false; + private _subGeneration = 0; setConfig(config: CardConfig): void { if (!config || typeof config !== "object") { @@ -773,10 +774,11 @@ export class NestQuestPartyBoardCard extends LitElement { return; } this._subscribed = true; + const token = ++this._subGeneration; const track = (unsubPromise: Promise<() => void>): void => { unsubPromise .then((unsub) => { - if (this._subscribed) { + if (this._subscribed && token === this._subGeneration) { this._unsubs.push(unsub); } else { unsub(); @@ -803,6 +805,7 @@ export class NestQuestPartyBoardCard extends LitElement { } private _unsubscribeLive(): void { + this._subGeneration++; for (const unsub of this._unsubs) { unsub(); } diff --git a/frontend/src/cards/quest-log.ts b/frontend/src/cards/quest-log.ts index ed74734..34c7b3d 100644 --- a/frontend/src/cards/quest-log.ts +++ b/frontend/src/cards/quest-log.ts @@ -1389,6 +1389,7 @@ export class NestQuestQuestLogCard extends LitElement { private _completeTimer?: number; private _unsubs: Array<() => void> = []; private _subscribed = false; + private _subGeneration = 0; setConfig(config: QuestLogCardConfig): void { if (!config || typeof config !== "object") { @@ -1419,10 +1420,11 @@ export class NestQuestQuestLogCard extends LitElement { return; } this._subscribed = true; + const token = ++this._subGeneration; const track = (unsubPromise: Promise<() => void>): void => { unsubPromise .then((unsub) => { - if (this._subscribed) { + if (this._subscribed && token === this._subGeneration) { this._unsubs.push(unsub); } else { unsub(); @@ -1449,6 +1451,7 @@ export class NestQuestQuestLogCard extends LitElement { } private _unsubscribeLive(): void { + this._subGeneration++; for (const unsub of this._unsubs) { unsub(); }