messages.go

 1package repl
 2
 3import (
 4	tea "github.com/charmbracelet/bubbletea"
 5	"github.com/charmbracelet/lipgloss"
 6	"github.com/kujtimiihoxha/termai/internal/app"
 7	"github.com/kujtimiihoxha/termai/internal/message"
 8	"github.com/kujtimiihoxha/termai/internal/pubsub"
 9	"github.com/kujtimiihoxha/termai/internal/session"
10)
11
12type messagesCmp struct {
13	app      *app.App
14	messages []message.Message
15	session  session.Session
16}
17
18func (m *messagesCmp) Init() tea.Cmd {
19	return nil
20}
21
22func (m *messagesCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
23	switch msg := msg.(type) {
24	case pubsub.Event[message.Message]:
25		if msg.Type == pubsub.CreatedEvent {
26			m.messages = append(m.messages, msg.Payload)
27		}
28	case SelectedSessionMsg:
29		m.session, _ = m.app.Sessions.Get(msg.SessionID)
30		m.messages, _ = m.app.Messages.List(m.session.ID)
31	}
32	return m, nil
33}
34
35func (i *messagesCmp) View() string {
36	stringMessages := make([]string, len(i.messages))
37	for idx, msg := range i.messages {
38		stringMessages[idx] = msg.MessageData.Content
39	}
40	return lipgloss.JoinVertical(lipgloss.Top, stringMessages...)
41}
42
43func NewMessagesCmp(app *app.App) tea.Model {
44	return &messagesCmp{
45		app:      app,
46		messages: []message.Message{},
47	}
48}