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 }