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()) }