5720fabdbc
Log sidebar was rendering all lines regardless of table height. When detail panel was open and table shrank, the sidebar stayed tall, pushing the detail panel past MaxHeight (clipped to empty). Now sidebar accepts a maxLines parameter capped to table row count.
79 lines
1.7 KiB
Go
79 lines
1.7 KiB
Go
package tui
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/charmbracelet/lipgloss"
|
|
)
|
|
|
|
func (m Model) renderCompactLogLine(line string, maxW int) string {
|
|
sev := classifyLog(line)
|
|
|
|
var tag string
|
|
switch sev {
|
|
case severityDown:
|
|
tag = m.st.dangerStyle.Render("▼")
|
|
case severityUp:
|
|
tag = m.st.specialStyle.Render("▲")
|
|
case severityWarn:
|
|
tag = m.st.warnStyle.Render("◆")
|
|
case severitySystem:
|
|
tag = m.st.titleStyle.Render("●")
|
|
default:
|
|
tag = m.st.subtleStyle.Render("·")
|
|
}
|
|
|
|
ts := ""
|
|
msg := line
|
|
if len(line) > 10 && line[0] == '[' {
|
|
if idx := strings.Index(line, "]"); idx > 0 && idx < 12 {
|
|
ts = line[1:idx]
|
|
msg = strings.TrimSpace(line[idx+1:])
|
|
}
|
|
}
|
|
|
|
msg = strings.TrimPrefix(msg, "Monitor ")
|
|
msg = strings.TrimPrefix(msg, "Push ")
|
|
|
|
// prefix: " HH:MM ● " = 9 visible chars, or " ● " = 3 without timestamp
|
|
prefixW := 3
|
|
if ts != "" {
|
|
prefixW = len(ts) + 4
|
|
}
|
|
msgW := maxW - prefixW
|
|
if msgW < 5 {
|
|
msgW = 5
|
|
}
|
|
msg = limitStr(msg, msgW)
|
|
|
|
if ts != "" {
|
|
return " " + m.st.subtleStyle.Render(ts) + " " + tag + " " + msg
|
|
}
|
|
return " " + tag + " " + msg
|
|
}
|
|
|
|
func (m Model) viewLogsSidebar(width, maxLines int) string {
|
|
logs := m.engine.GetLogs()
|
|
if len(logs) == 0 {
|
|
return m.st.subtleStyle.Render(" No logs yet")
|
|
}
|
|
|
|
sidebarStyle := lipgloss.NewStyle().Width(width).MaxWidth(width)
|
|
|
|
var lines []string
|
|
for _, line := range logs {
|
|
if strings.TrimSpace(line) == "" {
|
|
continue
|
|
}
|
|
if m.logFilterImportant && !isImportantLog(classifyLog(line)) {
|
|
continue
|
|
}
|
|
lines = append(lines, m.renderCompactLogLine(line, width))
|
|
if maxLines > 0 && len(lines) >= maxLines {
|
|
break
|
|
}
|
|
}
|
|
|
|
return "\n" + sidebarStyle.Render(strings.Join(lines, "\n"))
|
|
}
|