fix: bad ux

This commit is contained in:
juancwu 2026-01-26 21:23:33 +00:00
commit 5a425b8c60
15 changed files with 791 additions and 463 deletions

View file

@ -7,16 +7,16 @@ import (
"git.juancwu.dev/juancwu/porkbacon/internal/config"
"git.juancwu.dev/juancwu/porkbacon/internal/ui/messages"
"git.juancwu.dev/juancwu/porkbacon/internal/ui/pages/dns"
"git.juancwu.dev/juancwu/porkbacon/internal/ui/pages/domaindetails"
"git.juancwu.dev/juancwu/porkbacon/internal/ui/pages/domainmenu"
"git.juancwu.dev/juancwu/porkbacon/internal/ui/pages/listdomains"
"git.juancwu.dev/juancwu/porkbacon/internal/ui/pages/login"
"git.juancwu.dev/juancwu/porkbacon/internal/ui/pages/menu"
tea "github.com/charmbracelet/bubbletea"
)
type MainModel struct {
currentPage messages.Page
pages map[messages.Page]tea.Model
isMenuInit bool
width int
height int
}
@ -53,27 +53,54 @@ func (m MainModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
case tea.WindowSizeMsg:
m.width = msg.Width
m.height = msg.Height
for k, p := range m.pages {
m.pages[k], _ = p.Update(msg)
}
case messages.SwitchPageMsg:
m.currentPage = msg.Page
return m, nil
case messages.SessionReadyMsg:
m.pages[messages.PageMenu] = menu.New(msg.Client)
m.pages[messages.PageListDomains] = listdomains.New(msg.Client)
m.pages[messages.PageDNSRetrieve] = dns.NewRetrieveModel(msg.Client)
m.pages[messages.PageDomainMenu] = domainmenu.New()
m.pages[messages.PageDomainDetails] = domaindetails.New()
m.pages[messages.PageDNSList] = dns.NewListModel(msg.Client)
if m.width > 0 && m.height > 0 {
m.pages[messages.PageMenu], _ = m.pages[messages.PageMenu].Update(tea.WindowSizeMsg{Width: m.width, Height: m.height})
for k, p := range m.pages {
m.pages[k], _ = p.Update(tea.WindowSizeMsg{Width: m.width, Height: m.height})
}
}
m.currentPage = messages.PageMenu
m.isMenuInit = true
var cmds []tea.Cmd
for _, page := range m.pages {
cmds = append(cmds, page.Init())
// Initial flow: Go to ListDomains and trigger load
m.currentPage = messages.PageListDomains
return m, func() tea.Msg { return messages.ListDomainsMsg{} }
case messages.DomainSelectedMsg:
// Broadcast to DomainMenu and DomainDetails and DNSList
// Then switch to DomainMenu
// We need to update those models with the message
for _, pageKey := range []messages.Page{messages.PageDomainMenu, messages.PageDomainDetails, messages.PageDNSList} {
if p, ok := m.pages[pageKey]; ok {
var c tea.Cmd
m.pages[pageKey], c = p.Update(msg)
if c != nil {
cmds = append(cmds, c)
}
}
}
m.currentPage = messages.PageDomainMenu
return m, tea.Batch(cmds...)
case messages.RefreshMsg:
page, ok := m.pages[m.currentPage]
if ok {
var c tea.Cmd
m.pages[m.currentPage], c = page.Update(msg)
cmds = append(cmds, c)
}
return m, tea.Batch(cmds...)
case messages.ListDomainsMsg:
m.currentPage = messages.PageListDomains
case messages.DNSRetrieveMsg:
m.currentPage = messages.PageDNSRetrieve
}
page, ok := m.pages[m.currentPage]