Перейти к основному содержанию

InputTask

InputTask отвечает за ввод строковых значений. Он поддерживает разные типы полей (пароль, email, IP и т.д.), таймауты, форматирование и подключение валидаторов.

Создание

name := ziva.NewInputTask("Имя проекта", "Введите название:")
Скриншот: ввод с валидацией

Настройки

Тип ввода

name.WithInputType(ziva.InputTypeText)
password := ziva.NewInputTask("Пароль", "Введите пароль:").
    WithInputType(ziva.InputTypePassword)
Доступные типы:
const (
    ziva.InputTypeText     // обычный текст
    ziva.InputTypePassword // скрытый ввод
    ziva.InputTypeEmail    // email
    ziva.InputTypeNumber   // число
    ziva.InputTypeIP       // IP адрес
    ziva.InputTypeDomain   // доменное имя
)
При выборе типа автоматически подставляется подходящий валидатор (если его не задали вручную).

Валидаторы

v := ziva.DefaultValidators

name.WithValidator(v.Username())
email := ziva.NewInputTask("Email", "Введите email:").
    WithInputType(ziva.InputTypeEmail).
    WithValidator(v.Email())
Вы также можете реализовать собственный валидатор — достаточно типа с методами Validate(string) error и Description() string.

Таймаут и значение по умолчанию

name.WithTimeout(30*time.Second, "demo-app")

Плейсхолдер, ширина и пустые значения

name.
  WithPlaceholder("например, billing-service").
  WithWidth(40).                     // минимальные/максимальные ограничения применяются автоматически
  WithVisibleLength(20).             // управляет видимой частью ввода и включает горизонтальный скролл
  WithAllowEmpty(false)              // запретить пустой ввод

Получение результата

queue := ziva.NewQueue("Регистрация")
queue.AddTasks(name)
_ = queue.Run()

fmt.Println("Имя проекта:", name.GetValue())

Пример формы

func askCredentials() (string, string) {
    v := ziva.DefaultValidators

    login := ziva.NewInputTask("Логин", "Имя пользователя:").
        WithValidator(v.Username())

    password := ziva.NewInputTask("Пароль", "Пароль (>=12 символов):").
        WithInputType(ziva.InputTypePassword).
        WithValidator(v.StrongPassword())

    queue := ziva.NewQueue("Авторизация")
    queue.AddTasks(login, password)
    _ = queue.Run()

    return login.GetValue(), password.GetValue()
}

Советы

  • Разрешайте пустой ввод (WithAllowEmpty(true)), если поле опциональное. При необходимости отдельно проверяйте значение после очереди.
  • Показывайте примеры в плейсхолдерах — пользователю проще понять формат.
  • Сохраняйте ссылку на задачу, пока нужно значение, поскольку оно хранится внутри InputTask.
  • Для комбинированной проверки (например, email + домен) используйте FuncTask после InputTask, где можете выполнить дополнительные проверки и вывести подсказку.

Связанные материалы

I