mirror of
https://github.com/anotherhadi/spilltea.git
synced 2026-07-06 12:42:32 +02:00
9d0ef598a7
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
81 lines
1.8 KiB
Go
81 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
"path/filepath"
|
|
|
|
tea "charm.land/bubbletea/v2"
|
|
"github.com/anotherhadi/spilltea/internal/config"
|
|
"github.com/anotherhadi/spilltea/internal/icons"
|
|
"github.com/anotherhadi/spilltea/internal/intercept"
|
|
"github.com/anotherhadi/spilltea/internal/keys"
|
|
appUI "github.com/anotherhadi/spilltea/internal/ui/app"
|
|
homeUI "github.com/anotherhadi/spilltea/internal/ui/home"
|
|
)
|
|
|
|
type rootState int
|
|
|
|
const (
|
|
rootStateHome rootState = iota
|
|
rootStateApp
|
|
)
|
|
|
|
type rootModel struct {
|
|
state rootState
|
|
home homeUI.Model
|
|
app tea.Model
|
|
width int
|
|
height int
|
|
}
|
|
|
|
func (m rootModel) Init() tea.Cmd {
|
|
return m.home.Init()
|
|
}
|
|
|
|
func (m rootModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|
if ws, ok := msg.(tea.WindowSizeMsg); ok {
|
|
m.width = ws.Width
|
|
m.height = ws.Height
|
|
}
|
|
|
|
if m.state == rootStateHome {
|
|
if sel, ok := msg.(homeUI.ProjectSelectedMsg); ok {
|
|
if err := config.MergeProjectConfig(filepath.Dir(sel.Project.Path)); err != nil {
|
|
log.Printf("project config: %v", err)
|
|
}
|
|
icons.Init(config.Global)
|
|
keys.Init(config.Global)
|
|
broker := intercept.NewBroker()
|
|
app := appUI.New(broker, sel.Project.Name, sel.Project.Path)
|
|
m.app = app
|
|
m.state = rootStateApp
|
|
return m, tea.Batch(app.Init(), func() tea.Msg {
|
|
return tea.WindowSizeMsg{Width: m.width, Height: m.height}
|
|
})
|
|
}
|
|
updated, cmd := m.home.Update(msg)
|
|
m.home = updated.(homeUI.Model)
|
|
return m, cmd
|
|
}
|
|
|
|
updated, cmd := m.app.Update(msg)
|
|
m.app = updated
|
|
return m, cmd
|
|
}
|
|
|
|
func (m rootModel) View() tea.View {
|
|
if m.state == rootStateApp {
|
|
return m.app.(interface{ View() tea.View }).View()
|
|
}
|
|
return m.home.View()
|
|
}
|
|
|
|
func (m rootModel) FatalErr() error {
|
|
if m.state == rootStateApp {
|
|
if app, ok := m.app.(appUI.Model); ok {
|
|
return app.FatalErr()
|
|
}
|
|
}
|
|
return nil
|
|
}
|