68 lines
1.3 KiB
Go
68 lines
1.3 KiB
Go
package issue
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/charmbracelet/bubbles/viewport"
|
|
tea "github.com/charmbracelet/bubbletea"
|
|
)
|
|
|
|
type Model struct {
|
|
Viewport viewport.Model
|
|
ID string
|
|
Title string
|
|
Description string
|
|
Status string
|
|
IssueType string
|
|
Width, Height int
|
|
ready bool
|
|
}
|
|
|
|
func NewIssueView(issue Model) Model {
|
|
return Model{
|
|
ID: issue.ID,
|
|
Title: issue.Title,
|
|
Description: issue.Description,
|
|
Status: issue.Status,
|
|
IssueType: issue.IssueType,
|
|
Width: issue.Width,
|
|
Height: issue.Height,
|
|
Viewport: viewport.New(issue.Width, issue.Height),
|
|
ready: false,
|
|
}
|
|
}
|
|
|
|
func (m *Model) SetSize(width, height int) {
|
|
m.Width = width
|
|
m.Height = height
|
|
}
|
|
|
|
func (m Model) Init() tea.Cmd {
|
|
return nil
|
|
}
|
|
|
|
func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|
switch msg := msg.(type) {
|
|
|
|
case tea.WindowSizeMsg:
|
|
m.SetSize(msg.Width, msg.Height)
|
|
m.Viewport.Width = m.Width
|
|
m.Viewport.Height = m.Height
|
|
m.ready = true
|
|
}
|
|
|
|
if !m.ready {
|
|
return m, nil
|
|
}
|
|
|
|
content := fmt.Sprintf("ID: %s\nTitle: %s\nDescription: %s\nStatus: %s\nType: %s",
|
|
m.ID, m.Title, m.Description, m.Status, m.IssueType)
|
|
|
|
m.Viewport.SetContent(content)
|
|
return m, nil
|
|
}
|
|
|
|
func (m Model) View() string {
|
|
return fmt.Sprintf("%s", m.Viewport.View())
|
|
}
|