mirror of
https://github.com/marcusDenslow/terminalShop.git
synced 2026-10-25 18:08:45 +01:00
* refactor(tui): port to charm v2 bumped bubbletea, lipgloss, bubbles, wish, and huh to v2. Mostly mechanical chur, new import paths, vewport getter/setter api, view() returns tea.view now, huh.theme became an interface so the theme package needed a small reshape. Render plumbing is gone (no more lipgloss.Render field on the Model or MakeRenderer in main.go). All pages still work over ssh. setting up for the refund composer next * style(tui): gofmt main.go and menu.go
59 lines
1.5 KiB
Go
59 lines
1.5 KiB
Go
package tui
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"charm.land/lipgloss/v2"
|
|
"charm.land/lipgloss/v2/table"
|
|
)
|
|
|
|
func (m Model) BuildHeader() string {
|
|
bold := m.theme.TextAccent().Bold(true).Render
|
|
accent := m.theme.TextAccent().Render
|
|
base := m.theme.Base().Render
|
|
cursor := m.theme.Base().Background(m.theme.Brand()).Render(" ")
|
|
|
|
mark := bold("t") + cursor
|
|
logo := bold("terminal")
|
|
menu := bold("m") + base(" ☰")
|
|
|
|
tab := func(key, name string, active bool) string {
|
|
if active {
|
|
return accent(key + " " + name)
|
|
}
|
|
return accent(key) + base(" "+name)
|
|
}
|
|
shop := tab("s", "shop", m.currentPage == shopPage)
|
|
account := tab("a", "account", m.currentPage == accountPage)
|
|
|
|
priceStr := fmt.Sprintf(" $%2v", m.CalculateSubtotal()/100)
|
|
countStr := fmt.Sprintf(" [%d]", m.CartItemCount())
|
|
cartLabel := base(" cart")
|
|
if m.inCartFlow() {
|
|
cartLabel = accent(" cart")
|
|
}
|
|
cart := accent("c") + cartLabel + accent(priceStr) + base(countStr)
|
|
|
|
var tabs []string
|
|
switch m.size {
|
|
case small:
|
|
tabs = []string{mark, cart}
|
|
case medium:
|
|
tabs = []string{menu, logo, cart}
|
|
default:
|
|
tabs = []string{logo, shop, account, cart}
|
|
}
|
|
|
|
tbl := table.New().Border(lipgloss.NormalBorder()).BorderStyle(lipgloss.NewStyle().Foreground(m.theme.Border())).Row(tabs...).Width(m.widthContent).StyleFunc(func(row, col int) lipgloss.Style {
|
|
return m.theme.Base().Padding(0, 1).AlignHorizontal(lipgloss.Center)
|
|
}).Render()
|
|
|
|
return lipgloss.Place(
|
|
m.widthContainer,
|
|
lipgloss.Height(tbl),
|
|
lipgloss.Center,
|
|
lipgloss.Center,
|
|
tbl,
|
|
)
|
|
}
|