Skip to main content

Типы задач Ziva

Ziva предоставляет пять готовых типов задач. Каждая из них решает конкретный сценарий пользовательского ввода и интегрируется в очередь без ручного управления состоянием.

YesNoTask

Быстрый бинарный выбор (Да/Нет) с поддержкой таймаута

SingleSelectTask

Выбор одного варианта из списка с подсказками и отключением пунктов

MultiSelectTask

Множественный выбор с пунктом «Выбрать все» и предзаполненными значениями

InputTask

Текстовый ввод с типами полей, таймаутами и встроенной валидацией

FuncTask

Запуск произвольной функции с отображением прогресса и сводки

Общие возможности

Таймауты

Каждая задача поддерживает таймаут с автоматическим значением по умолчанию:
Укажите fallback так, чтобы он соответствовал типу задачи (строка, индекс, []string, bool и т.д.). YesNoTask также предоставляет специальные методы WithTimeoutYes() / WithTimeoutNo().

Подсказки и разделители

В списковых задачах можно добавлять вспомогательный текст через разделитель (по умолчанию ::). Новый разделитель задаётся глобально:

Отключение элементов

SingleSelectTask и MultiSelectTask умеют блокировать пункты по значению, индексу или списку:

Viewport

Для длинных списков ограничьте видимую часть:

Хранение результатов

После queue.Run() данные остаются в объектах задач:
Не пытайтесь читать результаты внутри очереди. Дождитесь окончания Run() и работайте с сохранёнными ссылками на задачи.

Реализация собственного типа задачи

ziva.Task — это алиас интерфейса common.Task. Если встроенных типов недостаточно, можно реализовать его самостоятельно:
Практика показывает, что в большинстве случаев достаточно комбинации стандартных задач и FuncTask для побочных действий.

Шаблон структуры приложения

Лучшие практики

  • Группируйте задачи по смыслу. Пользователю проще пройти несколько небольших очередей, чем одну огромную.
  • Используйте таймауты аккуратно. Всегда выбирайте fallback, безопасный для вашей системы.
  • Показывайте подсказки. Разделитель помогает объяснить значения вроде prod, staging, cli.
  • Не дублируйте вывод. Ziva сам управляет TUI-рендерингом; избегайте fmt.Println внутри задач.
  • Убирайте метку завершения, если она не нужна. Для FuncTask используйте WithoutSuccessLabel() или опцию WithoutSuccessLabelOption(), чтобы скрыть подпись «ГОТОВО».
  • Сохраняйте ссылки на задачи. Это единственный способ получить результаты после завершения очереди.
Продолжайте с подробным описанием конкретных задач в соответствующих разделах.