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  }