Fix apply-edit button on user suggestions

And simplify waiting for preview-loaded.

Release-Notes: skip
Change-Id: If824375ebf7ffe686e1eb3ff15adfaeafa04ee9b
diff --git a/polygerrit-ui/app/elements/shared/gr-fix-suggestions/gr-fix-suggestions.ts b/polygerrit-ui/app/elements/shared/gr-fix-suggestions/gr-fix-suggestions.ts
index 8ff0292..a70ca07 100644
--- a/polygerrit-ui/app/elements/shared/gr-fix-suggestions/gr-fix-suggestions.ts
+++ b/polygerrit-ui/app/elements/shared/gr-fix-suggestions/gr-fix-suggestions.ts
@@ -25,7 +25,6 @@
 import {storageServiceToken} from '../../../services/storage/gr-storage_impl';
 import {getAppContext} from '../../../services/app-context';
 import {Interaction} from '../../../constants/reporting';
-import {waitUntil} from '../../../utils/async-util';
 
 export const COLLAPSE_SUGGESTION_STORAGE_KEY = 'collapseSuggestionStorageKey';
 
@@ -215,6 +214,7 @@
       </div>
       <gr-suggestion-diff-preview
         .fixSuggestionInfo=${this.comment?.fix_suggestions?.[0]}
+        @preview-loaded=${() => (this.previewLoaded = true)}
       ></gr-suggestion-diff-preview>`;
   }
 
@@ -300,17 +300,7 @@
   override updated(changedProperties: PropertyValues) {
     super.updated(changedProperties);
     if (changedProperties.has('comment') && this.comment?.fix_suggestions) {
-      this.waitForPreviewToLoad();
-    }
-  }
-
-  private async waitForPreviewToLoad() {
-    this.previewLoaded = false;
-    try {
-      await waitUntil(() => !!this.suggestionDiffPreview?.preview);
-      this.previewLoaded = true;
-    } catch (error) {
-      console.error('Error waiting for preview to load:', error);
+      this.previewLoaded = false;
     }
   }
 }
diff --git a/polygerrit-ui/app/elements/shared/gr-suggestion-diff-preview/gr-suggestion-diff-preview.ts b/polygerrit-ui/app/elements/shared/gr-suggestion-diff-preview/gr-suggestion-diff-preview.ts
index 5dbf9b7..9d8b327 100644
--- a/polygerrit-ui/app/elements/shared/gr-suggestion-diff-preview/gr-suggestion-diff-preview.ts
+++ b/polygerrit-ui/app/elements/shared/gr-suggestion-diff-preview/gr-suggestion-diff-preview.ts
@@ -37,6 +37,9 @@
 import {createChangeUrl} from '../../../models/views/change';
 import {getFileExtension} from '../../../utils/file-util';
 
+export interface PreviewLoadedDetail {
+  previewLoadedFor?: string | FixSuggestionInfo;
+}
 /**
  * Diff preview for
  * 1. code block suggestion vs commented Text
@@ -254,6 +257,10 @@
       this.preview = currentPreviews[0];
       this.previewLoadedFor = this.fixSuggestionInfo;
       this.previewed = true;
+
+      fire(this, 'preview-loaded', {
+        previewLoadedFor: this.fixSuggestionInfo,
+      });
     }
 
     return res;
@@ -318,4 +325,7 @@
   interface HTMLElementTagNameMap {
     'gr-suggestion-diff-preview': GrSuggestionDiffPreview;
   }
+  interface HTMLElementEventMap {
+    'preview-loaded': CustomEvent<PreviewLoadedDetail>;
+  }
 }
diff --git a/polygerrit-ui/app/elements/shared/gr-user-suggestion-fix/gr-user-suggestion-fix.ts b/polygerrit-ui/app/elements/shared/gr-user-suggestion-fix/gr-user-suggestion-fix.ts
index fef2252..3c3d52e 100644
--- a/polygerrit-ui/app/elements/shared/gr-user-suggestion-fix/gr-user-suggestion-fix.ts
+++ b/polygerrit-ui/app/elements/shared/gr-user-suggestion-fix/gr-user-suggestion-fix.ts
@@ -18,7 +18,6 @@
 import {changeModelToken} from '../../../models/change/change-model';
 import {Comment, PatchSetNumber} from '../../../types/common';
 import {commentModelToken} from '../gr-comment-model/gr-comment-model';
-import {waitUntil} from '../../../utils/async-util';
 import {createUserFixSuggestion} from '../../../utils/comment-util';
 
 declare global {
@@ -153,11 +152,19 @@
         </div>
       </div>
       <gr-suggestion-diff-preview
-        .fixSuggestions=${fixSuggestions[0]}
+        .fixSuggestionInfo=${fixSuggestions[0]}
         .codeText=${code}
+        @preview-loaded=${() => (this.previewLoaded = true)}
       ></gr-suggestion-diff-preview>`;
   }
 
+  override updated(changedProperties: PropertyValues) {
+    super.updated(changedProperties);
+    if (changedProperties.has('commentedText') && this.commentedText) {
+      this.previewLoaded = false;
+    }
+  }
+
   handleShowFix() {
     if (!this.textContent) return;
     fire(this, 'open-user-suggest-preview', {code: this.textContent});
@@ -180,23 +187,6 @@
     if (!this.previewLoaded) return 'Fix is still loading ...';
     return '';
   }
-
-  override updated(changedProperties: PropertyValues) {
-    super.updated(changedProperties);
-    if (changedProperties.has('textContent') && this.textContent) {
-      this.waitForPreviewToLoad();
-    }
-  }
-
-  private async waitForPreviewToLoad() {
-    this.previewLoaded = false;
-    try {
-      await waitUntil(() => !!this.suggestionDiffPreview?.preview);
-      this.previewLoaded = true;
-    } catch (error) {
-      console.error('Error waiting for preview to load:', error);
-    }
-  }
 }
 
 declare global {