Merge "Fix voting on submit requirement hovercard"
diff --git a/polygerrit-ui/app/elements/change/gr-submit-requirement-hovercard/gr-submit-requirement-hovercard.ts b/polygerrit-ui/app/elements/change/gr-submit-requirement-hovercard/gr-submit-requirement-hovercard.ts
index 66ad38c..2766114 100644
--- a/polygerrit-ui/app/elements/change/gr-submit-requirement-hovercard/gr-submit-requirement-hovercard.ts
+++ b/polygerrit-ui/app/elements/change/gr-submit-requirement-hovercard/gr-submit-requirement-hovercard.ts
@@ -10,13 +10,12 @@
import {
AccountInfo,
ChangeStatus,
- isDetailedLabelInfo,
SubmitRequirementExpressionInfo,
SubmitRequirementResultInfo,
SubmitRequirementStatus,
} from '../../../api/rest-api';
import {
- canVote,
+ canReviewerVote,
extractAssociatedLabels,
getApprovalInfo,
hasVotes,
@@ -204,7 +203,7 @@
if (requirementLabels.includes(label)) {
const labelInfo = allLabels[label];
const canSomeoneVote = (this.change?.reviewers['REVIEWER'] ?? []).some(
- reviewer => canVote(labelInfo, reviewer)
+ reviewer => canReviewerVote(labelInfo, reviewer)
);
if (hasVotes(labelInfo) || canSomeoneVote) {
labels.push(label);
@@ -280,15 +279,17 @@
labelName: string,
type: 'override' | 'submittability'
) {
+ if (!this.account) return;
+ const votes = this.change?.permitted_labels?.[labelName];
+ if (!votes || votes.length < 1) return;
+ const maxVote = Number(votes[votes.length - 1]);
+ if (maxVote <= 0) return;
+
const labels = this.change?.labels ?? {};
const labelInfo = labels[labelName];
- if (!labelInfo || !isDetailedLabelInfo(labelInfo)) return;
- if (!this.account || !canVote(labelInfo, this.account)) return;
-
const approvalInfo = getApprovalInfo(labelInfo, this.account);
- const maxVote = approvalInfo?.permitted_voting_range?.max;
- if (!maxVote || maxVote <= 0) return;
if (approvalInfo?.value === maxVote) return; // Already voted maxVote
+
return html` <div class="button quickApprove">
<gr-button
link=""
diff --git a/polygerrit-ui/app/elements/change/gr-submit-requirement-hovercard/gr-submit-requirement-hovercard_test.ts b/polygerrit-ui/app/elements/change/gr-submit-requirement-hovercard/gr-submit-requirement-hovercard_test.ts
index 4e78e8a..18f8e4c 100644
--- a/polygerrit-ui/app/elements/change/gr-submit-requirement-hovercard/gr-submit-requirement-hovercard_test.ts
+++ b/polygerrit-ui/app/elements/change/gr-submit-requirement-hovercard/gr-submit-requirement-hovercard_test.ts
@@ -253,6 +253,9 @@
const change: ParsedChangeInfo = {
...createParsedChange(),
status: ChangeStatus.NEW,
+ permitted_labels: {
+ Verified: ['-1', ' 0', '+1', '+2'],
+ },
labels: {
Verified: {
...createDetailedLabelInfo(),
@@ -351,6 +354,9 @@
const change: ParsedChangeInfo = {
...createParsedChange(),
status: ChangeStatus.NEW,
+ permitted_labels: {
+ 'Build-Cop': ['-1', ' 0', '+1', '+2'],
+ },
labels: {
'Build-Cop': {
...createDetailedLabelInfo(),
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 47d722d..02f830d 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
@@ -22,7 +22,7 @@
import {customElement, property} from 'lit/decorators.js';
import {GrButton} from '../gr-button/gr-button';
import {
- canVote,
+ canReviewerVote,
getApprovalInfo,
hasNeutralStatus,
hasVoted,
@@ -143,7 +143,7 @@
.filter(reviewer => {
if (this.showAllReviewers) {
if (isDetailedLabelInfo(labelInfo)) {
- return canVote(labelInfo, reviewer);
+ return canReviewerVote(labelInfo, reviewer);
} else {
// isQuickLabelInfo
return hasVoted(labelInfo, reviewer);
diff --git a/polygerrit-ui/app/utils/label-util.ts b/polygerrit-ui/app/utils/label-util.ts
index aaa35a4..8929e9c 100644
--- a/polygerrit-ui/app/utils/label-util.ts
+++ b/polygerrit-ui/app/utils/label-util.ts
@@ -153,7 +153,14 @@
return false;
}
-export function canVote(label: DetailedLabelInfo, account: AccountInfo) {
+// This method is checking labels.all from change detail,
+// that shows only permitted voting for reviewers or CC.
+// It doesn't have permitted votes for owner. You
+// can see permitted labels for logged in user in change.permitted_labels
+export function canReviewerVote(
+ label: DetailedLabelInfo,
+ account: AccountInfo
+) {
const approvalInfo = getApprovalInfo(label, account);
if (!approvalInfo) return false;
if (approvalInfo.permitted_voting_range) {