talos-upgrade/pkg/upgrade/selectRelease.go
2023-10-20 17:28:58 -04:00

68 lines
1.4 KiB
Go

package upgrade
import (
"git.cycore.io/scm/talos-upgrade/pkg/release"
"github.com/charmbracelet/bubbles/list"
tea "github.com/charmbracelet/bubbletea"
)
type SelectRelease struct {
Core *CoreState
list list.Model
}
func NewSelectRelease(core *CoreState) *SelectRelease {
s := &SelectRelease{
Core: core,
list: release.ToList(core.CurrentReleases, core.LowestTalosVersion, core.HighestTalosVersion),
}
s.list.Title = "Select Talos Release"
frameWidth, frameHeight := docStyle.GetFrameSize()
s.list.SetSize(s.Core.Width-frameWidth, s.Core.Height-frameHeight)
return s
}
func (s *SelectRelease) Init() tea.Cmd {
return nil
}
func (s *SelectRelease) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
switch msg := msg.(type) {
case tea.KeyMsg:
if msg.String() == "ctrl+c" {
return s, tea.Quit
}
if msg.String() == "enter" {
selectedItem := s.list.Items()[s.list.Index()]
selectedRelease := selectedItem.(*release.ListItem)
s.Core.SelectedVersion = selectedRelease.Release
s.Core.SelectedImage = selectedRelease.Image()
return NewSelectNode(s.Core), nil
}
case tea.WindowSizeMsg:
s.Core.Width = msg.Width
s.Core.Height = msg.Height
frameWidth, frameHeight := docStyle.GetFrameSize()
s.list.SetSize(msg.Width-frameWidth, msg.Height-frameHeight)
default:
}
var cmd tea.Cmd
s.list, cmd = s.list.Update(msg)
return s, cmd
}
func (s *SelectRelease) View() string {
return docStyle.Render(s.list.View())
}