Merge "Update sorting for threads"
This commit is contained in:
commit
39b009a78c
polygerrit-ui/app/elements/change/gr-thread-list
@ -116,6 +116,12 @@ class GrThreadList extends GestureEventListeners(
|
|||||||
_updateSortedThreads(threads) {
|
_updateSortedThreads(threads) {
|
||||||
this._sortedThreads =
|
this._sortedThreads =
|
||||||
threads.map(this._getThreadWithSortInfo).sort((c1, c2) => {
|
threads.map(this._getThreadWithSortInfo).sort((c1, c2) => {
|
||||||
|
// threads will be sorted by:
|
||||||
|
// - unresolved first
|
||||||
|
// - with drafts
|
||||||
|
// - file path
|
||||||
|
// - line
|
||||||
|
// - updated time
|
||||||
const c1Date = c1.__date || util.parseDate(c1.updated);
|
const c1Date = c1.__date || util.parseDate(c1.updated);
|
||||||
const c2Date = c2.__date || util.parseDate(c2.updated);
|
const c2Date = c2.__date || util.parseDate(c2.updated);
|
||||||
const dateCompare = c2Date - c1Date;
|
const dateCompare = c2Date - c1Date;
|
||||||
@ -123,11 +129,28 @@ class GrThreadList extends GestureEventListeners(
|
|||||||
if (!c1.unresolved) { return 1; }
|
if (!c1.unresolved) { return 1; }
|
||||||
if (!c2.unresolved) { return -1; }
|
if (!c2.unresolved) { return -1; }
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c2.hasDraft || c1.hasDraft) {
|
if (c2.hasDraft || c1.hasDraft) {
|
||||||
if (!c1.hasDraft) { return 1; }
|
if (!c1.hasDraft) { return 1; }
|
||||||
if (!c2.hasDraft) { return -1; }
|
if (!c2.hasDraft) { return -1; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Update here once we introduce patchset level comments
|
||||||
|
// they may not have or have a special line or path attribute
|
||||||
|
|
||||||
|
if (c1.thread.path !== c2.thread.path) {
|
||||||
|
return c1.thread.path.localeCompare(c2.thread.path);
|
||||||
|
}
|
||||||
|
|
||||||
|
// File level comments (no `line` property)
|
||||||
|
// should always show before any lines
|
||||||
|
if ([c1, c2].some(c => c.thread.line === undefined)) {
|
||||||
|
if (!c1.thread.line) { return -1; }
|
||||||
|
if (!c2.thread.line) { return 1; }
|
||||||
|
} else if (c1.thread.line !== c2.thread.line) {
|
||||||
|
return c1.thread.line - c2.thread.line;
|
||||||
|
}
|
||||||
|
|
||||||
if (dateCompare === 0 && (!c1.id || !c1.id.localeCompare)) {
|
if (dateCompare === 0 && (!c1.id || !c1.id.localeCompare)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -114,7 +114,6 @@ suite('gr-thread-list tests', () => {
|
|||||||
},
|
},
|
||||||
patch_set: 2,
|
patch_set: 2,
|
||||||
id: '8caddf38_44770ec1',
|
id: '8caddf38_44770ec1',
|
||||||
line: 4,
|
|
||||||
updated: '2018-02-13 22:48:40.000000000',
|
updated: '2018-02-13 22:48:40.000000000',
|
||||||
message: 'Another unresolved comment',
|
message: 'Another unresolved comment',
|
||||||
unresolved: true,
|
unresolved: true,
|
||||||
@ -122,7 +121,6 @@ suite('gr-thread-list tests', () => {
|
|||||||
],
|
],
|
||||||
patchNum: 2,
|
patchNum: 2,
|
||||||
path: '/COMMIT_MSG',
|
path: '/COMMIT_MSG',
|
||||||
line: 4,
|
|
||||||
rootId: '8caddf38_44770ec1',
|
rootId: '8caddf38_44770ec1',
|
||||||
start_datetime: '2018-02-13 22:48:40.000000000',
|
start_datetime: '2018-02-13 22:48:40.000000000',
|
||||||
},
|
},
|
||||||
@ -205,7 +203,7 @@ suite('gr-thread-list tests', () => {
|
|||||||
},
|
},
|
||||||
patch_set: 4,
|
patch_set: 4,
|
||||||
id: 'rc2',
|
id: 'rc2',
|
||||||
line: 5,
|
line: 7,
|
||||||
updated: '2019-03-08 18:49:18.000000000',
|
updated: '2019-03-08 18:49:18.000000000',
|
||||||
message: 'test',
|
message: 'test',
|
||||||
unresolved: true,
|
unresolved: true,
|
||||||
@ -228,7 +226,7 @@ suite('gr-thread-list tests', () => {
|
|||||||
],
|
],
|
||||||
patchNum: 4,
|
patchNum: 4,
|
||||||
path: '/COMMIT_MSG',
|
path: '/COMMIT_MSG',
|
||||||
line: 5,
|
line: 7,
|
||||||
rootId: 'rc2',
|
rootId: 'rc2',
|
||||||
start_datetime: '2019-03-08 18:49:18.000000000',
|
start_datetime: '2019-03-08 18:49:18.000000000',
|
||||||
},
|
},
|
||||||
@ -259,25 +257,26 @@ suite('gr-thread-list tests', () => {
|
|||||||
|
|
||||||
test('_computeSortedThreads', () => {
|
test('_computeSortedThreads', () => {
|
||||||
assert.equal(element._sortedThreads.length, 7);
|
assert.equal(element._sortedThreads.length, 7);
|
||||||
// Draft and unresolved
|
// Draft and unresolved for commit-msg at line 5
|
||||||
assert.equal(element._sortedThreads[0].thread.rootId,
|
assert.equal(element._sortedThreads[0].thread.rootId,
|
||||||
'ecf0b9fa_fe1a5f62');
|
'ecf0b9fa_fe1a5f62');
|
||||||
// Unresolved robot comment
|
// /COMMIT_MSG
|
||||||
|
// unresolved no draft and file level
|
||||||
assert.equal(element._sortedThreads[1].thread.rootId,
|
assert.equal(element._sortedThreads[1].thread.rootId,
|
||||||
'rc2');
|
|
||||||
// Unresolved robot comment
|
|
||||||
assert.equal(element._sortedThreads[2].thread.rootId,
|
|
||||||
'rc1');
|
|
||||||
// unresolved
|
|
||||||
assert.equal(element._sortedThreads[3].thread.rootId,
|
|
||||||
'scaddf38_44770ec1');
|
|
||||||
// unresolved
|
|
||||||
assert.equal(element._sortedThreads[4].thread.rootId,
|
|
||||||
'8caddf38_44770ec1');
|
'8caddf38_44770ec1');
|
||||||
// resolved and draft
|
// unresolved no draft at line 4
|
||||||
|
assert.equal(element._sortedThreads[2].thread.rootId,
|
||||||
|
'scaddf38_44770ec1');
|
||||||
|
// unresolved no draft at line 5
|
||||||
|
assert.equal(element._sortedThreads[3].thread.rootId,
|
||||||
|
'rc1');
|
||||||
|
// Unresolved no draft at line 7
|
||||||
|
assert.equal(element._sortedThreads[4].thread.rootId,
|
||||||
|
'rc2');
|
||||||
|
// resolved and draft on COMMIT_MSG
|
||||||
assert.equal(element._sortedThreads[5].thread.rootId,
|
assert.equal(element._sortedThreads[5].thread.rootId,
|
||||||
'zcf0b9fa_fe1a5f62');
|
'zcf0b9fa_fe1a5f62');
|
||||||
// resolved
|
// resolved and on file test.txt
|
||||||
assert.equal(element._sortedThreads[6].thread.rootId,
|
assert.equal(element._sortedThreads[6].thread.rootId,
|
||||||
'09a9fb0a_1484e6cf');
|
'09a9fb0a_1484e6cf');
|
||||||
});
|
});
|
||||||
@ -298,19 +297,20 @@ suite('gr-thread-list tests', () => {
|
|||||||
assert.equal(element._sortedThreads.length, 6);
|
assert.equal(element._sortedThreads.length, 6);
|
||||||
assert.equal(element._sortedThreads[0].thread.rootId,
|
assert.equal(element._sortedThreads[0].thread.rootId,
|
||||||
'ecf0b9fa_fe1a5f62');
|
'ecf0b9fa_fe1a5f62');
|
||||||
// Unresolved robot comment
|
// /COMMIT_MSG
|
||||||
|
// unresolved no draft and file level
|
||||||
assert.equal(element._sortedThreads[1].thread.rootId,
|
assert.equal(element._sortedThreads[1].thread.rootId,
|
||||||
'rc1');
|
'8caddf38_44770ec1');
|
||||||
// unresolved
|
// unresolved no draft at line 4
|
||||||
assert.equal(element._sortedThreads[2].thread.rootId,
|
assert.equal(element._sortedThreads[2].thread.rootId,
|
||||||
'scaddf38_44770ec1');
|
'scaddf38_44770ec1');
|
||||||
// unresolved
|
// unresolved no draft at line 5
|
||||||
assert.equal(element._sortedThreads[3].thread.rootId,
|
assert.equal(element._sortedThreads[3].thread.rootId,
|
||||||
'8caddf38_44770ec1');
|
'rc1');
|
||||||
// resolved and draft
|
// resolved and draft
|
||||||
assert.equal(element._sortedThreads[4].thread.rootId,
|
assert.equal(element._sortedThreads[4].thread.rootId,
|
||||||
'zcf0b9fa_fe1a5f62');
|
'zcf0b9fa_fe1a5f62');
|
||||||
// resolved
|
// resolved and on file test.txt
|
||||||
assert.equal(element._sortedThreads[5].thread.rootId,
|
assert.equal(element._sortedThreads[5].thread.rootId,
|
||||||
'09a9fb0a_1484e6cf');
|
'09a9fb0a_1484e6cf');
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user