68 lines
1.4 KiB
Go
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())
|
|
}
|