1package selector
 2
 3import (
 4	"github.com/charmbracelet/bubbles/list"
 5	tea "github.com/charmbracelet/bubbletea"
 6	"github.com/charmbracelet/soft-serve/ui/common"
 7)
 8
 9type Selector struct {
10	list   list.Model
11	common *common.Common
12}
13
14func New(common *common.Common, items []list.Item) *Selector {
15	l := list.New(items, ItemDelegate{common.Styles}, common.Width, common.Height)
16	l.SetShowTitle(false)
17	l.SetShowHelp(false)
18	l.SetShowStatusBar(false)
19	l.DisableQuitKeybindings()
20	s := &Selector{
21		list:   l,
22		common: common,
23	}
24	return s
25}
26
27func (s *Selector) SetSize(width, height int) {
28	s.list.SetSize(width, height)
29}
30
31func (s *Selector) SetItems(items []list.Item) tea.Cmd {
32	return s.list.SetItems(items)
33}
34
35func (s *Selector) Init() tea.Cmd {
36	return nil
37}
38
39func (s *Selector) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
40	cmds := make([]tea.Cmd, 0)
41	switch msg := msg.(type) {
42	default:
43		m, cmd := s.list.Update(msg)
44		s.list = m
45		if cmd != nil {
46			cmds = append(cmds, cmd)
47		}
48	}
49	return s, tea.Batch(cmds...)
50}
51
52func (s *Selector) View() string {
53	return s.list.View()
54}