Files
apex-public/internal/tui/help.go
T
2026-07-06 11:05:50 -04:00

100 lines
2.4 KiB
Go

package tui
import (
"strings"
"github.com/charmbracelet/lipgloss"
)
type helpBinding struct {
Key string
Desc string
}
func (a *App) activeTabBindings() ([]helpBinding, bool) {
switch a.activeTab {
case TabScan:
return []helpBinding{
{"s", "start scan"},
{"r", "retry errored rows"},
{"enter", "show row detail"},
{"esc", "cancel running scan / close modal"},
}, true
case TabEvaluate:
return []helpBinding{
{"r", "refresh pending"},
{"e", "evaluate pending batch"},
{"enter", "open report"},
{"esc", "cancel running eval / close modal"},
}, true
case TabTracker:
return []helpBinding{
{"r", "refresh list"},
{"a", "advance status (state machine)"},
{"n", "add note to selected app"},
{"f", "show pending follow-ups"},
}, true
case TabReports:
return []helpBinding{
{"enter", "open report file"},
{"/", "filter by company"},
{"r", "refresh list"},
}, true
case TabSettings:
return []helpBinding{
{"↑/↓", "move between fields"},
{"enter", "edit field"},
{"esc", "cancel edit"},
}, true
case TabIntake:
return []helpBinding{
{"tab", "next field"},
{"enter", "advance phase"},
}, true
}
return nil, false
}
func (a *App) renderHelp() string {
var b strings.Builder
b.WriteString(StyleTitle.Render("Help — keybindings"))
b.WriteString("\n\n")
b.WriteString(StyleSubtitle.Render("Global"))
b.WriteString("\n")
global := []helpBinding{
{"↑/↓", "switch tab (sidebar)"},
{"j/k", "move cursor in table"},
{"enter", "select / drill in"},
{"tab/shift+tab", "switch tab"},
{"?", "toggle help"},
{"q / ctrl+c", "quit"},
}
for _, kb := range global {
b.WriteString(" ")
b.WriteString(StyleKey.Render(padRight(kb.Key, 14)))
b.WriteString(StyleKeyDesc.Render(kb.Desc))
b.WriteString("\n")
}
if tab, ok := a.activeTabBindings(); ok {
b.WriteString("\n")
b.WriteString(StyleSubtitle.Render(a.activeTab))
b.WriteString("\n")
for _, kb := range tab {
b.WriteString(" ")
b.WriteString(StyleKey.Render(padRight(kb.Key, 14)))
b.WriteString(StyleKeyDesc.Render(kb.Desc))
b.WriteString("\n")
}
}
b.WriteString("\n")
b.WriteString(StyleKeyDesc.Render("press ? or esc to close"))
return lipgloss.NewStyle().Width(52).Render(StyleModal.Render(b.String()))
}
func padRight(s string, n int) string {
if len(s) >= n {
return s
}
return s + strings.Repeat(" ", n-len(s))
}