Show Edit button under commit message when in Edit mode
User can edit commit message in Edit mode, just differently. So EDIT
button can be shown, it just open commit message to edit in editor
view.
This makes it more clear that in EDIT mode commit message is editable.
Google-Bug-Id: b/332835638
Release-Notes: skip
Change-Id: Id8699ac481d215061644f18e2f17cd96bfab627e
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts
index 2914a03..ed42b3b 100644
--- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts
+++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts
@@ -1290,8 +1290,7 @@
const hideEditCommitMessage = this.computeHideEditCommitMessage(
this.loggedIn,
this.editingCommitMessage,
- this.change,
- this.editMode
+ this.change
);
return html` <div class="changeInfo">
<div class="changeInfo-column changeMetadata">
@@ -1708,14 +1707,12 @@
computeHideEditCommitMessage(
loggedIn: boolean,
editing: boolean,
- change?: ParsedChangeInfo,
- editMode?: boolean
+ change?: ParsedChangeInfo
) {
if (
!loggedIn ||
editing ||
- (change && change.status === ChangeStatus.MERGED) ||
- editMode
+ (change && change.status === ChangeStatus.MERGED)
) {
return true;
}
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.ts b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.ts
index 4d6403a..1fd4aa2 100644
--- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.ts
+++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.ts
@@ -1175,12 +1175,7 @@
assert.isTrue(
element.computeHideEditCommitMessage(true, false, mergedChanged)
);
- assert.isTrue(
- element.computeHideEditCommitMessage(true, false, change, true)
- );
- assert.isFalse(
- element.computeHideEditCommitMessage(true, false, change, false)
- );
+ assert.isFalse(element.computeHideEditCommitMessage(true, false, change));
});
test('handleCommitMessageSave trims trailing whitespace', async () => {
diff --git a/polygerrit-ui/app/elements/shared/gr-editable-content/gr-editable-content.ts b/polygerrit-ui/app/elements/shared/gr-editable-content/gr-editable-content.ts
index 92505d2..3964422 100644
--- a/polygerrit-ui/app/elements/shared/gr-editable-content/gr-editable-content.ts
+++ b/polygerrit-ui/app/elements/shared/gr-editable-content/gr-editable-content.ts
@@ -12,10 +12,11 @@
import '../../plugins/gr-endpoint-slot/gr-endpoint-slot';
import {subscribe} from '../../lit/subscription-controller';
import {changeModelToken} from '../../../models/change/change-model';
+import {navigationToken} from '../../core/gr-navigation/gr-navigation';
import {fire, fireAlert} from '../../../utils/event-util';
import {getAppContext} from '../../../services/app-context';
import {debounce, DelayedTask} from '../../../utils/async-util';
-import {queryAndAssert} from '../../../utils/common-util';
+import {assertIsDefined, queryAndAssert} from '../../../utils/common-util';
import {IronAutogrowTextareaElement} from '@polymer/iron-autogrow-textarea/iron-autogrow-textarea';
import {Interaction} from '../../../constants/reporting';
import {LitElement, html} from 'lit';
@@ -28,7 +29,13 @@
EditableContentSaveEvent,
ValueChangedEvent,
} from '../../../types/events';
-import {EmailInfo, GitPersonInfo} from '../../../types/common';
+import {
+ EmailInfo,
+ GitPersonInfo,
+ NumericChangeId,
+ RepoName,
+ RevisionPatchSetNum,
+} from '../../../types/common';
import {nothing} from 'lit';
import {classMap} from 'lit/directives/class-map.js';
import {when} from 'lit/directives/when.js';
@@ -36,6 +43,8 @@
import {storageServiceToken} from '../../../services/storage/gr-storage_impl';
import {resolve} from '../../../models/dependency';
import {formStyles} from '../../../styles/form-styles';
+import {createEditUrl} from '../../../models/views/change';
+import {SpecialFilePath} from '../../../constants/constants';
const RESTORED_MESSAGE = 'Content restored from a previous edit.';
const STORAGE_DEBOUNCE_INTERVAL_MS = 400;
@@ -101,6 +110,14 @@
@state()
latestCommitter?: GitPersonInfo;
+ @state() editMode = false;
+
+ @state() repoName?: RepoName;
+
+ @state() changeNum?: NumericChangeId;
+
+ @state() patchNum?: RevisionPatchSetNum;
+
private readonly restApiService = getAppContext().restApiService;
private readonly getChangeModel = resolve(this, changeModelToken);
@@ -109,6 +126,8 @@
private readonly reporting = getAppContext().reportingService;
+ private readonly getNavigation = resolve(this, navigationToken);
+
// Tests use this so needs to be non private
storeTask?: DelayedTask;
@@ -119,6 +138,26 @@
() => this.getChangeModel().latestCommitter$,
x => (this.latestCommitter = x)
);
+ subscribe(
+ this,
+ () => this.getChangeModel().editMode$,
+ editMode => (this.editMode = editMode)
+ );
+ subscribe(
+ this,
+ () => this.getChangeModel().repo$,
+ x => (this.repoName = x)
+ );
+ subscribe(
+ this,
+ () => this.getChangeModel().changeNum$,
+ x => (this.changeNum = x)
+ );
+ subscribe(
+ this,
+ () => this.getChangeModel().patchNum$,
+ x => (this.patchNum = x)
+ );
}
override disconnectedCallback() {
@@ -458,6 +497,20 @@
}
async handleEditCommitMessage() {
+ if (this.editMode) {
+ assertIsDefined(this.changeNum, 'changeNum');
+ assertIsDefined(this.repoName, 'repoName');
+ this.getNavigation().setUrl(
+ createEditUrl({
+ changeNum: this.changeNum,
+ repo: this.repoName,
+ patchNum: this.patchNum,
+ editView: {path: SpecialFilePath.COMMIT_MESSAGE},
+ })
+ );
+
+ return;
+ }
await this.loadEmails();
this.editing = true;
await this.updateComplete;
diff --git a/polygerrit-ui/app/elements/shared/gr-editable-content/gr-editable-content_test.ts b/polygerrit-ui/app/elements/shared/gr-editable-content/gr-editable-content_test.ts
index f8f530d..e8ccdd1 100644
--- a/polygerrit-ui/app/elements/shared/gr-editable-content/gr-editable-content_test.ts
+++ b/polygerrit-ui/app/elements/shared/gr-editable-content/gr-editable-content_test.ts
@@ -13,6 +13,12 @@
import {storageServiceToken} from '../../../services/storage/gr-storage_impl';
import {testResolver} from '../../../test/common-test-setup';
import {GrDropdownList} from '../gr-dropdown-list/gr-dropdown-list';
+import {navigationToken} from '../../core/gr-navigation/gr-navigation';
+import {
+ NumericChangeId,
+ RepoName,
+ RevisionPatchSetNum,
+} from '../../../api/rest-api';
const emails = [
{
@@ -180,6 +186,27 @@
queryAndAssert<GrButton>(element, 'gr-button[primary]').disabled
);
});
+
+ suite('in editMode', () => {
+ test('click opens edit url', async () => {
+ const setUrlStub = sinon.stub(testResolver(navigationToken), 'setUrl');
+ element.editMode = true;
+ element.changeNum = 42 as NumericChangeId;
+ element.repoName = 'Test Repo' as RepoName;
+ element.patchNum = '1' as RevisionPatchSetNum;
+ await element.updateComplete;
+ const editButton = queryAndAssert<GrButton>(
+ element,
+ 'gr-button.edit-commit-message'
+ );
+ editButton.click();
+ assert.isTrue(setUrlStub.called);
+ assert.equal(
+ setUrlStub.lastCall.args[0],
+ '/c/Test+Repo/+/42/1//COMMIT_MSG,edit'
+ );
+ });
+ });
});
suite('storageKey and related behavior', () => {