diff options
Diffstat (limited to 'internal/tui/components/core/status.go')
| -rw-r--r-- | internal/tui/components/core/status.go | 48 |
1 files changed, 23 insertions, 25 deletions
diff --git a/internal/tui/components/core/status.go b/internal/tui/components/core/status.go index bd3629319..83ef07fe3 100644 --- a/internal/tui/components/core/status.go +++ b/internal/tui/components/core/status.go @@ -7,16 +7,16 @@ import ( "github.com/charmbracelet/lipgloss" "github.com/kujtimiihoxha/termai/internal/config" "github.com/kujtimiihoxha/termai/internal/llm/models" + "github.com/kujtimiihoxha/termai/internal/pubsub" "github.com/kujtimiihoxha/termai/internal/tui/styles" "github.com/kujtimiihoxha/termai/internal/tui/util" "github.com/kujtimiihoxha/termai/internal/version" ) type statusCmp struct { - err error - info string - width int - messageTTL time.Duration + info *util.InfoMsg + width int + messageTTL time.Duration } // clearMessageCmd is a command that clears status messages after a timeout @@ -34,17 +34,15 @@ func (m statusCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) { switch msg := msg.(type) { case tea.WindowSizeMsg: m.width = msg.Width - case util.ErrorMsg: - m.err = msg - m.info = "" + return m, m.clearMessageCmd() + case pubsub.Event[util.InfoMsg]: + m.info = &msg.Payload return m, m.clearMessageCmd() case util.InfoMsg: - m.info = string(msg) - m.err = nil + m.info = &msg return m, m.clearMessageCmd() case util.ClearStatusMsg: - m.info = "" - m.err = nil + m.info = nil } return m, nil } @@ -56,25 +54,25 @@ var ( func (m statusCmp) View() string { status := styles.Padded.Background(styles.Grey).Foreground(styles.Text).Render("? help") - - if m.err != nil { - status += styles.Regular.Padding(0, 1). - Background(styles.Red). - Foreground(styles.Text). - Width(m.availableFooterMsgWidth()). - Render(m.err.Error()) - } else if m.info != "" { - status += styles.Padded. + if m.info != nil { + infoStyle := styles.Padded. Foreground(styles.Base). - Background(styles.Green). - Width(m.availableFooterMsgWidth()). - Render(m.info) + Width(m.availableFooterMsgWidth()) + switch m.info.Type { + case util.InfoTypeInfo: + infoStyle = infoStyle.Background(styles.Blue) + case util.InfoTypeWarn: + infoStyle = infoStyle.Background(styles.Peach) + case util.InfoTypeError: + infoStyle = infoStyle.Background(styles.Red) + } + status += infoStyle.Render(m.info.Msg) } else { status += styles.Padded. Foreground(styles.Base). Background(styles.LightGrey). Width(m.availableFooterMsgWidth()). - Render(m.info) + Render("") } status += m.model() status += versionWidget @@ -93,6 +91,6 @@ func (m statusCmp) model() string { func NewStatusCmp() tea.Model { return &statusCmp{ - messageTTL: 5 * time.Second, + messageTTL: 15 * time.Second, } } |
