Merge "Submit Requirements - Sort reviewers in hovercard same as reviewer-list"
diff --git a/polygerrit-ui/app/elements/change/gr-reviewer-list/gr-reviewer-list.ts b/polygerrit-ui/app/elements/change/gr-reviewer-list/gr-reviewer-list.ts
index e3edb5e..de11b16 100644
--- a/polygerrit-ui/app/elements/change/gr-reviewer-list/gr-reviewer-list.ts
+++ b/polygerrit-ui/app/elements/change/gr-reviewer-list/gr-reviewer-list.ts
@@ -21,8 +21,6 @@
import {dom, EventApi} from '@polymer/polymer/lib/legacy/polymer.dom';
import {PolymerElement} from '@polymer/polymer/polymer-element';
import {htmlTemplate} from './gr-reviewer-list_html';
-import {isSelf, isServiceUser} from '../../../utils/account-util';
-import {hasAttention} from '../../../utils/attention-set-util';
import {customElement, property, computed, observe} from '@polymer/decorators';
import {
ChangeInfo,
@@ -44,6 +42,7 @@
import {appContext} from '../../../services/app-context';
import {fireAlert} from '../../../utils/event-util';
import {getApprovalInfo, getCodeReviewLabel} from '../../../utils/label-util';
+import {sortReviewers} from '../../../utils/attention-set-util';
@customElement('gr-reviewer-list')
export class GrReviewerList extends PolymerElement {
@@ -237,22 +236,7 @@
}
this._reviewers = result
.filter(reviewer => reviewer._account_id !== owner._account_id)
- // Sort order:
- // 1. The user themselves
- // 2. Human users in the attention set.
- // 3. Other human users.
- // 4. Service users.
- .sort((r1, r2) => {
- if (this.account) {
- if (isSelf(r1, this.account)) return -1;
- if (isSelf(r2, this.account)) return 1;
- }
- const a1 = hasAttention(r1, this.change!) ? 1 : 0;
- const a2 = hasAttention(r2, this.change!) ? 1 : 0;
- const s1 = isServiceUser(r1) ? -2 : 0;
- const s2 = isServiceUser(r2) ? -2 : 0;
- return a2 - a1 + s2 - s1;
- });
+ .sort((r1, r2) => sortReviewers(r1, r2, this.change, this.account));
if (this._reviewers.length > 8) {
this._displayedReviewers = this._reviewers.slice(0, 6);
diff --git a/polygerrit-ui/app/elements/shared/gr-label-info/gr-label-info.ts b/polygerrit-ui/app/elements/shared/gr-label-info/gr-label-info.ts
index 936daed..bdae6f7 100644
--- a/polygerrit-ui/app/elements/shared/gr-label-info/gr-label-info.ts
+++ b/polygerrit-ui/app/elements/shared/gr-label-info/gr-label-info.ts
@@ -54,6 +54,7 @@
import {ifDefined} from 'lit/directives/if-defined';
import {fireReload} from '../../../utils/event-util';
import {KnownExperimentId} from '../../../services/flags/flags';
+import {sortReviewers} from '../../../utils/attention-set-util';
declare global {
interface HTMLElementTagNameMap {
@@ -214,11 +215,13 @@
private renderNewSubmitRequirements() {
const labelInfo = this.labelInfo;
if (!labelInfo) return;
- const reviewers = (this.change?.reviewers['REVIEWER'] ?? []).filter(
- reviewer =>
- (this.showAllReviewers && canVote(labelInfo, reviewer)) ||
- (!this.showAllReviewers && hasVoted(labelInfo, reviewer))
- );
+ const reviewers = (this.change?.reviewers['REVIEWER'] ?? [])
+ .filter(
+ reviewer =>
+ (this.showAllReviewers && canVote(labelInfo, reviewer)) ||
+ (!this.showAllReviewers && hasVoted(labelInfo, reviewer))
+ )
+ .sort((r1, r2) => sortReviewers(r1, r2, this.change, this.account));
return html`<div>
${reviewers.map(reviewer => this.renderReviewerVote(reviewer))}
</div>`;
diff --git a/polygerrit-ui/app/utils/attention-set-util.ts b/polygerrit-ui/app/utils/attention-set-util.ts
index dcd2863..b0b7ef8 100644
--- a/polygerrit-ui/app/utils/attention-set-util.ts
+++ b/polygerrit-ui/app/utils/attention-set-util.ts
@@ -19,6 +19,7 @@
import {ParsedChangeInfo} from '../types/types';
import {
getAccountTemplate,
+ isSelf,
isServiceUser,
replaceTemplates,
} from './account-util';
@@ -92,3 +93,27 @@
const entry = change!.attention_set![account!._account_id!];
return entry?.last_update ? entry.last_update : '';
}
+
+/**
+ * Sort order:
+ * 1. The user themselves
+ * 2. Human users in the attention set.
+ * 3. Other human users.
+ * 4. Service users.
+ */
+export function sortReviewers(
+ r1: AccountInfo,
+ r2: AccountInfo,
+ change?: ChangeInfo | ParsedChangeInfo,
+ selfAccount?: AccountInfo
+) {
+ if (selfAccount) {
+ if (isSelf(r1, selfAccount)) return -1;
+ if (isSelf(r2, selfAccount)) return 1;
+ }
+ const a1 = hasAttention(r1, change) ? 1 : 0;
+ const a2 = hasAttention(r2, change) ? 1 : 0;
+ const s1 = isServiceUser(r1) ? -2 : 0;
+ const s2 = isServiceUser(r2) ? -2 : 0;
+ return a2 - a1 + s2 - s1;
+}