feat(tui): upgrade users tab with lipgloss table, edit support, role select

Users tab now matches sites/alerts quality: lipgloss bordered table,
click-to-select zones, edit form with role picker, and UpdateUser
support across both store backends.
This commit is contained in:
2026-05-14 11:45:59 -04:00
parent c24bb7a0d4
commit b7592ee9e5
5 changed files with 210 additions and 49 deletions
+20
View File
@@ -218,6 +218,10 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
m.editID = m.alerts[m.cursor].ID
m.state = stateFormAlert
return m, m.initAlertHuhForm()
} else if m.currentTab == 3 && m.isAdmin && len(m.users) > 0 {
m.editID = m.users[m.cursor].ID
m.state = stateFormUser
return m, m.initUserHuhForm()
}
case "d", "backspace":
if m.currentTab == 1 && len(m.alerts) > 0 {
@@ -264,6 +268,19 @@ func (m *Model) handleClick(msg tea.MouseMsg) (tea.Model, tea.Cmd) {
}
}
if m.currentTab == 3 {
end := m.tableOffset + m.maxTableRows
if end > len(m.users) {
end = len(m.users)
}
for i := m.tableOffset; i < end; i++ {
if m.zones.Get(fmt.Sprintf("user-%d", i)).InBounds(msg) {
m.cursor = i
return m, nil
}
}
}
return m, nil
}
@@ -366,6 +383,9 @@ func (m Model) View() string {
}
case stateFormUser:
title = "Add User"
if m.editID > 0 {
title = fmt.Sprintf("Edit User #%d", m.editID)
}
}
header := titleStyle.Render(title)
footer := subtleStyle.Render("\n[Esc] Cancel")