diff --git a/assets/javascripts/discourse/components/modal/diff-modal.gjs b/assets/javascripts/discourse/components/modal/diff-modal.gjs index 81f938b1f..a7e465231 100644 --- a/assets/javascripts/discourse/components/modal/diff-modal.gjs +++ b/assets/javascripts/discourse/components/modal/diff-modal.gjs @@ -18,6 +18,8 @@ import DiffStreamer from "../../lib/diff-streamer"; import SmoothStreamer from "../../lib/smooth-streamer"; import AiIndicatorWave from "../ai-indicator-wave"; +const CHANNEL = "/discourse-ai/ai-helper/stream_composer_suggestion"; + export default class ModalDiffModal extends Component { @service currentUser; @service messageBus; @@ -49,12 +51,9 @@ export default class ModalDiffModal extends Component { } get isStreaming() { - // diffStreamer stops "streaming" when it is finished with a chunk - return ( - this.diffStreamer.isStreaming || - !this.diffStreamer.isDone || - this.smoothStreamer.isStreaming - ); + // diffStreamer stops Streaming when it is finished with a chunk, looking at isDone is safe + // it starts off not done + return !this.diffStreamer.isDone || this.smoothStreamer.isStreaming; } get primaryBtnLabel() { @@ -69,25 +68,23 @@ export default class ModalDiffModal extends Component { @bind subscribe() { - const channel = "/discourse-ai/ai-helper/stream_composer_suggestion"; - this.messageBus.subscribe(channel, this.updateResult); + this.messageBus.subscribe(CHANNEL, this.updateResult); } @bind - unsubscribe() { - const channel = "/discourse-ai/ai-helper/stream_composer_suggestion"; - this.messageBus.unsubscribe(channel, this.updateResult); + cleanup() { + // stop all callbacks so it does not end up streaming pointlessly + this.smoothStreamer.resetStreaming(); + this.diffStreamer.reset(); + this.messageBus.unsubscribe(CHANNEL, this.updateResult); } @action - async updateResult(result) { + updateResult(result) { this.loading = false; if (result.done) { this.finalResult = result.result; - } - - if (result.done) { this.loading = false; } @@ -154,7 +151,7 @@ export default class ModalDiffModal extends Component { <:body>
{{#if this.loading}} diff --git a/assets/javascripts/discourse/lib/diff-streamer.gjs b/assets/javascripts/discourse/lib/diff-streamer.gjs index 42a591f2a..dd8b86425 100644 --- a/assets/javascripts/discourse/lib/diff-streamer.gjs +++ b/assets/javascripts/discourse/lib/diff-streamer.gjs @@ -100,6 +100,7 @@ export default class DiffStreamer { this.currentWordIndex = 0; this.currentCharIndex = 0; this.isStreaming = false; + this.isDone = false; if (this.typingTimer) { cancel(this.typingTimer); this.typingTimer = null;