Add shift+m shortcut to diff view

Shift+m marks the current file as reviewed and navigates to the next
unreviewed file.

Bug: Issue 9280
Change-Id: I11ac225dfbfdf07b10b35297314031c48fd0799c
This commit is contained in:
Kasper Nilsson
2018-11-12 10:55:29 -08:00
committed by Paladox
parent fc2599fbd2
commit eb12253ff0
4 changed files with 48 additions and 2 deletions

View File

@@ -161,6 +161,10 @@
type: Object,
computed: '_getRevisionInfo(_change)',
},
_reviewedFiles: {
type: Object,
value: () => new Set(),
},
},
behaviors: [
@@ -207,6 +211,7 @@
[this.Shortcut.TOGGLE_DIFF_MODE]: '_handleToggleDiffMode',
[this.Shortcut.TOGGLE_FILE_REVIEWED]: '_handleToggleFileReviewed',
[this.Shortcut.EXPAND_ALL_DIFF_CONTEXT]: '_handleExpandAllDiffContext',
[this.Shortcut.NEXT_UNREVIEWED_FILE]: '_handleNextUnreviewedFile',
// Final two are actually handled by gr-diff-comment-thread.
[this.Shortcut.EXPAND_ALL_COMMENT_THREADS]: null,
@@ -555,10 +560,18 @@
return {path: fileList[idx]};
},
_getReviewedFiles(changeNum, patchNum) {
return this.$.restAPI.getReviewedFiles(changeNum, patchNum)
.then(files => {
this._reviewedFiles = new Set(files);
return this._reviewedFiles;
});
},
_getReviewedStatus(editMode, changeNum, patchNum, path) {
if (editMode) { return Promise.resolve(false); }
return this.$.restAPI.getReviewedFiles(changeNum, patchNum)
.then(files => files.includes(path));
return this._getReviewedFiles(changeNum, patchNum)
.then(files => files.has(path));
},
_paramsChanged(value) {
@@ -1012,5 +1025,15 @@
if (this.shouldSuppressKeyboardShortcut(e)) { return; }
this.$.diffHost.expandAllContext();
},
_handleNextUnreviewedFile(e) {
this._setReviewed(true);
// Ensure that the currently viewed file always appears in unreviewedFiles
// so we resolve the right "next" file.
const unreviewedFiles = this._fileList
.filter(file =>
(file === this._path || !this._reviewedFiles.has(file)));
this._navToFile(this._path, unreviewedFiles, 1);
},
});
})();

View File

@@ -67,6 +67,7 @@ limitations under the License.
kb.bindShortcut(kb.Shortcut.EXPAND_ALL_DIFF_CONTEXT, 'shift+x');
kb.bindShortcut(kb.Shortcut.EXPAND_ALL_COMMENT_THREADS, 'e');
kb.bindShortcut(kb.Shortcut.COLLAPSE_ALL_COMMENT_THREADS, 'shift+e');
kb.bindShortcut(kb.Shortcut.NEXT_UNREVIEWED_FILE, 'shift+m');
let element;
let sandbox;
@@ -1106,5 +1107,22 @@ limitations under the License.
assert.isTrue(setStub.calledOnce);
assert.isTrue(setStub.calledWith(101, 'test-project'));
});
test('shift+m navigates to next unreviewed file', () => {
element._fileList = ['file1', 'file2', 'file3'];
element._reviewedFiles = new Set(['file1', 'file2']);
element._path = 'file1';
const reviewedStub = sandbox.stub(element, '_setReviewed');
const navStub = sandbox.stub(element, '_navToFile');
MockInteractions.pressAndReleaseKeyOn(element, 77, 'shift', 'm');
flushAsynchronousOperations();
assert.isTrue(reviewedStub.lastCall.args[0]);
assert.deepEqual(navStub.lastCall.args, [
'file1',
['file1', 'file3'],
1,
]);
});
});
</script>