package ui import ( "github.com/charmbracelet/bubbles/list" tea "github.com/charmbracelet/bubbletea" ) func newMenuList() list.Model { items := []list.Item{ simpleItem{id: "users", title: "Пользователи", desc: "Создать, заблокировать, удалить учётные записи"}, simpleItem{id: "groups", title: "Группы и хосты", desc: "Кому какие хосты разрешены для прыжка/форвардинга"}, simpleItem{id: "export", title: "Экспорт архивов", desc: "Сгенерировать ключи и .7z архивы для доставки пользователям"}, simpleItem{id: "audit", title: "Аудит / кто в сети", desc: "Активные сессии и журнал подключений"}, simpleItem{id: "quit", title: "Выход", desc: ""}, } l := list.New(items, list.NewDefaultDelegate(), 0, 0) l.Title = "ssh-access-tui" l.SetShowStatusBar(false) return l } func (m Model) updateMenu(msg tea.Msg) (tea.Model, tea.Cmd) { if key, ok := msg.(tea.KeyMsg); ok { switch key.String() { case "enter": sel, ok := m.menu.SelectedItem().(simpleItem) if !ok { return m, nil } m.err, m.status = "", "" switch sel.id { case "users": m.screen = scrUsers m.refreshUsersList() case "groups": m.screen = scrGroups m.refreshGroupsList() case "export": m.screen = scrExportSelect m.initExportSelect() case "audit": m.screen = scrAudit m.refreshAudit() case "quit": return m, tea.Quit } return m, nil case "q": return m, tea.Quit } } var cmd tea.Cmd m.menu, cmd = m.menu.Update(msg) return m, cmd } func (m Model) viewMenu() string { return borderStyle.Render(m.menu.View()) }