private static _computePullRequestState()

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"
            };
        }
    }