separate domain listing into its own model

This commit is contained in:
juancwu 2026-01-23 19:11:36 +00:00
commit ef2dbcede5
5 changed files with 162 additions and 76 deletions

View file

@ -6,6 +6,7 @@ import (
"git.juancwu.dev/juancwu/porkbacon/internal/config"
"git.juancwu.dev/juancwu/porkbacon/internal/ui/messages"
"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"
@ -15,6 +16,7 @@ type MainModel struct {
currentPage messages.Page
login *login.Model
menu *menu.Model
listDomains *listdomains.Model
isMenuInit bool
width int
height int
@ -42,6 +44,10 @@ func (m MainModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
var cmds []tea.Cmd
switch msg := msg.(type) {
case tea.KeyMsg:
if msg.String() == "ctrl+c" {
return m, tea.Quit
}
case tea.WindowSizeMsg:
m.width = msg.Width
m.height = msg.Height
@ -50,13 +56,16 @@ func (m MainModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
return m, nil
case messages.SessionReadyMsg:
m.menu = menu.New(msg.Client)
m.listDomains = listdomains.New(msg.Client)
if m.width > 0 && m.height > 0 {
newMenu, _ := m.menu.Update(tea.WindowSizeMsg{Width: m.width, Height: m.height})
m.menu = newMenu.(*menu.Model)
}
m.currentPage = messages.PageMenu
m.isMenuInit = true
return m, m.menu.Init()
return m, tea.Batch(m.menu.Init(), m.listDomains.Init())
case messages.ListDomainsMsg:
m.currentPage = messages.PageListDomains
}
switch m.currentPage {
@ -68,6 +77,10 @@ func (m MainModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
var newMenu tea.Model
newMenu, cmd = m.menu.Update(msg)
m.menu = newMenu.(*menu.Model)
case messages.PageListDomains:
var newModel tea.Model
newModel, cmd = m.listDomains.Update(msg)
m.listDomains = newModel.(*listdomains.Model)
}
cmds = append(cmds, cmd)
@ -80,6 +93,8 @@ func (m MainModel) View() string {
return m.login.View()
case messages.PageMenu:
return m.menu.View()
case messages.PageListDomains:
return m.listDomains.View()
default:
return "Unknown Page"
}