From 83270be2061418a73d86c9a42378109c0c90f33e Mon Sep 17 00:00:00 2001 From: Keegan George Date: Thu, 22 May 2025 12:12:46 -0700 Subject: [PATCH 1/3] DEV: Follow-up small fixes to diff-streamer --- .../discourse/components/modal/diff-modal.gjs | 35 +++++++++++++------ .../discourse/lib/diff-streamer.gjs | 2 +- .../modules/ai-helper/common/ai-helper.scss | 3 ++ 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/assets/javascripts/discourse/components/modal/diff-modal.gjs b/assets/javascripts/discourse/components/modal/diff-modal.gjs index 9cbd3cae4..0ae81af86 100644 --- a/assets/javascripts/discourse/components/modal/diff-modal.gjs +++ b/assets/javascripts/discourse/components/modal/diff-modal.gjs @@ -12,6 +12,7 @@ import concatClass from "discourse/helpers/concat-class"; import { ajax } from "discourse/lib/ajax"; import { popupAjaxError } from "discourse/lib/ajax-error"; import { bind } from "discourse/lib/decorators"; +import { escapeExpression } from "discourse/lib/utilities"; import { i18n } from "discourse-i18n"; import DiffStreamer from "../../lib/diff-streamer"; import SmoothStreamer from "../../lib/smooth-streamer"; @@ -19,11 +20,13 @@ import AiIndicatorWave from "../ai-indicator-wave"; export default class ModalDiffModal extends Component { @service currentUser; + @service siteSettings; @service messageBus; @tracked loading = false; @tracked finalResult = ""; - @tracked diffStreamer = new DiffStreamer(this.args.model.selectedText); + @tracked selectedText = escapeExpression(this.args.model.selectedText); + @tracked diffStreamer = new DiffStreamer(this.selectedText); @tracked suggestion = ""; @tracked smoothStreamer = new SmoothStreamer( @@ -36,6 +39,16 @@ export default class ModalDiffModal extends Component { this.suggestChanges(); } + get diffResult() { + if (this.diffStreamer.diff?.length > 0) { + return this.diffStreamer.diff; + } + + // Prevents flash by showing the + // original text when the diff is empty + return this.selectedText; + } + get isStreaming() { return this.diffStreamer.isStreaming || this.smoothStreamer.isStreaming; } @@ -93,7 +106,7 @@ export default class ModalDiffModal extends Component { data: { location: "composer", mode: this.args.model.mode, - text: this.args.model.selectedText, + text: this.selectedText, custom_prompt: this.args.model.customPromptValue, force_default_locale: true, }, @@ -109,7 +122,7 @@ export default class ModalDiffModal extends Component { if (this.suggestion) { this.args.model.toolbarEvent.replaceText( - this.args.model.selectedText, + this.selectedText, this.suggestion ); } @@ -119,21 +132,23 @@ export default class ModalDiffModal extends Component { ? this.finalResult : this.diffStreamer.suggestion; if (this.args.model.showResultAsDiff && finalResult) { - this.args.model.toolbarEvent.replaceText( - this.args.model.selectedText, - finalResult - ); + this.args.model.toolbarEvent.replaceText(this.selectedText, finalResult); } }