in backlogs-panel/src/workdetailsdata.ts [109:196]
private static _computePullRequestState(pr: VCContracts.GitPullRequest): { state: string, iconClass: string, stateClass: string } {
if (pr.status === VCContracts.PullRequestStatus.Completed) {
return {
state: "Completed",
iconClass: "bowtie-icon bowtie-status-success",
stateClass: "vc-pullrequest-rollupstatus-success-text"
};
}
else if (pr.status === VCContracts.PullRequestStatus.Abandoned) {
return {
state: "Abandoned",
iconClass: null,
stateClass: null
};
}
else {
//not completed or abandoned so active. First check for merge conflicts
if (pr.mergeStatus === VCContracts.PullRequestAsyncStatus.Conflicts) {
return {
state: "Merge Conflicts",
iconClass: "bowtie-icon bowtie-status-failure",
stateClass: "vc-pullrequest-rollupstatus-failure-text"
};
}
//active and no merge conflicts so get the minimum vote
var minVote: number = 0;
if (pr.reviewers != null && pr.reviewers.length > 0) {
minVote = pr.reviewers[0].vote;
let allRequiredApproved = true;
for (var j = 1; j < pr.reviewers.length; ++j) {
if (pr.reviewers[j].isRequired && pr.reviewers[j].vote <= 0) {
allRequiredApproved = false;
}
if (pr.reviewers[j].vote === 0) {
continue;
}
if (pr.reviewers[j].vote < minVote) {
minVote = pr.reviewers[j].vote;
}
}
if (minVote >= 0 && !allRequiredApproved) {
minVote = 0;
}
}
if (minVote === PullRequestVoteStatus.REJECT) {
return {
state: "Rejected",
iconClass: "bowtie-icon bowtie-status-failure",
stateClass: "vc-pullrequest-rollupstatus-failure-text"
};
}
else if (minVote === PullRequestVoteStatus.NOT_READY) {
return {
state: "Waiting for author",
iconClass: "bowtie-icon bowtie-status-waiting-fill vc-pullrequest-rollupstatus-waiting",
stateClass: "vc-pullrequest-rollupstatus-info-text"
};
}
else if (minVote === PullRequestVoteStatus.APPROVE_WITH_COMMENT) {
return {
state: "Approved with comments",
iconClass: "bowtie-icon bowtie-status-success",
stateClass: "vc-pullrequest-rollupstatus-success-text"
};
}
else if (minVote === PullRequestVoteStatus.APPROVE) {
return {
state: "Approved",
iconClass: "bowtie-icon bowtie-status-success",
stateClass: "vc-pullrequest-rollupstatus-success-text"
};
}
// Default to 'Active'
return {
state: "Active",
iconClass: null,
stateClass: "vc-pullrequest-rollupstatus-info-text"
};
}
}