-
Notifications
You must be signed in to change notification settings - Fork 0
/
selected_services.go
75 lines (65 loc) · 1.68 KB
/
selected_services.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package main
import (
table "github.com/charmbracelet/bubbles/table"
tea "github.com/charmbracelet/bubbletea"
lipgloss "github.com/charmbracelet/lipgloss"
)
var unfocusedTableStyle1 = table.Styles{
Selected: lipgloss.NewStyle(),
Header: table.DefaultStyles().Header,
Cell: table.DefaultStyles().Cell,
}
type SelectedServicesModel struct {
unselectedServices []string
table table.Model
}
func NewSelectedServices() SelectedServicesModel {
unselectedServices := SelectedServicesModel{
table: table.New(
table.WithColumns([]table.Column{{Title: "Name", Width: 20}}),
table.WithRows([]table.Row{}),
table.WithFocused(true),
table.WithHeight(7),
),
}
unselectedServices.table.SetStyles(unfocusedTableStyle)
return unselectedServices
}
func (s SelectedServicesModel) Init() tea.Cmd { return nil }
func (s SelectedServicesModel) View() string {
if s.unselectedServices == nil {
return ""
}
return s.table.View()
}
func (s *SelectedServicesModel) SetServices(services []string) {
rows := Map(services, func(service string) table.Row {
return table.Row{service}
})
s.table.SetRows(rows)
s.unselectedServices = services
}
func (f *SelectedServicesModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
switch msg.(type) {
case tea.KeyMsg:
switch msg.(tea.KeyMsg).String() {
case "h", "left":
f.table.Blur()
f.table.SetStyles(unfocusedTableStyle1)
case "l", "right":
f.table.SetStyles(table.DefaultStyles())
f.table.Focus()
case "up", "k":
if f.table.Focused() {
f.table.MoveUp(0)
}
case "down", "j":
if f.table.Focused() {
f.table.MoveDown(0)
}
}
}
var cmd tea.Cmd
f.table, cmd = f.table.Update(msg)
return f, cmd
}