SuperCoder/internal/tui/components/repl/messages.go

49 lines
1.2 KiB
Go
Raw Normal View History

2025-03-21 18:20:28 +01:00
package repl
2025-03-23 19:19:08 +01:00
import (
tea "github.com/charmbracelet/bubbletea"
2025-03-23 22:25:31 +01:00
"github.com/charmbracelet/lipgloss"
2025-03-23 19:19:08 +01:00
"github.com/kujtimiihoxha/termai/internal/app"
2025-03-23 22:25:31 +01:00
"github.com/kujtimiihoxha/termai/internal/message"
"github.com/kujtimiihoxha/termai/internal/pubsub"
"github.com/kujtimiihoxha/termai/internal/session"
2025-03-23 19:19:08 +01:00
)
2025-03-21 18:20:28 +01:00
2025-03-23 19:19:08 +01:00
type messagesCmp struct {
2025-03-23 22:25:31 +01:00
app *app.App
messages []message.Message
session session.Session
2025-03-23 19:19:08 +01:00
}
2025-03-21 18:20:28 +01:00
2025-03-23 22:25:31 +01:00
func (m *messagesCmp) Init() tea.Cmd {
2025-03-21 18:20:28 +01:00
return nil
}
2025-03-23 22:25:31 +01:00
func (m *messagesCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
switch msg := msg.(type) {
case pubsub.Event[message.Message]:
if msg.Type == pubsub.CreatedEvent {
m.messages = append(m.messages, msg.Payload)
}
case SelectedSessionMsg:
m.session, _ = m.app.Sessions.Get(msg.SessionID)
m.messages, _ = m.app.Messages.List(m.session.ID)
}
return m, nil
2025-03-21 18:20:28 +01:00
}
func (i *messagesCmp) View() string {
2025-03-23 22:25:31 +01:00
stringMessages := make([]string, len(i.messages))
for idx, msg := range i.messages {
stringMessages[idx] = msg.MessageData.Content
}
return lipgloss.JoinVertical(lipgloss.Top, stringMessages...)
2025-03-21 18:20:28 +01:00
}
2025-03-23 19:19:08 +01:00
func NewMessagesCmp(app *app.App) tea.Model {
return &messagesCmp{
2025-03-23 22:25:31 +01:00
app: app,
messages: []message.Message{},
2025-03-23 19:19:08 +01:00
}
2025-03-21 18:20:28 +01:00
}