feat(tui): add dashboard.Run bridging engine to Bubble Tea
This commit is contained in:
46
internal/tui/dashboard/run.go
Normal file
46
internal/tui/dashboard/run.go
Normal file
@@ -0,0 +1,46 @@
|
||||
package dashboard
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
tea "github.com/charmbracelet/bubbletea"
|
||||
|
||||
"github.com/MDietermann/ArduinoArchSetup/internal/engine"
|
||||
"github.com/MDietermann/ArduinoArchSetup/internal/module"
|
||||
"github.com/MDietermann/ArduinoArchSetup/internal/tui"
|
||||
)
|
||||
|
||||
// Run displays the dashboard while engine.Run executes the selected modules.
|
||||
// Returns the engine summary (for writeState) and the top-level error, if any.
|
||||
func Run(ctx context.Context, reg *module.Registry, state tui.WizardState, halt bool) (engine.Summary, error) {
|
||||
selected := state.SelectedIDs()
|
||||
nameByID := make(map[string]string, len(state.Modules))
|
||||
for _, m := range state.Modules {
|
||||
nameByID[m.ID] = m.Name
|
||||
}
|
||||
|
||||
m := NewModel(selected, nameByID)
|
||||
p := tea.NewProgram(m, tea.WithContext(ctx))
|
||||
|
||||
reporter := tui.NewTeaReporter(p)
|
||||
|
||||
go func() {
|
||||
summary, err := engine.Run(ctx, reg, engine.RunOptions{
|
||||
Selected: selected,
|
||||
HaltOnError: halt,
|
||||
Reporter: reporter,
|
||||
})
|
||||
p.Send(DoneMsg{Summary: summary, Err: err})
|
||||
}()
|
||||
|
||||
if _, err := p.Run(); err != nil {
|
||||
return engine.Summary{}, fmt.Errorf("tui run: %w", err)
|
||||
}
|
||||
|
||||
var sum engine.Summary
|
||||
if m.Summary() != nil {
|
||||
sum = *m.Summary()
|
||||
}
|
||||
return sum, m.RunErr()
|
||||
}
|
||||
Reference in New Issue
Block a user