Изменение вызова действий, проверка наличия действий секции, отображение счетчика выполнения действий в модальном окне, работа над подключением привязки горячих клавиш
This commit is contained in:
parent
91b1eea1d4
commit
c69a7ae84b
14 changed files with 886 additions and 706 deletions
|
|
@ -3,6 +3,7 @@ package setup
|
|||
import (
|
||||
"bubble/setup/fields"
|
||||
"bubble/setup/ui"
|
||||
"bubble/setup/utils"
|
||||
"bubble/types"
|
||||
"fmt"
|
||||
"github.com/charmbracelet/bubbles/viewport"
|
||||
|
|
@ -31,7 +32,7 @@ func NewFormModel(application *types.PackageApplication, sectionIdx, focus, widt
|
|||
//Заполняем массив моделей полей с учетом условий
|
||||
var fieldModels []fields.FieldModel
|
||||
for _, sectionField := range currentSection.Fields {
|
||||
if !CheckCondition(sectionField.Condition, application) {
|
||||
if !utils.CheckCondition(sectionField.Condition, application) {
|
||||
continue
|
||||
}
|
||||
switch sectionField.FieldType {
|
||||
|
|
@ -41,13 +42,13 @@ func NewFormModel(application *types.PackageApplication, sectionIdx, focus, widt
|
|||
options = append(options, fmt.Sprintf("%v", sectionField.Options[j]))
|
||||
}
|
||||
if sectionField.SpecialValue != "" {
|
||||
specialOptions := SpecialValueHandle(sectionField.SpecialValue)
|
||||
specialOptions := utils.SpecialValueHandle(sectionField.SpecialValue)
|
||||
if strSpecial, ok := specialOptions.([]string); ok {
|
||||
options = strSpecial
|
||||
}
|
||||
}
|
||||
selected := fmt.Sprintf("%v", sectionField.Variable.Value)
|
||||
validationFunc := ValidateField(sectionField.Name, sectionField.VariableName, sectionField.Validate, application)
|
||||
validationFunc := utils.ValidateField(sectionField.Name, sectionField.VariableName, sectionField.Validate, application)
|
||||
fieldModels = append(fieldModels, fields.NewSelectModel(sectionField.Name, selected, sectionField.Description, options, validationFunc))
|
||||
case "check":
|
||||
checked := false
|
||||
|
|
@ -56,23 +57,23 @@ func NewFormModel(application *types.PackageApplication, sectionIdx, focus, widt
|
|||
} else {
|
||||
checked = sectionField.Variable.Value == "true"
|
||||
}
|
||||
validationFunc := ValidateCheckField(sectionField.Name, sectionField.VariableName, sectionField.Validate, application)
|
||||
validationFunc := utils.ValidateCheckField(sectionField.Name, sectionField.VariableName, sectionField.Validate, application)
|
||||
fieldModels = append(fieldModels, fields.NewCheckboxModel(sectionField.Name, sectionField.Description, checked, validationFunc))
|
||||
case "compute":
|
||||
value, err := ComputeValue(sectionField.Compute, application)
|
||||
value, err := utils.ComputeValue(sectionField.Compute, application)
|
||||
if err != nil {
|
||||
value = fmt.Sprintf("Ошибка вычисления: %v", err)
|
||||
}
|
||||
fieldModels = append(fieldModels, fields.NewComputeModel(sectionField.Name, fmt.Sprintf("%v", value), sectionField.Description))
|
||||
//compute расчет
|
||||
case "file":
|
||||
validationFunc := ValidateField(sectionField.Name, sectionField.VariableName, sectionField.Validate, application)
|
||||
validationFunc := utils.ValidateField(sectionField.Name, sectionField.VariableName, sectionField.Validate, application)
|
||||
fieldModels = append(fieldModels, fields.NewFileSelectModel(sectionField.Name, fmt.Sprintf("%v", sectionField.Variable.Value), sectionField.Description, sectionField.FileFieldExtensions, validationFunc))
|
||||
case "directory":
|
||||
validationFunc := ValidateField(sectionField.Name, sectionField.VariableName, sectionField.Validate, application)
|
||||
validationFunc := utils.ValidateField(sectionField.Name, sectionField.VariableName, sectionField.Validate, application)
|
||||
fieldModels = append(fieldModels, fields.NewDirSelectModel(sectionField.Name, fmt.Sprintf("%v", sectionField.Variable.Value), sectionField.Description, validationFunc))
|
||||
default:
|
||||
validationFunc := ValidateField(sectionField.Name, sectionField.VariableName, sectionField.Validate, application)
|
||||
validationFunc := utils.ValidateField(sectionField.Name, sectionField.VariableName, sectionField.Validate, application)
|
||||
fieldModels = append(fieldModels, fields.NewInputModel(sectionField.Name, fmt.Sprintf("%v", sectionField.Variable.Value), sectionField.Description, validationFunc))
|
||||
}
|
||||
}
|
||||
|
|
@ -165,7 +166,7 @@ func (m *FormModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||
// фокус равен количество полей, значит он на кнопке следующей секции,
|
||||
// если меньше количества полей или равен 0, значит фокус на поле формы.
|
||||
// Если у нас нет полей на форме (секция About), значит количество полей равно 0, а фокус по умолчанию устанавливается 0.
|
||||
// Чтобы m.FieldModels[m.focus] вызвало ошибку "индекс вне массива",
|
||||
// Чтобы m.FieldModels[m.focus] не вызвало ошибку "индекс вне массива",
|
||||
// нужно чтобы в условие m.focus < len(m.FieldModels) попал фокус меньше 0 (-1,-2 и тд).
|
||||
// Чтобы этого избежать, есть проверка, которая устанавливает m.focus на последнюю позицию (количество полей на форме).
|
||||
// Чтобы эта проверка дала сбой, нужно после неё прописать изменение фокуса формы на отрицательный принудительно, так как такое не может произойти в текущем коде.
|
||||
|
|
@ -222,7 +223,7 @@ func (m *FormModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||
var viewportCmd, fieldsCmd tea.Cmd
|
||||
m.viewport, viewportCmd = m.viewport.Update(msg)
|
||||
fieldsCmd = m.updateFields(msg)
|
||||
return m, tea.Batch(viewportCmd, fieldsCmd)
|
||||
return m, tea.Sequence(viewportCmd, fieldsCmd)
|
||||
}
|
||||
|
||||
func (m *FormModel) View() string {
|
||||
|
|
@ -407,5 +408,5 @@ func (m *FormModel) updateFields(msg tea.Msg) tea.Cmd {
|
|||
}
|
||||
}
|
||||
//Объединяем весь массив команду в одну
|
||||
return tea.Batch(cmds...)
|
||||
return tea.Sequence(cmds...)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue