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}