package main import ( "fmt" "os" tea "github.com/charmbracelet/bubbletea" "git.ohea.xyz/cursorius/tui/screens" "git.ohea.xyz/cursorius/tui/settings" ) type model struct { screen tea.Model width int height int } func (m model) Init() tea.Cmd { return nil } func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { switch msg := msg.(type) { case tea.WindowSizeMsg: m.width = msg.Width m.height = msg.Height case tea.KeyMsg: switch msg.String() { case "ctrl+c": return m, tea.Quit } case screens.ScreenSwitchMsg: // when new screen is created, send WindowSizeMsg to init size m.screen = msg.NewScreen return m, func() tea.Msg { return tea.WindowSizeMsg{ Width: m.width, Height: m.height, } } case error: m.screen = screens.ErrorScreen{ Err: msg, } return m, nil } var cmd tea.Cmd m.screen, cmd = m.screen.Update(msg) return m, cmd } func (m model) View() string { return m.screen.View() } func main() { conf, err := settings.GetConfig() if err != nil { fmt.Printf("Error: %v", err) return } initialModel := model{ screen: screens.CreateLogin( conf, //[]screens.CursoriusServer{ // { // Name: "local-test", // Url: "http://127.0.0.1:45421/graphql", // Token: "", // }, // { // Name: "ohea", // Url: "https://ci.cursorius.server", // Token: "test", // }, // { // Name: "nohea", // Url: "https://ci.cursoriuspreview.server", // Token: "test", // }, // { // Name: "work", // Url: "https://ci.acme.corp", // Token: "test", // }, //}, ), } p := tea.NewProgram(initialModel, tea.WithAltScreen()) if _, err := p.Run(); err != nil { fmt.Printf("Alas, there's been an error: %v", err) os.Exit(1) } }