print issue list in cli better
This commit is contained in:
@@ -3,7 +3,9 @@ package models
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"strings"
|
||||||
"text/tabwriter"
|
"text/tabwriter"
|
||||||
|
"unicode"
|
||||||
|
|
||||||
"charm.land/lipgloss/v2"
|
"charm.land/lipgloss/v2"
|
||||||
"github.com/muesli/reflow/truncate"
|
"github.com/muesli/reflow/truncate"
|
||||||
@@ -33,11 +35,11 @@ type (
|
|||||||
|
|
||||||
// Status constants
|
// Status constants
|
||||||
const (
|
const (
|
||||||
StatusOpen = beads.StatusOpen
|
StatusOpen = beads.StatusOpen
|
||||||
StatusInProgress = beads.StatusInProgress
|
StatusInProgress = beads.StatusInProgress
|
||||||
StatusBlocked = beads.StatusBlocked
|
StatusBlocked = beads.StatusBlocked
|
||||||
StatusDeferred = beads.StatusDeferred
|
StatusDeferred = beads.StatusDeferred
|
||||||
StatusClosed = beads.StatusClosed
|
StatusClosed = beads.StatusClosed
|
||||||
StatusReadyToSprint Status = "ready_to_sprint"
|
StatusReadyToSprint Status = "ready_to_sprint"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -114,20 +116,39 @@ func IssuesPtrToIssues(issuePtr []*Issue) []Issue {
|
|||||||
return issues
|
return issues
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func sanitizeCell(s string) string {
|
||||||
|
s = strings.Map(func(r rune) rune {
|
||||||
|
switch r {
|
||||||
|
case '\n', '\r', '\t':
|
||||||
|
return ' '
|
||||||
|
default:
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
}, s)
|
||||||
|
|
||||||
|
return strings.Join(strings.FieldsFunc(s, unicode.IsSpace), " ")
|
||||||
|
}
|
||||||
|
|
||||||
func FormatIssueRow(issue Issue) string {
|
func FormatIssueRow(issue Issue) string {
|
||||||
|
id := truncate.String(sanitizeCell(issue.ID), 10)
|
||||||
|
title := truncate.StringWithTail(sanitizeCell(issue.Title), 35, "...")
|
||||||
|
description := truncate.StringWithTail(sanitizeCell(issue.Description), 40, "...")
|
||||||
|
status := sanitizeCell(string(issue.Status))
|
||||||
|
issueType := sanitizeCell(string(issue.IssueType))
|
||||||
|
|
||||||
return fmt.Sprintf(
|
return fmt.Sprintf(
|
||||||
"%s\t%s\t%s\t%s\t%s\t%d",
|
"%s\t%s\t%s\t%s\t%s\t%d",
|
||||||
truncate.String(issue.ID, 10),
|
id,
|
||||||
truncate.StringWithTail(issue.Title, 25, "..."),
|
title,
|
||||||
truncate.StringWithTail(issue.Description, 40, "..."),
|
description,
|
||||||
issue.Status,
|
status,
|
||||||
issue.IssueType,
|
issueType,
|
||||||
issue.Priority,
|
issue.Priority,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
func PrintIssues(issues []Issue) {
|
func PrintIssues(issues []Issue) {
|
||||||
w := tabwriter.NewWriter(os.Stdout, 8, 10, 5, ' ', 0)
|
w := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0)
|
||||||
|
|
||||||
fmt.Fprintln(w, "ID\tTITLE\tDESCRIPTION\tSTATUS\tTYPE\tPRIORITY")
|
fmt.Fprintln(w, "ID\tTITLE\tDESCRIPTION\tSTATUS\tTYPE\tPRIORITY")
|
||||||
|
|
||||||
@@ -135,5 +156,5 @@ func PrintIssues(issues []Issue) {
|
|||||||
fmt.Fprintln(w, FormatIssueRow(issue))
|
fmt.Fprintln(w, FormatIssueRow(issue))
|
||||||
}
|
}
|
||||||
|
|
||||||
w.Flush()
|
_ = w.Flush()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user