initial public release
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
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))
|
||||
}
|
||||
Reference in New Issue
Block a user