Implement new `allow_autocompleting_comments` user preference
Backend addition in change 425557.
Release-Notes: skip
Google-Bug-Id: b/340823503
Change-Id: I38d73f35af4da2b7ff42dad5026da0307f125ced
diff --git a/polygerrit-ui/app/constants/constants.ts b/polygerrit-ui/app/constants/constants.ts
index 0fa58f4..b21663a 100644
--- a/polygerrit-ui/app/constants/constants.ts
+++ b/polygerrit-ui/app/constants/constants.ts
@@ -264,6 +264,7 @@
default_base_for_merges: DefaultBase.AUTO_MERGE,
allow_browser_notifications: false,
allow_suggest_code_while_commenting: true,
+ allow_autocompleting_comments: true,
diff_page_sidebar: 'NONE',
};
}
diff --git a/polygerrit-ui/app/elements/settings/gr-preferences/gr-preferences.ts b/polygerrit-ui/app/elements/settings/gr-preferences/gr-preferences.ts
index bb0f1e9..fdb4f22 100644
--- a/polygerrit-ui/app/elements/settings/gr-preferences/gr-preferences.ts
+++ b/polygerrit-ui/app/elements/settings/gr-preferences/gr-preferences.ts
@@ -57,6 +57,9 @@
@query('#allowSuggestCodeWhileCommenting')
allowSuggestCodeWhileCommenting?: HTMLInputElement;
+ @query('#allowAiCommentAutocompletion')
+ allowAiCommentAutocompletion?: HTMLInputElement;
+
@query('#defaultBaseForMergesSelect')
defaultBaseForMergesSelect!: HTMLInputElement;
@@ -284,6 +287,7 @@
</section>
${this.renderBrowserNotifications()}
${this.renderGenerateSuggestionWhenCommenting()}
+ ${this.renderAiCommentAutocompletion()}
${this.renderDefaultBaseForMerges()}
<section>
<label class="title" for="relativeDateInChangeTable"
@@ -519,6 +523,37 @@
`;
}
+ // When the experiment is over, move this back to render(),
+ // removing this function.
+ private renderAiCommentAutocompletion() {
+ if (
+ !this.flagsService.isEnabled(KnownExperimentId.COMMENT_AUTOCOMPLETION) ||
+ !this.suggestionsProvider
+ )
+ return nothing;
+ return html`
+ <section id="allowAiCommentAutocompletionSection">
+ <div class="title">
+ <label for="allowAiCommentAutocompletion"
+ >AI suggested text completions while commenting</label
+ >
+ </div>
+ <span class="value">
+ <input
+ id="allowAiCommentAutocompletion"
+ type="checkbox"
+ ?checked=${this.prefs?.allow_autocompleting_comments}
+ @change=${() => {
+ this.prefs!.allow_autocompleting_comments =
+ this.allowAiCommentAutocompletion!.checked;
+ this.requestUpdate();
+ }}
+ />
+ </span>
+ </section>
+ `;
+ }
+
// When this is fixed and can be re-enabled, move this back to render()
// and remove function.
private renderDefaultBaseForMerges() {
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 f3e5347..a2fd3d6 100644
--- a/polygerrit-ui/app/elements/shared/gr-comment/gr-comment.ts
+++ b/polygerrit-ui/app/elements/shared/gr-comment/gr-comment.ts
@@ -227,6 +227,9 @@
*/
@state() autocompleteHint = '';
+ /** Based on user preferences. */
+ @state() autocompleteEnabled = true;
+
readonly autocompleteCache = new AutocompleteCache();
/* The 'dirty' state of !comment.unresolved, which will be saved on demand. */
@@ -443,6 +446,7 @@
this,
() => this.getUserModel().preferences$,
prefs => {
+ this.autocompleteEnabled = !!prefs.allow_autocompleting_comments;
if (
this.generateSuggestion !==
!!prefs.allow_suggest_code_while_commenting
@@ -1339,6 +1343,7 @@
const change = this.getChangeModel().getChange();
if (
!enabled ||
+ !this.autocompleteEnabled ||
!suggestionsProvider?.autocompleteComment ||
!change ||
!this.comment?.patch_set ||
diff --git a/polygerrit-ui/app/test/test-data-generators.ts b/polygerrit-ui/app/test/test-data-generators.ts
index 3829f57..7d666e8 100644
--- a/polygerrit-ui/app/test/test-data-generators.ts
+++ b/polygerrit-ui/app/test/test-data-generators.ts
@@ -712,6 +712,7 @@
email_strategy: EmailStrategy.ENABLED,
allow_browser_notifications: true,
allow_suggest_code_while_commenting: true,
+ allow_autocompleting_comments: true,
};
}
diff --git a/polygerrit-ui/app/types/common.ts b/polygerrit-ui/app/types/common.ts
index 4dd965c..072a872 100644
--- a/polygerrit-ui/app/types/common.ts
+++ b/polygerrit-ui/app/types/common.ts
@@ -1344,6 +1344,7 @@
email_format?: EmailFormat;
allow_browser_notifications?: boolean;
allow_suggest_code_while_commenting?: boolean;
+ allow_autocompleting_comments?: boolean;
diff_page_sidebar?: DiffPageSidebar;
}