fix: bad ux
This commit is contained in:
parent
a70ed5a372
commit
5a425b8c60
15 changed files with 791 additions and 463 deletions
|
|
@ -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]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue