update logs

This commit is contained in:
Kujtim Hoxha 2025-04-17 16:03:34 +02:00
parent e3a62736db
commit 05d0e86f10
4 changed files with 86 additions and 69 deletions

4
.gitignore vendored
View file

@ -41,7 +41,5 @@ Thumbs.db
.env
.env.local
.opencode
.opencode/
internal/assets/diff/index.mjs
cmd/test/*

View file

@ -22,7 +22,6 @@ type DetailComponent interface {
type detailCmp struct {
width, height int
focused bool
currentLog logging.LogMessage
viewport viewport.Model
}
@ -37,11 +36,6 @@ func (i *detailCmp) Init() tea.Cmd {
}
func (i *detailCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
var (
cmd tea.Cmd
cmds []tea.Cmd
)
switch msg := msg.(type) {
case selectedLogMsg:
if msg.ID != i.currentLog.ID {
@ -50,12 +44,7 @@ func (i *detailCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
}
}
if i.focused {
i.viewport, cmd = i.viewport.Update(msg)
cmds = append(cmds, cmd)
}
return i, tea.Batch(cmds...)
return i, nil
}
func (i *detailCmp) updateContent() {
@ -123,21 +112,7 @@ func getLevelStyle(level string) lipgloss.Style {
}
func (i *detailCmp) View() string {
return i.viewport.View()
}
func (i *detailCmp) Blur() tea.Cmd {
i.focused = false
return nil
}
func (i *detailCmp) Focus() tea.Cmd {
i.focused = true
return nil
}
func (i *detailCmp) IsFocused() bool {
return i.focused
return styles.ForceReplaceBackgroundWithLipgloss(i.viewport.View(), styles.Background)
}
func (i *detailCmp) GetSize() (int, int) {

View file

@ -33,37 +33,35 @@ func (i *tableCmp) Init() tea.Cmd {
func (i *tableCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
var cmds []tea.Cmd
if i.table.Focused() {
switch msg.(type) {
case pubsub.Event[logging.LogMessage]:
i.setRows()
return i, nil
}
prevSelectedRow := i.table.SelectedRow()
t, cmd := i.table.Update(msg)
cmds = append(cmds, cmd)
i.table = t
selectedRow := i.table.SelectedRow()
if selectedRow != nil {
if prevSelectedRow == nil || selectedRow[0] == prevSelectedRow[0] {
var log logging.LogMessage
for _, row := range logging.List() {
if row.ID == selectedRow[0] {
log = row
break
}
}
if log.ID != "" {
cmds = append(cmds, util.CmdHandler(selectedLogMsg(log)))
switch msg.(type) {
case pubsub.Event[logging.LogMessage]:
i.setRows()
return i, nil
}
prevSelectedRow := i.table.SelectedRow()
t, cmd := i.table.Update(msg)
cmds = append(cmds, cmd)
i.table = t
selectedRow := i.table.SelectedRow()
if selectedRow != nil {
if prevSelectedRow == nil || selectedRow[0] == prevSelectedRow[0] {
var log logging.LogMessage
for _, row := range logging.List() {
if row.ID == selectedRow[0] {
log = row
break
}
}
if log.ID != "" {
cmds = append(cmds, util.CmdHandler(selectedLogMsg(log)))
}
}
}
return i, tea.Batch(cmds...)
}
func (i *tableCmp) View() string {
return i.table.View()
return styles.ForceReplaceBackgroundWithLipgloss(i.table.View(), styles.Background)
}
func (i *tableCmp) GetSize() (int, int) {
@ -128,6 +126,7 @@ func NewLogsTable() TableComponent {
table.WithColumns(columns),
table.WithStyles(defaultStyles),
)
tableModel.Focus()
return &tableCmp{
table: tableModel,
}

View file

@ -1,37 +1,82 @@
package page
import (
"github.com/charmbracelet/bubbles/key"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
"github.com/kujtimiihoxha/opencode/internal/tui/components/logs"
"github.com/kujtimiihoxha/opencode/internal/tui/layout"
"github.com/kujtimiihoxha/opencode/internal/tui/styles"
)
var LogsPage PageID = "logs"
type logsPage struct {
table logs.TableComponent
details logs.DetailComponent
type LogPage interface {
tea.Model
layout.Sizeable
layout.Bindings
}
func (p *logsPage) Init() tea.Cmd {
return nil
type logsPage struct {
width, height int
table layout.Container
details layout.Container
}
func (p *logsPage) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
return p, nil
switch msg := msg.(type) {
case tea.WindowSizeMsg:
p.width = msg.Width
p.height = msg.Height
p.table.SetSize(msg.Width, msg.Height/2)
p.details.SetSize(msg.Width, msg.Height/2)
}
var cmds []tea.Cmd
table, cmd := p.table.Update(msg)
cmds = append(cmds, cmd)
p.table = table.(layout.Container)
details, cmd := p.details.Update(msg)
cmds = append(cmds, cmd)
p.details = details.(layout.Container)
return p, tea.Batch(cmds...)
}
func (p *logsPage) View() string {
return p.table.View() + "\n" + p.details.View()
style := styles.BaseStyle.Width(p.width).Height(p.height)
return style.Render(lipgloss.JoinVertical(lipgloss.Top,
p.table.View(),
p.details.View(),
))
}
func NewLogsPage() tea.Model {
return layout.NewBentoLayout(
layout.BentoPanes{
layout.BentoRightTopPane: logs.NewLogsTable(),
layout.BentoRightBottomPane: logs.NewLogsDetails(),
},
layout.WithBentoLayoutCurrentPane(layout.BentoRightTopPane),
layout.WithBentoLayoutRightTopHeightRatio(0.5),
func (p *logsPage) BindingKeys() []key.Binding {
return p.table.BindingKeys()
}
// GetSize implements LogPage.
func (p *logsPage) GetSize() (int, int) {
return p.width, p.height
}
// SetSize implements LogPage.
func (p *logsPage) SetSize(width int, height int) {
p.width = width
p.height = height
p.table.SetSize(width, height/2)
p.details.SetSize(width, height/2)
}
func (p *logsPage) Init() tea.Cmd {
return tea.Batch(
p.table.Init(),
p.details.Init(),
)
}
func NewLogsPage() LogPage {
return &logsPage{
table: layout.NewContainer(logs.NewLogsTable(), layout.WithBorderAll(), layout.WithBorderColor(styles.ForgroundDim)),
details: layout.NewContainer(logs.NewLogsDetails(), layout.WithBorderAll(), layout.WithBorderColor(styles.ForgroundDim)),
}
}