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()
.
- Для повторного запроса создайте новую очередь, чтобы не смешивать вывод.
Связанные материалы