Merge "Save only previewed suggestions"
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 51613e8..a4b4f13 100644
--- a/polygerrit-ui/app/elements/shared/gr-comment/gr-comment.ts
+++ b/polygerrit-ui/app/elements/shared/gr-comment/gr-comment.ts
@@ -87,6 +87,8 @@
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 {waitUntil} from '../../../utils/async-util';
// visible for testing
export const AUTO_SAVE_DEBOUNCE_DELAY_MS = 2000;
@@ -155,6 +157,9 @@
@query('#confirmDeleteCommentDialog')
confirmDeleteDialog?: GrConfirmDeleteCommentDialog;
+ @query('#suggestionDiffPreview')
+ suggestionDiffPreview?: GrSuggestionDiffPreview;
+
@property({type: Object})
comment?: Comment;
@@ -1059,6 +1064,7 @@
if (this.generatedFixSuggestion) {
return html`<gr-suggestion-diff-preview
+ id="suggestionDiffPreview"
.fixSuggestionInfo=${this.generatedFixSuggestion}
></gr-suggestion-diff-preview>`;
} else if (this.generatedSuggestion) {
@@ -1269,7 +1275,13 @@
return;
}
this.generatedFixSuggestion = suggestion;
- this.autoSaveTrigger$.next();
+ try {
+ waitUntil(() => this.getFixSuggestions() !== undefined);
+ this.autoSaveTrigger$.next();
+ } catch (error) {
+ // Error is ok in some cases like quick save by user.
+ console.warn(error);
+ }
}
private renderRobotActions() {
@@ -1682,7 +1694,7 @@
isError(this.comment) ||
this.messageText.trimEnd() !== this.comment.message ||
this.unresolved !== this.comment.unresolved ||
- !deepEqual(this.comment.fix_suggestions, this.getFixSuggestions())
+ this.isFixSuggestionChanged()
);
}
@@ -1690,15 +1702,22 @@
private rawSave(options: {showToast: boolean}) {
assert(isDraft(this.comment), 'only drafts are editable');
assert(!isSaving(this.comment), 'saving already in progress');
- return this.getCommentsModel().saveDraft(
- {
- ...this.comment,
- message: this.messageText.trimEnd(),
- unresolved: this.unresolved,
- fix_suggestions: this.getFixSuggestions(),
- },
- options.showToast
- );
+ const draft: DraftInfo = {
+ ...this.comment,
+ message: this.messageText.trimEnd(),
+ unresolved: this.unresolved,
+ };
+ if (this.isFixSuggestionChanged()) {
+ draft.fix_suggestions = this.getFixSuggestions();
+ }
+ return this.getCommentsModel().saveDraft(draft, options.showToast);
+ }
+
+ isFixSuggestionChanged(): boolean {
+ // Check to not change fix suggestion when draft is not being edited only
+ // when user quickly disable generating suggestions and click save
+ if (!this.editing && this.generateSuggestion) return false;
+ return !deepEqual(this.comment?.fix_suggestions, this.getFixSuggestions());
}
getFixSuggestions(): FixSuggestionInfo[] | undefined {
@@ -1708,6 +1727,13 @@
if (!this.generatedFixSuggestion) return undefined;
// Disable fix suggestions when the comment already has a user suggestion
if (this.comment && hasUserSuggestion(this.comment)) return undefined;
+ // we ignore fixSuggestions until they are previewed.
+ if (
+ this.suggestionDiffPreview &&
+ !this.suggestionDiffPreview?.previewed &&
+ !this.suggestionLoading
+ )
+ return undefined;
return [this.generatedFixSuggestion];
}
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 aebc638..ef02c95 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
@@ -1081,7 +1081,7 @@
await element.updateComplete;
assert.dom.equal(
queryAndAssert(element, 'gr-suggestion-diff-preview'),
- /* HTML */ '<gr-suggestion-diff-preview> </gr-suggestion-diff-preview>'
+ /* HTML */ '<gr-suggestion-diff-preview id="suggestionDiffPreview"> </gr-suggestion-diff-preview>'
);
});
});
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 923a00e..8314912 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
@@ -62,6 +62,9 @@
@property({type: Boolean})
showAddSuggestionButton = false;
+ @property({type: Boolean, attribute: 'previewed', reflect: true})
+ previewed = false;
+
@property({type: String})
uuid?: string;
@@ -270,6 +273,7 @@
)
return;
+ this.previewed = false;
this.reporting.time(Timing.PREVIEW_FIX_LOAD);
const res = await this.restApiService.getFixPreview(
this.changeNum,
@@ -287,6 +291,7 @@
if (currentPreviews.length > 0) {
this.preview = currentPreviews[0];
this.previewLoadedFor = this.fixSuggestionInfo;
+ this.previewed = true;
}
return res;