improving issue details view
This commit is contained in:
95
pkg/tui/views/dashboard/issue_detail.go
Normal file
95
pkg/tui/views/dashboard/issue_detail.go
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
package dashboard
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/LazyBachelor/LazyPM/internal/models"
|
||||||
|
"github.com/LazyBachelor/LazyPM/pkg/tui/styles"
|
||||||
|
"github.com/charmbracelet/bubbles/viewport"
|
||||||
|
"github.com/charmbracelet/lipgloss"
|
||||||
|
)
|
||||||
|
|
||||||
|
type IssueDetail struct {
|
||||||
|
viewport viewport.Model
|
||||||
|
issue models.Issue
|
||||||
|
focused bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewIssueDetail() IssueDetail {
|
||||||
|
vp := viewport.New(0, 0)
|
||||||
|
return IssueDetail{
|
||||||
|
viewport: vp,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *IssueDetail) SetIssue(issue models.Issue) {
|
||||||
|
i.issue = issue
|
||||||
|
i.refreshContent()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *IssueDetail) SetSize(width, height int) {
|
||||||
|
i.viewport.Height = height
|
||||||
|
i.viewport.Width = width
|
||||||
|
i.refreshContent()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *IssueDetail) SetFocused(focused bool) {
|
||||||
|
i.focused = focused
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *IssueDetail) refreshContent() {
|
||||||
|
|
||||||
|
titleRow := styles.RowStyle.Render(
|
||||||
|
styles.TitleStyle.Render(i.issue.Title),
|
||||||
|
)
|
||||||
|
|
||||||
|
idRow := styles.RowStyle.Render(
|
||||||
|
styles.LabelStyle.Render("ID:") + styles.ValueStyle.Render(i.issue.ID),
|
||||||
|
)
|
||||||
|
|
||||||
|
typeRow := styles.RowStyle.Render(
|
||||||
|
styles.LabelStyle.Render("Type:") + styles.ValueStyle.Render(string(i.issue.IssueType)),
|
||||||
|
)
|
||||||
|
|
||||||
|
statusRow := styles.RowStyle.Render(
|
||||||
|
styles.LabelStyle.Render("Status:") + styles.StatusStyle(string(i.issue.Status)).Render(string(i.issue.Status)),
|
||||||
|
)
|
||||||
|
|
||||||
|
descLabel := styles.LabelStyle.Render("Description:")
|
||||||
|
descContent := styles.ValueStyle.Render(i.issue.Description)
|
||||||
|
|
||||||
|
content := lipgloss.JoinVertical(lipgloss.Left,
|
||||||
|
titleRow,
|
||||||
|
idRow,
|
||||||
|
typeRow,
|
||||||
|
statusRow,
|
||||||
|
descLabel,
|
||||||
|
descContent,
|
||||||
|
)
|
||||||
|
|
||||||
|
i.viewport.SetContent(content)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i IssueDetail) View() string {
|
||||||
|
content := i.viewport.View()
|
||||||
|
|
||||||
|
if i.focused {
|
||||||
|
return styles.DetailsContainerStyle.
|
||||||
|
BorderForeground(styles.PrimaryBorder).
|
||||||
|
Width(i.viewport.Width).
|
||||||
|
Height(i.viewport.Height).
|
||||||
|
MaxHeight(i.viewport.Height).
|
||||||
|
Render(content)
|
||||||
|
}
|
||||||
|
return styles.DetailsContainerStyle.
|
||||||
|
Width(i.viewport.Width).
|
||||||
|
Height(i.viewport.Height).
|
||||||
|
MaxHeight(i.viewport.Height).
|
||||||
|
Render(content)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *IssueDetail) ScrollUp(lines int) {
|
||||||
|
i.viewport.ScrollUp(lines)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *IssueDetail) ScrollDown(lines int) {
|
||||||
|
i.viewport.ScrollDown(lines)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user