Работа над валидацией полей, работа над выполнением действий

This commit is contained in:
XeRo 2026-01-21 17:56:21 +05:00
parent e37cabadcc
commit dc263b76bf
8 changed files with 220 additions and 23 deletions

View file

@ -1,10 +1,9 @@
package fields
import (
"bubble/types"
"fmt"
"github.com/charmbracelet/bubbles/textinput"
tea "github.com/charmbracelet/bubbletea"
"strconv"
)
// CheckboxModel структура описывающая модель выбора из двух состояний да и нет
@ -12,20 +11,19 @@ type CheckboxModel struct {
label string //Имя поля
description string //Описание поля
checked bool //Выбранное состояние
validate textinput.ValidateFunc //Функция валидации
validate types.BoolValidateFunc //Функция валидации
err error //Поле ошибки валидации
}
// NewCheckboxModel создаем новую модель выбора
func NewCheckboxModel(label, description string, checked bool, validator textinput.ValidateFunc) *CheckboxModel {
func NewCheckboxModel(label, description string, checked bool, validator types.BoolValidateFunc) *CheckboxModel {
checkbox := &CheckboxModel{
label: label,
description: description,
validate: validator,
checked: checked,
}
checkbox.err = validator(strconv.FormatBool(checked))
checkbox.CheckboxValidate()
return checkbox
}
@ -42,7 +40,7 @@ func (m *CheckboxModel) Update(msg tea.Msg) (FieldModel, tea.Cmd) {
case " ", "enter":
//Если был нажат enter или space, то меняем текущее значение на противоположное
m.checked = !m.checked
m.err = m.validate(strconv.FormatBool(m.checked))
m.CheckboxValidate()
}
}
return m, nil
@ -83,3 +81,9 @@ func (m *CheckboxModel) GetLabel() string {
func (m *CheckboxModel) GetValue() interface{} {
return m.checked
}
func (m *CheckboxModel) CheckboxValidate() {
if m.validate != nil {
m.err = m.validate(m.checked)
}
}