termtap/internal/tui/model.go
Hayden Hargreaves 4c4a3f6bb0 feat: working on the split engine, lots of progress.
Need colors and a real display.
2026-04-14 23:28:39 -07:00

63 lines
1.0 KiB
Go

package tui
import (
"fmt"
tea "github.com/charmbracelet/bubbletea"
"termtap.dev/internal/model"
)
// TODO: How big can we actually make this?
const (
maxEvents = 256
maxRequests = 256
)
type Model struct {
channel <-chan model.Event
events []model.Event
requests []model.Request
width int
height int
showEvents bool
showStd bool
showSearch bool
}
func NewModel(ch <-chan model.Event) Model {
return Model{
channel: ch,
events: make([]model.Event, 0, maxEvents),
requests: make([]model.Request, 0, maxRequests),
width: 0,
height: 0,
showEvents: false,
showStd: false,
showSearch: false,
}
}
func Run(ch <-chan model.Event) error {
p := tea.NewProgram(NewModel(ch), tea.WithAltScreen())
_, err := p.Run()
return err
}
func (m Model) Init() tea.Cmd {
return waitForEvent(m.channel)
}
func waitForEvent(ch <-chan model.Event) tea.Cmd {
return func() tea.Msg {
msg, ok := <-ch
if !ok {
return ErrMsg{err: fmt.Errorf("event channel closed")}
}
return EventMsg{value: msg}
}
}