package main
import (
"fmt"
"log"
"time"
"github.com/qzeleza/ziva"
)
func main() {
// Создаем очередь задач с заголовком
queue := ziva.NewQueue("Демо приложение Ziva")
// Настраиваем внешний вид
queue.WithAppName("MyApp")
// Добавляем нумерацию задач в очереди
queue.WithTasksNumbered(false, "[%d]")
// Создаем задачи
createTasks(queue)
// Запускаем очередь
if err := queue.Run(); err != nil {
log.Fatal(err)
}
// Выводим результаты
printResults()
}
// Создание задачи
func createTasks(queue *ziva.Queue) {
// 1. Задача подтверждения с таймаутом
confirm := ziva.NewYesNoTask("Подтверждение", "Начать настройку?").
WithTimeout(5*time.Second, "Да")
// 2. Выбор среды
// в виде: имя_пункта_меню||справка_к_пункту_меню
environments := []ziva.Item{
{Key: "development", Name: "development", Description: "Среда разработки"},
{Key: "staging", Name: "staging", Description: "Тестовая среда"},
{Key: "production", Name: "production", Description: "Боевая среда"},
}
// По умолчанию маркер будет указывать на "staging"
env := ziva.NewSingleSelectTask("Выбор среды", environments).
WithDefaultItem("staging")
// 3. Выбор компонентов
components := []ziva.Item{
{Key: "api", Name: "api", Description: "REST API сервер"},
{Key: "web", Name: "web", Description: "Веб интерфейс"},
{Key: "cli", Name: "cli", Description: "Командная строка"},
{Key: "docs", Name: "docs", Description: "Документация"},
}
// Добавляем пункт "Выбрать все"
comp := ziva.NewMultiSelectTask("Компоненты", components).
WithSelectAll("Выбрать все").
WithDefaultItems([]string{"api", "cli"})
// 4. Ввод имени проекта с валидацией
name := ziva.NewInputTask("Имя проекта", "Введите название:").
WithValidator(ziva.DefaultValidators.Required())
// 5. Функциональная задача
setup := ziva.NewFuncTask("Настройка", func() error {
time.Sleep(2 * time.Second) // Имитация работы
return nil
}, ziva.WithSummaryFunction(func() []string {
return []string{"Конфигурация создана", "Проект готов к работе"}
}))
// Добавляем все задачи в очередь
queue.AddTasks(confirm, env, comp, name, setup)
}
func printResults() {
fmt.Println("\n🎉 Приложение завершено!")
fmt.Println("Результаты сохранены в объектах задач.")
}