dynamo-browse/internal/slog-view/ui/fullviewlinedetails/model.go

68 lines
1.4 KiB
Go
Raw Normal View History

2022-03-30 04:07:49 +00:00
package fullviewlinedetails
import (
tea "github.com/charmbracelet/bubbletea"
2022-07-28 11:36:16 +00:00
"github.com/lmika/audax/internal/dynamo-browse/ui/teamodels/frame"
"github.com/lmika/audax/internal/dynamo-browse/ui/teamodels/layout"
"github.com/lmika/audax/internal/slog-view/models"
"github.com/lmika/audax/internal/slog-view/ui/linedetails"
2022-03-30 04:07:49 +00:00
)
type Model struct {
2022-05-18 23:55:15 +00:00
submodel tea.Model
2022-03-30 04:07:49 +00:00
lineDetails *linedetails.Model
visible bool
}
2022-06-27 06:05:59 +00:00
func NewModel(submodel tea.Model, style frame.Style) *Model {
2022-03-30 04:07:49 +00:00
return &Model{
2022-05-18 23:55:15 +00:00
submodel: submodel,
2022-06-27 06:05:59 +00:00
lineDetails: linedetails.New(style),
2022-03-30 04:07:49 +00:00
}
}
func (*Model) Init() tea.Cmd {
return nil
}
func (m *Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
switch msg := msg.(type) {
case tea.KeyMsg:
switch msg.String() {
case "esc":
m.visible = false
return m, nil
}
if m.visible {
newModel, cmd := m.lineDetails.Update(msg)
m.lineDetails = newModel.(*linedetails.Model)
return m, cmd
}
}
var cmd tea.Cmd
m.submodel, cmd = m.submodel.Update(msg)
return m, cmd
}
func (m *Model) ViewItem(item *models.LogLine) {
m.visible = true
m.lineDetails.SetSelectedItem(item)
2022-05-18 23:55:15 +00:00
m.lineDetails.SetFocused(true)
2022-03-30 04:07:49 +00:00
}
func (m *Model) View() string {
if m.visible {
return m.lineDetails.View()
}
return m.submodel.View()
}
func (m *Model) Resize(w, h int) layout.ResizingModel {
m.submodel = layout.Resize(m.submodel, w, h)
m.lineDetails = layout.Resize(m.lineDetails, w, h).(*linedetails.Model)
return m
}