Simplify and improve checking if suggestion was previewed

listening to event is better than waituntil which has 1s delay.

Google-Bug-Id: b/373890480
Release-Notes: skip
Change-Id: I4fd1b1bb1f6e87b27f2fde1c8f411fb3cd716519
diff --git a/polygerrit-ui/app/elements/shared/gr-comment/gr-comment.ts b/polygerrit-ui/app/elements/shared/gr-comment/gr-comment.ts
index cf5ea9d..4c3aeaf 100644
--- a/polygerrit-ui/app/elements/shared/gr-comment/gr-comment.ts
+++ b/polygerrit-ui/app/elements/shared/gr-comment/gr-comment.ts
@@ -90,8 +90,11 @@
 import {getFileExtension} from '../../../utils/file-util';
 import {storageServiceToken} from '../../../services/storage/gr-storage_impl';
 import {deepEqual} from '../../../utils/deep-util';
-import {GrSuggestionDiffPreview} from '../gr-suggestion-diff-preview/gr-suggestion-diff-preview';
-import {noAwait, waitUntil} from '../../../utils/async-util';
+import {
+  GrSuggestionDiffPreview,
+  PreviewLoadedDetail,
+} from '../gr-suggestion-diff-preview/gr-suggestion-diff-preview';
+import {waitUntil} from '../../../utils/async-util';
 import {
   AutocompleteCache,
   AutocompletionContext,
@@ -1181,24 +1184,15 @@
         .fixSuggestionInfo=${this.generatedFixSuggestion}
         .patchSet=${this.comment?.patch_set}
         .commentId=${this.comment?.id}
+        @preview-loaded=${(event: CustomEvent<PreviewLoadedDetail>) =>
+          (this.previewedGeneratedFixSuggestion =
+            event.detail.previewLoadedFor)}
       ></gr-suggestion-diff-preview>`;
     } else {
       return nothing;
     }
   }
 
-  // visible for testing
-  async waitPreviewForGeneratedSuggestion() {
-    const generatedFixSuggestion = this.generatedFixSuggestion;
-    if (!generatedFixSuggestion) return;
-    await waitUntil(
-      () =>
-        !!this.suggestionDiffPreview?.previewed &&
-        this.suggestionDiffPreview?.previewLoadedFor === generatedFixSuggestion
-    );
-    this.previewedGeneratedFixSuggestion = generatedFixSuggestion;
-  }
-
   private renderGenerateSuggestEditButton() {
     if (!this.showGeneratedSuggestion()) {
       return nothing;
@@ -1323,7 +1317,6 @@
       return;
     }
     this.generatedFixSuggestion = suggestion;
-    noAwait(this.waitPreviewForGeneratedSuggestion());
 
     try {
       await waitUntil(() => this.getFixSuggestions() !== undefined);
@@ -1560,9 +1553,6 @@
     assert(isDraft(this.comment), 'only drafts are editable');
     if (this.editing) return;
     this.editing = true;
-    // For quickly opening and closing the comment, the suggestion diff preview
-    // might not have time to load and preview.
-    noAwait(this.waitPreviewForGeneratedSuggestion());
   }
 
   // TODO: Move this out of gr-comment. gr-comment should not have a comments
diff --git a/polygerrit-ui/app/elements/shared/gr-comment/gr-comment_test.ts b/polygerrit-ui/app/elements/shared/gr-comment/gr-comment_test.ts
index 377e003..84eee96 100644
--- a/polygerrit-ui/app/elements/shared/gr-comment/gr-comment_test.ts
+++ b/polygerrit-ui/app/elements/shared/gr-comment/gr-comment_test.ts
@@ -1155,7 +1155,14 @@
         suggestionDiffPreview.previewed = true;
         suggestionDiffPreview.previewLoadedFor = generatedFixSuggestion;
         await element.updateComplete;
-        await element.waitPreviewForGeneratedSuggestion();
+        // trigger event preview-loaded on suggestionDiffPreview with detail
+        suggestionDiffPreview.dispatchEvent(
+          new CustomEvent('preview-loaded', {
+            bubbles: true,
+            detail: {previewLoadedFor: generatedFixSuggestion},
+          })
+        );
+        // await element.waitPreviewForGeneratedSuggestion();
         await element.updateComplete;
         element.save();
         await element.updateComplete;
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 136979d..93f17c8 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
@@ -36,7 +36,7 @@
 import {getFileExtension} from '../../../utils/file-util';
 
 export interface PreviewLoadedDetail {
-  previewLoadedFor?: string | FixSuggestionInfo;
+  previewLoadedFor?: FixSuggestionInfo;
 }
 /**
  * Diff preview for