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

SingleSelectTask

SingleSelectTask выводит список вариантов и позволяет выбрать ровно один пункт. Подходит для выбора окружения, профиля конфигурации, режима установки и т.д.

Базовый пример

options := []string{
    "development::Среда разработки",
    "staging::Тестовая среда",
    "production::Боевая среда",
}

env := ziva.NewSingleSelectTask("Выбор среды", options)
Скриншот: задача одиночного выбора Добавьте задачу в очередь и прочитайте результат после выполнения:
queue := ziva.NewQueue("Конфигурация")
queue.AddTasks(env)
_ = queue.Run()

fmt.Println("Выбрана среда:", env.GetSelected())

Настройки

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

env.WithDefaultItem("staging") // по строке
env.WithDefaultItem(2)          // по индексу (0-based)

Таймаут

env.WithTimeout(15*time.Second, "production")
Если пользователь не успеет сделать выбор, задача завершится значением по умолчанию.

Viewport и счётчики

env.WithViewport(5, true) // отображать по 5 элементов и счётчик «1/10»
Viewport полезен, если список длинный — пользователь может прокручивать его клавишами //j/k.

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

env.WithItemsDisabled([]string{"maintenance"}) // по значениям
env.WithItemsDisabled([]int{0, 3})              // по индексам
Отключенные пункты отображаются в списке, но выбрать их нельзя.

Настройка подсказок

Разделитель применяется ко всем задачам выбора в приложении.

Работа с результатом

value := env.GetSelected()      // строка
index := env.GetSelectedIndex() // индекс выбранного элемента

Советы

  • Поддерживайте список опций в актуальном состоянии до запуска очереди. После создания задачи менять []string напрямую не нужно.
  • Используйте подсказки, чтобы расшифровывать короткие коды (prod, int, cli).
  • Если нужно предложить нестандартный пункт (например, «Другое»), добавьте отдельную InputTask после SingleSelectTask и показывайте её условно.
  • Для динамических списков генерируйте массив перед созданием задачи; менять его во время работы очереди не получится.

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

I