github.com/ungtb10d/cli/v2@v2.0.0-20221110210412-98537dd9d6a1/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/ungtb10d/cli/v2/api" 10 "github.com/ungtb10d/cli/v2/internal/text" 11 prShared "github.com/ungtb10d/cli/v2/pkg/cmd/pr/shared" 12 "github.com/ungtb10d/cli/v2/pkg/iostreams" 13 "github.com/ungtb10d/cli/v2/utils" 14 ) 15 16 func PrintIssues(io *iostreams.IOStreams, now time.Time, prefix string, totalCount int, issues []api.Issue) { 17 cs := io.ColorScheme() 18 //nolint:staticcheck // SA1019: utils.NewTablePrinter is deprecated: use internal/tableprinter 19 table := utils.NewTablePrinter(io) 20 for _, issue := range issues { 21 issueNum := strconv.Itoa(issue.Number) 22 if table.IsTTY() { 23 issueNum = "#" + issueNum 24 } 25 issueNum = prefix + issueNum 26 table.AddField(issueNum, nil, cs.ColorFromString(prShared.ColorForIssueState(issue))) 27 if !table.IsTTY() { 28 table.AddField(issue.State, nil, nil) 29 } 30 table.AddField(text.RemoveExcessiveWhitespace(issue.Title), nil, nil) 31 table.AddField(issueLabelList(&issue, cs, table.IsTTY()), nil, nil) 32 if table.IsTTY() { 33 table.AddField(text.FuzzyAgo(now, issue.UpdatedAt), nil, cs.Gray) 34 } else { 35 table.AddField(issue.UpdatedAt.String(), nil, nil) 36 } 37 table.EndRow() 38 } 39 _ = table.Render() 40 remaining := totalCount - len(issues) 41 if remaining > 0 { 42 fmt.Fprintf(io.Out, cs.Gray("%sAnd %d more\n"), prefix, remaining) 43 } 44 } 45 46 func issueLabelList(issue *api.Issue, cs *iostreams.ColorScheme, colorize bool) string { 47 if len(issue.Labels.Nodes) == 0 { 48 return "" 49 } 50 51 labelNames := make([]string, 0, len(issue.Labels.Nodes)) 52 for _, label := range issue.Labels.Nodes { 53 if colorize { 54 labelNames = append(labelNames, cs.HexToRGB(label.Color, label.Name)) 55 } else { 56 labelNames = append(labelNames, label.Name) 57 } 58 } 59 60 return strings.Join(labelNames, ", ") 61 }