1
0
mirror of https://github.com/mrusme/neonmodem.git synced 2024-06-23 06:35:24 +00:00
neonmodem/ui/header/header.go

115 lines
20 KiB
Go
Raw Normal View History

package header
import (
2023-01-05 02:43:11 +00:00
"fmt"
"github.com/mrusme/gobbs/ui/ctx"
"github.com/charmbracelet/bubbles/spinner"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
)
var (
highlight = lipgloss.AdaptiveColor{Light: "#874BFD", Dark: "#7D56F4"}
2023-01-07 00:01:38 +00:00
banner = `




`
)
type Model struct {
ctx *ctx.Ctx
spinner spinner.Model
}
func NewModel(c *ctx.Ctx) Model {
m := Model{
ctx: c,
}
m.spinner = spinner.New()
m.spinner.Spinner = spinner.Dot
m.spinner.Style = lipgloss.NewStyle().Foreground(lipgloss.Color("205"))
return m
}
func (m Model) Init() tea.Cmd {
return m.spinner.Tick
}
func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
var cmds []tea.Cmd
if m.ctx.Loading == true {
cmds = append(cmds, m.spinner.Tick)
} else {
return m, nil
}
switch msg := msg.(type) {
case spinner.TickMsg:
var cmd tea.Cmd
m.spinner, cmd = m.spinner.Update(msg)
cmds = append(cmds, cmd)
}
return m, tea.Batch(cmds...)
}
func (m Model) View() string {
2023-01-01 06:59:10 +00:00
var row string
var spinner string = ""
selectorWidth := 40
selectorTextLen := selectorWidth - 7
selector := lipgloss.NewStyle().
Foreground(lipgloss.Color("#7fffd4")).
BorderForeground(lipgloss.Color("#7fffd4")).
Border(lipgloss.NormalBorder()).
Padding(0, 1, 0, 1).
Width(selectorWidth)
2023-01-05 02:43:11 +00:00
curSysIdx := m.ctx.GetCurrentSystem()
var currentSystem string = "All"
if curSysIdx >= 0 {
2023-01-05 04:59:59 +00:00
currentSystem = (*m.ctx.Systems[curSysIdx]).Title()
if len(currentSystem) > selectorTextLen {
currentSystem = currentSystem[0:selectorTextLen]
}
2023-01-05 02:43:11 +00:00
}
2023-01-05 16:43:52 +00:00
curForum := m.ctx.GetCurrentForum()
var currentForum string = "All"
if curForum.ID != "" {
currentForum = curForum.Title()
if len(currentForum) > selectorTextLen {
currentForum = currentForum[0:selectorTextLen]
}
2023-01-05 16:43:52 +00:00
}
2023-01-05 02:43:11 +00:00
systemSelector := selector.Render(fmt.Sprintf("⏷ %s", currentSystem))
2023-01-05 16:43:52 +00:00
forumSelector := selector.Render(fmt.Sprintf("⏷ %s", currentForum))
selectorColumn := lipgloss.JoinVertical(lipgloss.Center,
lipgloss.JoinHorizontal(lipgloss.Bottom, "System: \n "+
lipgloss.NewStyle().Foreground(m.ctx.Theme.DialogBox.Bottombar.GetForeground()).Render("C-e"),
systemSelector),
lipgloss.JoinHorizontal(lipgloss.Bottom, "Forum: \n "+
lipgloss.NewStyle().Foreground(m.ctx.Theme.DialogBox.Bottombar.GetForeground()).Render("C-t"),
forumSelector),
)
if m.ctx.Loading == true {
spinner = m.spinner.View()
}
row = lipgloss.JoinHorizontal(lipgloss.Top, banner, " ", selectorColumn, " ", spinner)
2023-01-01 06:59:10 +00:00
return row
}