Add hints
This commit is contained in:
parent
0f25186736
commit
de5e4d9efb
28
main.go
28
main.go
|
|
@ -70,10 +70,12 @@ type MenuItem struct {
|
|||
Catch []string `yaml:"catch,omitempty"`
|
||||
Vars []string `yaml:"vars,omitempty"`
|
||||
Env string `yaml:"env,omitempty"`
|
||||
Hint string `yaml:"hint,omitempty"` // Добавляем hint в MenuItem
|
||||
}
|
||||
|
||||
// Menu управляет отображением меню
|
||||
type Menu struct {
|
||||
hint string
|
||||
items map[int]MenuItem
|
||||
variables *Variables
|
||||
baseDir string
|
||||
|
|
@ -82,7 +84,6 @@ type Menu struct {
|
|||
// NewMenu инициализирует меню из YAML
|
||||
func NewMenu(yamlFile string) *Menu {
|
||||
currDir, _ := os.Getwd()
|
||||
// baseDir := filepath.Join(currDir, "menu") // Базовая директория меню
|
||||
baseDir := currDir
|
||||
yamlPath := resolvePath(baseDir, yamlFile)
|
||||
|
||||
|
|
@ -94,16 +95,18 @@ func NewMenu(yamlFile string) *Menu {
|
|||
defer file.Close()
|
||||
|
||||
decoder := yaml.NewDecoder(file)
|
||||
var menu struct {
|
||||
var menuData struct {
|
||||
Hint string `yaml:"hint,omitempty"` // Добавляем поле hint
|
||||
Items map[int]MenuItem `yaml:"items"`
|
||||
}
|
||||
|
||||
if err := decoder.Decode(&menu); err != nil {
|
||||
if err := decoder.Decode(&menuData); err != nil {
|
||||
log.Fatalf("Ошибка парсинга YAML: %v", err)
|
||||
}
|
||||
|
||||
return &Menu{
|
||||
items: menu.Items,
|
||||
hint: menuData.Hint,
|
||||
items: menuData.Items,
|
||||
variables: NewVariables("env.ini"),
|
||||
baseDir: baseDir,
|
||||
}
|
||||
|
|
@ -127,6 +130,14 @@ func resolvePath(baseDir, yamlFile string) string {
|
|||
|
||||
// ShowItems отображает главное меню
|
||||
func (m *Menu) ShowItems() {
|
||||
// Выводим подсказку, если она есть
|
||||
if m.hint != "" {
|
||||
fmt.Println(m.hint)
|
||||
// fmt.Println() // Пустая строка после подсказки
|
||||
} else {
|
||||
fmt.Println()
|
||||
}
|
||||
|
||||
fmt.Println("0. Выход")
|
||||
|
||||
// Извлекаем ключи из мапы
|
||||
|
|
@ -149,6 +160,7 @@ func (m *Menu) Loop() {
|
|||
|
||||
for {
|
||||
m.ShowItems()
|
||||
fmt.Print("\n")
|
||||
fmt.Print("Выберите действие: ")
|
||||
input, _ := reader.ReadString('\n')
|
||||
input = strings.TrimSpace(input)
|
||||
|
|
@ -180,7 +192,13 @@ func (m *Menu) ChooseItem(itemNum int) {
|
|||
subMenu := NewMenu(filePath)
|
||||
subMenu.Loop()
|
||||
} else if len(item.Items) > 0 {
|
||||
subMenu := &Menu{items: item.Items, variables: m.variables, baseDir: m.baseDir}
|
||||
// Создаем подменю из вложенных items
|
||||
subMenu := &Menu{
|
||||
hint: item.Hint, // Используем hint из MenuItem
|
||||
items: item.Items,
|
||||
variables: m.variables,
|
||||
baseDir: m.baseDir,
|
||||
}
|
||||
subMenu.Loop()
|
||||
} else if len(item.Commands) > 0 {
|
||||
vars := m.getVars(item, true)
|
||||
|
|
|
|||
|
|
@ -1,3 +1,12 @@
|
|||
hint: |
|
||||
|
||||
/======================================\
|
||||
| ************************************ |
|
||||
| * МЕНЮ УПРАВЛЕНИЯ СИСТЕМОЙ * |
|
||||
| * ver. 1.0.0 (2024) * |
|
||||
| ************************************ |
|
||||
\======================================/
|
||||
|
||||
items:
|
||||
1:
|
||||
title: '1. Build'
|
||||
|
|
@ -38,9 +47,10 @@ items:
|
|||
title: '5. Stop'
|
||||
env: 'dev'
|
||||
commands:
|
||||
- 'docker-compose --project-name %(appName)s --file conf/docker/docker-compose_dev.yml stop'
|
||||
- 'sleep 3'
|
||||
- 'docker network rm dockernet'
|
||||
- 'docker stop $(docker ps -q)'
|
||||
# - 'docker-compose --project-name %(appName)s --file conf/docker/docker-compose_dev.yml stop'
|
||||
# - 'sleep 3'
|
||||
# - 'docker network rm dockernet'
|
||||
vars:
|
||||
- appName
|
||||
6:
|
||||
|
|
|
|||
|
|
@ -1,3 +1,12 @@
|
|||
hint: |
|
||||
|
||||
/======================================\
|
||||
| ************************************ |
|
||||
| * МЕНЮ УПРАВЛЕНИЯ СИСТЕМОЙ * |
|
||||
| * ver. 1.0.0 (2024) * |
|
||||
| ************************************ |
|
||||
\======================================/
|
||||
|
||||
items:
|
||||
1:
|
||||
title: '1. Develop'
|
||||
|
|
|
|||
Loading…
Reference in New Issue