github.com/taubyte/tau-cli@v0.1.13-0.20240326000942-487f0d57edfc/prompts/internal/template_select.go (about) 1 package main 2 3 import ( 4 "github.com/pterm/pterm" 5 functionSpec "github.com/taubyte/go-specs/function" 6 smartopsSpec "github.com/taubyte/go-specs/smartops" 7 websiteSpec "github.com/taubyte/go-specs/website" 8 "github.com/taubyte/tau-cli/flags" 9 "github.com/taubyte/tau-cli/prompts" 10 "github.com/taubyte/tau-cli/singletons/templates" 11 "github.com/urfave/cli/v2" 12 ) 13 14 var templateTypeFlag = &cli.StringFlag{ 15 Name: "type", 16 } 17 18 func GetTemplateType(ctx *cli.Context) string { 19 if !ctx.IsSet(templateTypeFlag.Name) { 20 selected, err := prompts.SelectInterface([]string{functionSpec.PathVariable.String(), websiteSpec.PathVariable.String(), smartopsSpec.PathVariable.String()}, "Template type:", "") 21 if err != nil { 22 panic(err) 23 } 24 25 return selected 26 } 27 28 return ctx.String(templateTypeFlag.Name) 29 } 30 31 var TemplateCommand = &cli.Command{ 32 Name: "template_select", 33 Flags: flags.Combine( 34 flags.Template, 35 templateTypeFlag, 36 flags.Language, 37 ), 38 Action: func(ctx *cli.Context) (err error) { 39 var templateMap map[string]templates.TemplateInfo 40 41 switch GetTemplateType(ctx) { 42 case functionSpec.PathVariable.String(): 43 language, err := prompts.GetOrSelectLanguage(ctx) 44 if err != nil { 45 return err 46 } 47 templateMap, err = templates.Get().Function(language) 48 if err != nil { 49 return err 50 } 51 case smartopsSpec.PathVariable.String(): 52 language, err := prompts.GetOrSelectLanguage(ctx) 53 if err != nil { 54 return err 55 } 56 templateMap, err = templates.Get().SmartOps(language) 57 if err != nil { 58 return err 59 } 60 case websiteSpec.PathVariable.String(): 61 templateMap, err = templates.Get().Websites() 62 if err != nil { 63 return err 64 } 65 } 66 67 // New 68 var templateUrl string 69 templateUrl, err = prompts.SelectATemplate(ctx, templateMap) 70 if err != nil { 71 return err 72 } 73 74 // Edit, sending empty cli context so that the flags are not set 75 templateUrl, err = prompts.SelectATemplate(&cli.Context{}, templateMap, templateUrl) 76 if err != nil { 77 return err 78 } 79 80 pterm.Success.Printfln("Got template: `%s`", templateUrl) 81 return nil 82 }, 83 }