Improve Fix Suggestions UI - hide fix suggestion when comment is collapsed - show ML-Suggested Edit when fix suggestion is from ML - extend suggestionsProvider - getFixSuggestionTitle for option to have own title for fix suggestion - getDocumentationLink for ability to have own documentation link Release-Notes: skip Google-Bug-Id: b/326195247 Change-Id: I3cdf2eccc9864f5e1efc463b74a389d6733f4f1f
diff --git a/polygerrit-ui/app/api/suggestions.ts b/polygerrit-ui/app/api/suggestions.ts index 3bc310c..b4158be 100644 --- a/polygerrit-ui/app/api/suggestions.ts +++ b/polygerrit-ui/app/api/suggestions.ts
@@ -35,6 +35,21 @@ suggestCode?(commentData: SuggestCodeRequest): Promise<SuggestCodeResponse>; suggestFix?(commentData: SuggestCodeRequest): Promise<SuggestedFixResponse>; /** + * Gets the title to display on the fix suggestion preview. + * + * @param fix_suggestions A list of suggested fixes. + * @return The title string or empty to use the default title. + */ + getFixSuggestionTitle?(fix_suggestions?: FixSuggestionInfo[]): string; + /** + * Gets a link to documentation for icon help next to title + * + * @param fix_suggestions A list of suggested fixes. + * @return The documentation URL string or empty to use the default link to + * gerrit documentation about fix suggestions. + */ + getDocumentationLink?(fix_suggestions?: FixSuggestionInfo[]): string; + /** * List of supported file extensions. If undefined, all file extensions supported. */ supportedFileExtensions?: string[];
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 1640b7a..9ac1879 100644 --- a/polygerrit-ui/app/elements/shared/gr-comment/gr-comment.ts +++ b/polygerrit-ui/app/elements/shared/gr-comment/gr-comment.ts
@@ -1010,7 +1010,12 @@ } private renderFixSuggestionPreview() { - if (!this.comment?.fix_suggestions || this.editing || isRobot(this.comment)) + if ( + !this.comment?.fix_suggestions || + this.editing || + isRobot(this.comment) || + this.collapsed + ) return nothing; return html`<gr-fix-suggestions .comment=${this.comment} @@ -1104,7 +1109,9 @@ ); }} /> - Generate Suggestion + ${this.flagsService.isEnabled(KnownExperimentId.ML_SUGGESTED_EDIT_V2) + ? 'Attach ML-suggested edit' + : 'Generate Suggestion'} ${when( this.suggestionLoading, () => html`<span class="loadingSpin"></span>`, @@ -1112,9 +1119,10 @@ )} </label> <a - href=${getDocUrl( + href=${this.suggestionsProvider?.getDocumentationLink?.() || + getDocUrl( this.docsBaseUrl, - 'user-suggest-edits.html#_generate_suggestion' + 'user-suggest-edits.html$_generate_suggestion' )} target="_blank" rel="noopener noreferrer"
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 02d64ff..4d5889f 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
@@ -18,6 +18,8 @@ import {changeModelToken} from '../../../models/change/change-model'; import {Comment, isDraft, PatchSetNumber} from '../../../types/common'; import {OpenFixPreviewEventDetail} from '../../../types/events'; +import {pluginLoaderToken} from '../gr-js-api-interface/gr-plugin-loader'; +import {SuggestionsProvider} from '../../../api/suggestions'; /** * gr-fix-suggestions is UI for comment.fix_suggestions. @@ -38,10 +40,15 @@ @state() latestPatchNum?: PatchSetNumber; + @state() + suggestionsProvider?: SuggestionsProvider; + private readonly getConfigModel = resolve(this, configModelToken); private readonly getChangeModel = resolve(this, changeModelToken); + private readonly getPluginLoader = resolve(this, pluginLoaderToken); + constructor() { super(); subscribe( @@ -56,6 +63,18 @@ ); } + override connectedCallback() { + super.connectedCallback(); + this.getPluginLoader() + .awaitPluginsLoaded() + .then(() => { + const suggestionsPlugins = + this.getPluginLoader().pluginsModel.getState().suggestionsPlugins; + // We currently support results from only 1 provider. + this.suggestionsProvider = suggestionsPlugins?.[0]?.provider; + }); + } + static override get styles() { return [ css` @@ -79,11 +98,19 @@ } override render() { + if (!this.comment?.fix_suggestions) return; + const fix_suggestions = this.comment.fix_suggestions; return html`<div class="header"> <div class="title"> - <span>Suggested edit</span> + <span + >${this.suggestionsProvider?.getFixSuggestionTitle?.( + fix_suggestions + ) || 'Suggested edit'}</span + > <a - href=${getDocUrl(this.docsBaseUrl, 'user-suggest-edits.html')} + href=${this.suggestionsProvider?.getDocumentationLink?.( + fix_suggestions + ) || getDocUrl(this.docsBaseUrl, 'user-suggest-edits.html')} target="_blank" rel="noopener noreferrer" ><gr-icon icon="help" title="read documentation"></gr-icon