/
new_page.go
85 lines (70 loc) · 1.95 KB
/
new_page.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
76
77
78
79
80
81
82
83
84
85
package main
import (
tea "github.com/charmbracelet/bubbletea"
lipgloss "github.com/charmbracelet/lipgloss"
)
// MODEL DATA
type simplePage struct {
header headerModel
footer footerModel
unselectedServices UnselectedServicesModel
selectedServices SelectedServicesModel
config Config
applications Applications
}
var pageStyle = lipgloss.NewStyle().Margin(1)
var mainStyle = lipgloss.NewStyle().
Border(lipgloss.RoundedBorder()).BorderForeground(lipgloss.Color("#FFFFFF0F"))
var headerStyle = lipgloss.NewStyle().
Bold(true).Foreground(lipgloss.Color("#5900ff"))
var footerStyle = lipgloss.NewStyle()
var blockText = lipgloss.NewStyle()
func NewSimplePage() simplePage {
config, _ := LoadConfig()
aplications, err := GetServices()
if err != nil {
panic(err)
}
s := simplePage{
header: NewheaderModel(),
unselectedServices: NewUnselectedServices(),
selectedServices: NewSelectedServices(),
footer: NewFooter(),
config: config,
}
services := Map(aplications.Application, func(app Aplication) string {
return app.Name
})
s.unselectedServices.SetServices(services)
s.selectedServices.SetServices(services)
return s
}
func (s simplePage) Init() tea.Cmd { return nil }
// VIEW
func (s simplePage) View() string {
return s.header.View() + "\n" + s.unselectedServices.View() + s.selectedServices.View() + "\n" + s.footer.View()
}
// UPDATE
func (s simplePage) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
switch msg.(type) {
case tea.WindowSizeMsg:
case tea.KeyMsg:
switch msg.(tea.KeyMsg).String() {
case "ctrl+c":
case "q":
return s, tea.Quit
}
}
var cmds []tea.Cmd
_, cmd1 := s.unselectedServices.Update(msg)
_, cmd2 := s.selectedServices.Update(msg)
cmds = append(cmds, cmd1, cmd2)
return s, tea.Batch(cmds...)
}
func Map[T, V any](ts []T, fn func(T) V) []V {
result := make([]V, len(ts))
for i, t := range ts {
result[i] = fn(t)
}
return result
}