Show any edit weblinks in place of EDIT button
https://imgur.com/a/R9YPanV
Change-Id: Ib0b1f5cd59998f290694ca4437da2cfdef755a5e
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts
index 6f34067..09e9d7c 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts
+++ b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts
@@ -18,7 +18,10 @@
import '../gr-diff/gr-diff';
import {PolymerElement} from '@polymer/polymer/polymer-element';
import {htmlTemplate} from './gr-diff-host_html';
-import {GerritNav} from '../../core/gr-navigation/gr-navigation';
+import {
+ GerritNav,
+ GeneratedWebLink,
+} from '../../core/gr-navigation/gr-navigation';
import {
getLine,
getRange,
@@ -188,6 +191,9 @@
commitRange?: CommitRange;
@property({type: Object, notify: true})
+ editWeblinks?: GeneratedWebLink[];
+
+ @property({type: Object, notify: true})
filesWeblinks: FilesWebLinks | {} = {};
@property({type: Boolean, reflectToAttribute: true})
@@ -372,6 +378,7 @@
// Not waiting for coverage ranges intentionally as
// plugin loading should not block the content rendering
+ this.editWeblinks = this._getEditWeblinks(diff);
this.filesWeblinks = this._getFilesWeblinks(diff);
this.diff = diff;
const event = (await waitForEventOnce(this, 'render')) as CustomEvent;
@@ -487,6 +494,16 @@
});
}
+ _getEditWeblinks(diff: DiffInfo) {
+ if (!this.projectName || !this.commitRange || !this.path) return undefined;
+ return GerritNav.getEditWebLinks(
+ this.projectName,
+ this.commitRange.baseCommit,
+ this.path,
+ {weblinks: diff?.edit_web_links}
+ );
+ }
+
_getFilesWeblinks(diff: DiffInfo) {
if (!this.projectName || !this.commitRange || !this.path) return {};
return {
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js
index 5e1b5ff..6c96e34 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js
@@ -211,7 +211,7 @@
assert.isTrue(cancelStub.called);
});
- test('reload() loads files weblinks', () => {
+ test('reload() loads files weblinks', async () => {
element.change = createChange();
const weblinksStub = sinon.stub(GerritNav, '_generateWeblinks')
.returns({name: 'stubb', url: '#s'});
@@ -222,28 +222,40 @@
element.path = 'test-path';
element.commitRange = {baseCommit: 'test-base', commit: 'test-commit'};
element.patchRange = {};
- return element.reload().then(() => {
- assert.isTrue(weblinksStub.calledTwice);
- assert.isTrue(weblinksStub.firstCall.calledWith({
- commit: 'test-base',
- file: 'test-path',
- options: {
- weblinks: undefined,
- },
- repo: 'test-project',
- type: GerritNav.WeblinkType.FILE}));
- assert.isTrue(weblinksStub.secondCall.calledWith({
- commit: 'test-commit',
- file: 'test-path',
- options: {
- weblinks: undefined,
- },
- repo: 'test-project',
- type: GerritNav.WeblinkType.FILE}));
- assert.deepEqual(element.filesWeblinks, {
- meta_a: [{name: 'stubb', url: '#s'}],
- meta_b: [{name: 'stubb', url: '#s'}],
- });
+
+ await element.reload();
+
+ assert.equal(weblinksStub.callCount, 3);
+ assert.deepEqual(weblinksStub.firstCall.args[0], {
+ commit: 'test-base',
+ file: 'test-path',
+ options: {
+ weblinks: undefined,
+ },
+ repo: 'test-project',
+ type: GerritNav.WeblinkType.EDIT});
+ assert.deepEqual(element.editWeblinks, [{
+ name: 'stubb', url: '#s',
+ }]);
+ assert.deepEqual(weblinksStub.secondCall.args[0], {
+ commit: 'test-base',
+ file: 'test-path',
+ options: {
+ weblinks: undefined,
+ },
+ repo: 'test-project',
+ type: GerritNav.WeblinkType.FILE});
+ assert.deepEqual(weblinksStub.thirdCall.args[0], {
+ commit: 'test-commit',
+ file: 'test-path',
+ options: {
+ weblinks: undefined,
+ },
+ repo: 'test-project',
+ type: GerritNav.WeblinkType.FILE});
+ assert.deepEqual(element.filesWeblinks, {
+ meta_a: [{name: 'stubb', url: '#s'}],
+ meta_b: [{name: 'stubb', url: '#s'}],
});
});
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts
index 8ead181..829597d 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts
+++ b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts
@@ -37,7 +37,10 @@
KeyboardShortcutMixin,
Shortcut,
} from '../../../mixins/keyboard-shortcut-mixin/keyboard-shortcut-mixin';
-import {GerritNav} from '../../core/gr-navigation/gr-navigation';
+import {
+ GeneratedWebLink,
+ GerritNav,
+} from '../../core/gr-navigation/gr-navigation';
import {appContext} from '../../../services/app-context';
import {
computeAllPatchSets,
@@ -226,6 +229,9 @@
_isImageDiff?: boolean;
@property({type: Object})
+ _editWeblinks?: GeneratedWebLink[];
+
+ @property({type: Object})
_filesWeblinks?: FilesWebLinks;
@property({type: Object})
@@ -1785,10 +1791,19 @@
_computeCanEdit(
loggedIn?: boolean,
+ editWeblinks?: GeneratedWebLink[],
changeChangeRecord?: PolymerDeepPropertyChange<ChangeInfo, ChangeInfo>
) {
if (!changeChangeRecord?.base) return false;
- return loggedIn && changeIsOpen(changeChangeRecord.base);
+ return (
+ loggedIn &&
+ changeIsOpen(changeChangeRecord.base) &&
+ (!editWeblinks || editWeblinks.length === 0)
+ );
+ }
+
+ _computeShowEditLinks(editWeblinks?: GeneratedWebLink[]) {
+ return !!editWeblinks && editWeblinks.length > 0;
}
/**
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_html.ts b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_html.ts
index 0412779..63bf74e 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_html.ts
+++ b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_html.ts
@@ -316,7 +316,10 @@
_isBlameLoading)]]</gr-button
>
</span>
- <template is="dom-if" if="[[_computeCanEdit(_loggedIn, _change.*)]]">
+ <template
+ is="dom-if"
+ if="[[_computeCanEdit(_loggedIn, _editWeblinks, _change.*)]]"
+ >
<span class="separator"></span>
<span class="editButton">
<gr-button
@@ -327,6 +330,12 @@
>
</span>
</template>
+ <template is="dom-if" if="[[_computeShowEditLinks(_editWeblinks)]]">
+ <span class="separator"></span>
+ <template is="dom-repeat" items="[[_editWeblinks]]" as="weblink">
+ <a target="_blank" href$="[[weblink.url]]">[[weblink.name]]</a>
+ </template>
+ </template>
<span class="separator"></span>
<div class$="diffModeSelector [[_computeModeSelectHideClass(_diff)]]">
<span>Diff view:</span>
@@ -390,6 +399,7 @@
hidden=""
hidden$="[[_loading]]"
is-image-diff="{{_isImageDiff}}"
+ edit-weblinks="{{_editWeblinks}}"
files-weblinks="{{_filesWeblinks}}"
diff="{{_diff}}"
change-num="[[_changeNum]]"