44 lines
998 B
Go
44 lines
998 B
Go
package attachmentspicker
|
|
|
|
import (
|
|
"github.com/ayn2op/discordo/internal/config"
|
|
"github.com/ayn2op/discordo/internal/ui"
|
|
"github.com/ayn2op/tview"
|
|
"github.com/ayn2op/tview/picker"
|
|
)
|
|
|
|
type Item struct {
|
|
Label string
|
|
Action tview.Cmd
|
|
}
|
|
|
|
type Model struct{ *picker.Model }
|
|
|
|
func NewModel(cfg *config.Config) *Model {
|
|
m := &Model{Model: picker.NewModel()}
|
|
ui.ConfigurePicker(m.Model, cfg, "Attachments")
|
|
return m
|
|
}
|
|
|
|
func (m *Model) SetItems(items []Item) {
|
|
pickerItems := make(picker.Items, len(items))
|
|
for i, item := range items {
|
|
pickerItems[i] = picker.Item{Text: item.Label, Reference: item.Action}
|
|
}
|
|
m.Model.SetItems(pickerItems)
|
|
}
|
|
|
|
func (m *Model) Update(msg tview.Msg) tview.Cmd {
|
|
switch msg := msg.(type) {
|
|
case picker.SelectedMsg:
|
|
action, ok := msg.Reference.(tview.Cmd)
|
|
if !ok {
|
|
return nil
|
|
}
|
|
return func() tview.Msg { return SelectedMsg{Action: action} }
|
|
case picker.CancelMsg:
|
|
return func() tview.Msg { return CancelMsg{} }
|
|
}
|
|
|
|
return m.Model.Update(msg)
|
|
}
|