diff options
| author | Kyren223 <ulmliad223@gmail.com> | 2024-10-24 16:39:14 +0300 |
|---|---|---|
| committer | Kyren223 <ulmliad223@gmail.com> | 2024-10-24 16:39:14 +0300 |
| commit | 688668f6d34d4d962247bd5df60c3fca61185927 (patch) | |
| tree | 459a29a76bb3a8cd77cdeccf35d7c1689374d09d /internal/client/ui.go | |
| parent | 6f83f199f8311bf7782da59bc2e07df38073e65a (diff) | |
feat: worked on client
Diffstat (limited to 'internal/client/ui.go')
| -rw-r--r-- | internal/client/ui.go | 125 |
1 files changed, 0 insertions, 125 deletions
diff --git a/internal/client/ui.go b/internal/client/ui.go deleted file mode 100644 index 9de322c..0000000 --- a/internal/client/ui.go +++ /dev/null @@ -1,125 +0,0 @@ -package client - -import ( - "fmt" - "log" - "strings" - - "github.com/charmbracelet/bubbles/cursor" - "github.com/charmbracelet/bubbles/textarea" - "github.com/charmbracelet/bubbles/viewport" - tea "github.com/charmbracelet/bubbletea" - "github.com/charmbracelet/lipgloss" - - "github.com/kyren223/eko/pkg/assert" -) - -func startUI() { - p := tea.NewProgram(initialModel(), tea.WithAltScreen()) - if _, err := p.Run(); err != nil { - log.Println("charm ui error:", err) - } - p. -} - -type model struct { - viewport viewport.Model - messages []string - textarea textarea.Model - senderStyle lipgloss.Style - err error -} - -func initialModel() model { - ta := textarea.New() - ta.Placeholder = "Send a message..." - ta.Focus() - - ta.Prompt = "┃ " - ta.CharLimit = 280 - - ta.SetWidth(30) - ta.SetHeight(3) - - // Remove cursor line styling - ta.FocusedStyle.CursorLine = lipgloss.NewStyle() - - ta.ShowLineNumbers = false - - vp := viewport.New(30, 20) - vp.SetContent("Welcome to Eko!\n Type a message and press Enter to send.") - - ta.KeyMap.InsertNewline.SetEnabled(false) - - messages, err := getMessages() - assert.NoError(err, "TODO HANDLE ERROR") - vp.SetContent(strings.Join(messages, "\n")) - - return model{ - textarea: ta, - messages: messages, - viewport: vp, - senderStyle: lipgloss.NewStyle().Foreground(lipgloss.Color("5")), - err: nil, - } -} - -func (m model) Init() tea.Cmd { - return textarea.Blink -} - -func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { - switch msg := msg.(type) { - case tea.WindowSizeMsg: - m.viewport.Width = msg.Width - m.textarea.SetWidth(msg.Width) - return m, tea.Printf("%dx%d", msg.Width, msg.Height) - case tea.KeyMsg: - switch msg.Type { - case tea.KeyEsc, tea.KeyCtrlC: - // Quit. - fmt.Println(m.textarea.Value()) - return m, tea.Quit - case tea.KeyEnter: - value := m.textarea.Value() - - content := strings.TrimSpace(value) - if content == "" { - // Don't send empty messages. - return m, nil - } - assert.NoError(sendMessage(content), "TODO HANDLE ERROR") - messages, err := getMessages() - assert.NoError(err, "TODO HANDLE ERROR") - - // m.messages = append(m.messages, m.senderStyle.Render("You: ")+content) - m.messages = messages - m.viewport.SetContent(strings.Join(m.messages, "\n")) - m.textarea.Reset() - m.viewport.GotoBottom() - return m, nil - default: - // Send all other keypresses to the textarea. - var cmd tea.Cmd - m.textarea, cmd = m.textarea.Update(msg) - return m, cmd - } - - case cursor.BlinkMsg: - // Textarea should also process cursor blinks. - var cmd tea.Cmd - m.textarea, cmd = m.textarea.Update(msg) - return m, cmd - - default: - return m, nil - } -} - -func (m model) View() string { - return fmt.Sprintf( - "%s\n\n%s", - m.viewport.View(), - m.textarea.View(), - ) + "\n\n" -} |
