Change summary
internal/ui/dialog/messages.go | 7 +++++++
internal/ui/dialog/models.go | 15 +++++++++++++--
internal/ui/model/ui.go | 7 +++++++
3 files changed, 27 insertions(+), 2 deletions(-)
Detailed changes
@@ -2,6 +2,7 @@ package dialog
import (
tea "charm.land/bubbletea/v2"
+ "github.com/charmbracelet/catwalk/pkg/catwalk"
"github.com/charmbracelet/crush/internal/session"
)
@@ -16,6 +17,12 @@ type SessionSelectedMsg struct {
Session session.Session
}
+// ModelSelectedMsg is a message indicating a model has been selected.
+type ModelSelectedMsg struct {
+ Provider catwalk.Provider
+ Model catwalk.Model
+}
+
// Messages for commands
type (
SwitchSessionsMsg struct{}
@@ -169,8 +169,19 @@ func (m *Models) Update(msg tea.Msg) tea.Msg {
m.list.SelectNext()
m.list.ScrollToSelected()
case key.Matches(msg, m.keyMap.Select):
- if selectedItem := m.list.SelectedItem(); selectedItem != nil {
- // TODO: Handle model selection confirmation.
+ selectedItem := m.list.SelectedItem()
+ if selectedItem == nil {
+ break
+ }
+
+ modelItem, ok := selectedItem.(*ModelItem)
+ if !ok {
+ break
+ }
+
+ return ModelSelectedMsg{
+ Provider: modelItem.prov,
+ Model: modelItem.model,
}
case key.Matches(msg, m.keyMap.Tab):
if m.modelType == ModelTypeLarge {
@@ -562,6 +562,13 @@ func (m *UI) handleKeyPressMsg(msg tea.KeyPressMsg) tea.Cmd {
m.dialog.CloseDialog(dialog.CommandsID)
case dialog.QuitMsg:
cmds = append(cmds, tea.Quit)
+ case dialog.SwitchModelMsg:
+ m.dialog.CloseDialog(dialog.CommandsID)
+ if cmd := m.openModelsDialog(); cmd != nil {
+ cmds = append(cmds, cmd)
+ }
+ case dialog.ModelSelectedMsg:
+ // TODO: Handle model switching
}
return tea.Batch(cmds...)