first draft of miasma installer
This commit is contained in:
70
tui/model.go
Normal file
70
tui/model.go
Normal file
@@ -0,0 +1,70 @@
|
||||
package tui
|
||||
|
||||
import (
|
||||
"miasma-installer/tui/steps"
|
||||
|
||||
tea "github.com/charmbracelet/bubbletea"
|
||||
)
|
||||
|
||||
type State int
|
||||
|
||||
const (
|
||||
StateWelcome State = iota
|
||||
StateDiskSelection
|
||||
StateInstalling
|
||||
StateFinished
|
||||
)
|
||||
|
||||
type RootModel struct {
|
||||
State State
|
||||
CurrentModel tea.Model
|
||||
Width int
|
||||
Height int
|
||||
}
|
||||
|
||||
func NewModel() RootModel {
|
||||
return RootModel{
|
||||
State: StateWelcome,
|
||||
CurrentModel: steps.NewWelcomeModel(),
|
||||
}
|
||||
}
|
||||
|
||||
func (m RootModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
var cmd 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
|
||||
}
|
||||
|
||||
m.CurrentModel, cmd = m.CurrentModel.Update(msg)
|
||||
|
||||
switch m.CurrentModel.(type) {
|
||||
case steps.WelcomeModel:
|
||||
if m.CurrentModel.(steps.WelcomeModel).Finished {
|
||||
m.State = StateDiskSelection
|
||||
m.CurrentModel = steps.NewDiskSelModel(m.Width, m.Height)
|
||||
return m, m.CurrentModel.Init()
|
||||
}
|
||||
|
||||
case steps.DiskSelModel:
|
||||
if m.CurrentModel.(steps.DiskSelModel).Finished {
|
||||
// need to update this to pass actual selected disk model to the installer
|
||||
selectedDisk := m.CurrentModel.(steps.DiskSelModel).SelectedDisk
|
||||
m.State = StateInstalling
|
||||
m.CurrentModel = steps.NewInstallModel(selectedDisk)
|
||||
return m, m.CurrentModel.Init()
|
||||
}
|
||||
// logic for StateInstalling -> StateFinished will go here
|
||||
}
|
||||
return m, cmd
|
||||
}
|
||||
|
||||
func (m RootModel) View() string {
|
||||
return m.CurrentModel.View()
|
||||
}
|
||||
Reference in New Issue
Block a user