github.com/andrewhsu/cli/v2@v2.0.1-0.20210910131313-d4b4061f5b89/pkg/cmd/issue/shared/display.go (about)

     1  package shared
     2  
     3  import (
     4  	"fmt"
     5  	"strconv"
     6  	"strings"
     7  	"time"
     8  
     9  	"github.com/andrewhsu/cli/v2/api"
    10  	prShared "github.com/andrewhsu/cli/v2/pkg/cmd/pr/shared"
    11  	"github.com/andrewhsu/cli/v2/pkg/iostreams"
    12  	"github.com/andrewhsu/cli/v2/pkg/text"
    13  	"github.com/andrewhsu/cli/v2/utils"
    14  )
    15  
    16  func PrintIssues(io *iostreams.IOStreams, prefix string, totalCount int, issues []api.Issue) {
    17  	cs := io.ColorScheme()
    18  	table := utils.NewTablePrinter(io)
    19  	for _, issue := range issues {
    20  		issueNum := strconv.Itoa(issue.Number)
    21  		if table.IsTTY() {
    22  			issueNum = "#" + issueNum
    23  		}
    24  		issueNum = prefix + issueNum
    25  		now := time.Now()
    26  		ago := now.Sub(issue.UpdatedAt)
    27  		table.AddField(issueNum, nil, cs.ColorFromString(prShared.ColorForState(issue.State)))
    28  		if !table.IsTTY() {
    29  			table.AddField(issue.State, nil, nil)
    30  		}
    31  		table.AddField(text.ReplaceExcessiveWhitespace(issue.Title), nil, nil)
    32  		table.AddField(issueLabelList(&issue, cs, table.IsTTY()), nil, nil)
    33  		if table.IsTTY() {
    34  			table.AddField(utils.FuzzyAgo(ago), nil, cs.Gray)
    35  		} else {
    36  			table.AddField(issue.UpdatedAt.String(), nil, nil)
    37  		}
    38  		table.EndRow()
    39  	}
    40  	_ = table.Render()
    41  	remaining := totalCount - len(issues)
    42  	if remaining > 0 {
    43  		fmt.Fprintf(io.Out, cs.Gray("%sAnd %d more\n"), prefix, remaining)
    44  	}
    45  }
    46  
    47  func issueLabelList(issue *api.Issue, cs *iostreams.ColorScheme, colorize bool) string {
    48  	if len(issue.Labels.Nodes) == 0 {
    49  		return ""
    50  	}
    51  
    52  	labelNames := make([]string, 0, len(issue.Labels.Nodes))
    53  	for _, label := range issue.Labels.Nodes {
    54  		if colorize {
    55  			labelNames = append(labelNames, cs.HexToRGB(label.Color, label.Name))
    56  		} else {
    57  			labelNames = append(labelNames, label.Name)
    58  		}
    59  	}
    60  
    61  	return strings.Join(labelNames, ", ")
    62  }