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

YesNoTask

YesNoTask решает типичный сценарий подтверждения: «Да» или «Нет». Задача построена поверх SingleSelectTask, поэтому наследует часть его возможностей (дефолтные значения, таймауты, подсказки), но скрывает лишние детали.

Создание

task := ziva.NewYesNoTask("Подтверждение", "Запустить обновление?")
Добавьте задачу в очередь и запустите её так же, как любой другой элемент:
queue := ziva.NewQueue("Обновление")
queue.AddTasks(task)
_ = queue.Run()

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

if task.IsYes() {
    fmt.Println("Пользователь подтвердил действие")
}

switch task.GetSelectedOption() {
case ziva.YesOption:
    // логика для "Да"
case ziva.NoOption:
    // логика для "Нет"
}

Значения по умолчанию

Языко-независимые методы

task.WithDefaultYes() // подсветить «Да»
task.WithDefaultNo()  // подсветить «Нет»

Универсальный метод

task.WithDefaultItem(ziva.YesOption)
task.WithDefaultItem(true)          // эквивалентно YesOption
task.WithDefaultItem("Нет")         // строковое совпадение без учёта регистра

Таймауты

task.WithTimeoutYes(5 * time.Second) // через 5 секунд автоматически выбрать «Да»
task.WithTimeoutNo(10 * time.Second) // автоматический «Нет»

// Комбинированные методы
task.WithDefaultYesAndTimeout(3 * time.Second)
task.WithDefaultNoAndTimeout(7 * time.Second)
Если нужен кастомный вариант:
task.WithTimeout(8*time.Second, ziva.NoOption)
task.WithTimeout(8*time.Second, false)
task.WithTimeout(8*time.Second, "да")

Кастомные подписи

task.WithCustomLabels("Продолжить", "Отменить")
Текст кнопок обновляется сразу, поэтому добавляйте кастомные лейблы до передачи задачи в очередь.

Вывод итоговой строки

По умолчанию итоговая строка (с выбранным ответом) выводится под заголовком задачи. Если она мешает компактному выводу, её можно скрыть:
task.WithoutResultLine() // не показывать строку с выбранным ответом

Обработка выбора «Нет»

Стандартное поведение — считать выбор «Нет» условной ошибкой, чтобы итоговая сводка очереди подсветила отказ. При этом очередь не останавливается. Если «Нет» нужно трактовать как успешный вариант, просто отключите это правило:
task.WithNoAsError() // «Нет» больше не считается ошибкой

if task.IsNo() {
    // пользователь отказался, но результат считается успешным
}

Пример: гарантированное подтверждение

func mustConfirm(title, question string, timeout time.Duration) bool {
    confirm := ziva.NewYesNoTask(title, question).
        WithDefaultNo().
        WithTimeoutYes(timeout) // по истечении времени всё равно продолжим

    queue := ziva.NewQueue(title)
    queue.AddTasks(confirm)
    _ = queue.Run()

    return confirm.IsYes()
}

Советы

  • Используйте WithTimeoutYes/No, если интерфейс должен идти дальше без участия пользователя.
  • При смене языка UI (через ziva.SetLanguage) выбирайте языко-независимые методы — строковые значения могут не совпасть.
  • Сохраняйте ссылку на задачу. Результат доступен только после queue.Run().
  • Для повторного запроса создайте новую очередь, чтобы не смешивать вывод.

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

  • SingleSelectTask — общие возможности списковых задач
  • FuncTask — полезно для действий после подтверждения
I