// package win_config_server -- конфигурация для подключения к бото-серверу вар-танк package win_config_server import ( "fmt" "github.com/charmbracelet/bubbles/textinput" tea "github.com/charmbracelet/bubbletea" "wartank/desktop/win_base" "wartank/pkg/alias" "wartank/pkg/cons" "wartank/pkg/types" ) // WinConfigServer -- конфигурация для подключения к бото-серверу вар-танк type WinConfigServer struct { *win_base.WinBase model tea.Model textInput textinput.Model } // NewWinConfigServer -- возвращает новое окно для подключения к бото-серверу вар-танк func NewWinConfigServer(desk types.IDesktop) (*WinConfigServer, error) { winBase, err := win_base.NewWinBase(desk, cons.WinConfigServer) if err != nil { return nil, fmt.Errorf("NewWinConfigServer(): in create WinBase, err=\n\t%w", err) } sf := &WinConfigServer{ WinBase: winBase, } return sf, nil } // Init -- настраивает окно для бабл-теа func (sf *WinConfigServer) Init() tea.Cmd { return textinput.Blink } // Update -- обрабатывает команду цикла func (sf *WinConfigServer) Update(msg tea.Msg) (tea.Model, tea.Cmd) { winName := alias.AWinName("") switch msg := msg.(type) { // Может клавиша нажата case tea.KeyMsg: switch msg.String() { // Да, нажато, а что именно? case "esc": // Вернуться на шаг назад winName = cons.WinConfig case "1": // Выбор хоста сервера winName = cons.WinConfigServerHostInput sf.textInput.Reset() sf.textInput.Placeholder = "localhost:18050" case "2": // Выбор логина для входа winName = cons.WinInputLoginServer sf.textInput.Reset() sf.textInput.Placeholder = "login" case "3": // Выбор пароля для входа winName = cons.WinInputPassServer sf.textInput.Reset() sf.textInput.Placeholder = "pass" } } if winName != "" { sf.Desk().SetWin(winName) return sf.model, nil } return nil, nil } // View -- перерисовывание окна по требованию func (sf *WinConfigServer) View() string { s := "Настройки сервера вар-танк\n\n" s += "[1]-Настройки хоста сервера\n" s += "[2]-Логин для входа\n" s += "[3]-Пароль для входа\n" s += "\n\n[ctrl+q]-выход [esc]-назад\n" return s }