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  }