Добавление и исправление комментариев, начало добавление валидации, сообщение прокрути viewport на форме
This commit is contained in:
parent
c7ff7662ba
commit
e37cabadcc
14 changed files with 371 additions and 297 deletions
|
|
@ -2,47 +2,62 @@ package fields
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/charmbracelet/bubbles/textinput"
|
||||
tea "github.com/charmbracelet/bubbletea"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
// CheckboxModel структура описывающая модель выбора из двух состояний да и нет
|
||||
type CheckboxModel struct {
|
||||
Label string
|
||||
description string
|
||||
Checked bool
|
||||
label string //Имя поля
|
||||
description string //Описание поля
|
||||
checked bool //Выбранное состояние
|
||||
validate textinput.ValidateFunc //Функция валидации
|
||||
err error //Поле ошибки валидации
|
||||
}
|
||||
|
||||
func NewCheckboxModel(label, description string, checked bool) *CheckboxModel {
|
||||
return &CheckboxModel{
|
||||
Label: label,
|
||||
// NewCheckboxModel создаем новую модель выбора
|
||||
func NewCheckboxModel(label, description string, checked bool, validator textinput.ValidateFunc) *CheckboxModel {
|
||||
checkbox := &CheckboxModel{
|
||||
label: label,
|
||||
description: description,
|
||||
Checked: checked,
|
||||
validate: validator,
|
||||
checked: checked,
|
||||
}
|
||||
checkbox.err = validator(strconv.FormatBool(checked))
|
||||
|
||||
return checkbox
|
||||
}
|
||||
|
||||
func (m *CheckboxModel) Init() tea.Cmd {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Update отслеживает действия с полем
|
||||
func (m *CheckboxModel) Update(msg tea.Msg) (FieldModel, tea.Cmd) {
|
||||
switch msg := msg.(type) {
|
||||
case tea.KeyMsg:
|
||||
//Отслеживает нажатия клавиш.
|
||||
switch msg.String() {
|
||||
case " ", "enter":
|
||||
m.Checked = !m.Checked
|
||||
//Если был нажат enter или space, то меняем текущее значение на противоположное
|
||||
m.checked = !m.checked
|
||||
m.err = m.validate(strconv.FormatBool(m.checked))
|
||||
}
|
||||
}
|
||||
return m, nil
|
||||
}
|
||||
|
||||
func (m *CheckboxModel) View() string {
|
||||
res := ""
|
||||
res += m.Label + ": "
|
||||
if m.Checked {
|
||||
res := fmt.Sprintf("%s: ", m.label)
|
||||
if m.checked {
|
||||
res += "[x]"
|
||||
} else {
|
||||
res += "[ ]"
|
||||
}
|
||||
if m.description != "" {
|
||||
if m.err != nil {
|
||||
res += fmt.Sprintf("\nОшибка валидации: %s", m.err)
|
||||
} else if m.description != "" {
|
||||
res += fmt.Sprintf("\n%s", m.description)
|
||||
}
|
||||
return res
|
||||
|
|
@ -62,9 +77,9 @@ func (m *CheckboxModel) CaptureKeys() bool {
|
|||
}
|
||||
|
||||
func (m *CheckboxModel) GetLabel() string {
|
||||
return m.Label
|
||||
return m.label
|
||||
}
|
||||
|
||||
func (m *CheckboxModel) GetValue() interface{} {
|
||||
return m.Checked
|
||||
return m.checked
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue