fix(ui): handle model selection in models dialog

Ayman Bagabas created

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

internal/ui/dialog/messages.go 🔗

@@ -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{}

internal/ui/dialog/models.go 🔗

@@ -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 {

internal/ui/model/ui.go 🔗

@@ -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...)