summaryrefslogtreecommitdiffhomepage
path: root/internal/tui/components/core/status.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/tui/components/core/status.go')
-rw-r--r--internal/tui/components/core/status.go48
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,
}
}