summaryrefslogtreecommitdiffstats
path: root/pkg/gui/custom_commands.go
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2020-09-26 21:47:01 +1000
committerJesse Duffield <jessedduffield@gmail.com>2020-09-27 09:49:30 +1000
commite7210dd249d9196b419153e57c60597777bc5010 (patch)
tree3be477357a4e8c006519031306ab5c0e91dea523 /pkg/gui/custom_commands.go
parent7d39cc75b2f0b5e4feb4ee8c66f851dfc6aeb709 (diff)
better template support for menus and prompts
Diffstat (limited to 'pkg/gui/custom_commands.go')
-rw-r--r--pkg/gui/custom_commands.go65
1 files changed, 49 insertions, 16 deletions
diff --git a/pkg/gui/custom_commands.go b/pkg/gui/custom_commands.go
index d74a721e0..2e43e9892 100644
--- a/pkg/gui/custom_commands.go
+++ b/pkg/gui/custom_commands.go
@@ -88,13 +88,25 @@ func (gui *Gui) handleCustomCommandKeybinding(customCommand CustomCommand) func(
// going backwards so the outermost prompt is the first one
prompt := customCommand.Prompts[idx]
- wrappedF := f // need to do this because f's value will change with each iteration
+ // need to do this because f's value will change with each iteration
+ wrappedF := f
+
switch prompt.Type {
case "prompt":
f = func() error {
+ title, err := gui.resolveTemplate(prompt.Title, promptResponses)
+ if err != nil {
+ return gui.surfaceError(err)
+ }
+
+ initialValue, err := gui.resolveTemplate(prompt.InitialValue, promptResponses)
+ if err != nil {
+ return gui.surfaceError(err)
+ }
+
return gui.prompt(
- prompt.Title,
- prompt.InitialValue,
+ title,
+ initialValue,
func(str string) error {
promptResponses[idx] = str
@@ -103,22 +115,43 @@ func (gui *Gui) handleCustomCommandKeybinding(customCommand CustomCommand) func(
)
}
case "menu":
- // need to make a menu here some how
- menuItems := make([]*menuItem, len(prompt.Options))
- for i, option := range prompt.Options {
- option := option
- menuItems[i] = &menuItem{
- displayStrings: []string{option.Name, option.Description},
- onPress: func() error {
- promptResponses[idx] = option.Value
+ f = func() error {
+ // need to make a menu here some how
+ menuItems := make([]*menuItem, len(prompt.Options))
+ for i, option := range prompt.Options {
+ option := option
+
+ name, err := gui.resolveTemplate(option.Name, promptResponses)
+ if err != nil {
+ return gui.surfaceError(err)
+ }
+
+ description, err := gui.resolveTemplate(option.Description, promptResponses)
+ if err != nil {
+ return gui.surfaceError(err)
+ }
+
+ value, err := gui.resolveTemplate(option.Value, promptResponses)
+ if err != nil {
+ return gui.surfaceError(err)
+ }
+
+ menuItems[i] = &menuItem{
+ displayStrings: []string{name, description},
+ onPress: func() error {
+ promptResponses[idx] = value
+
+ return wrappedF()
+ },
+ }
+ }
- return wrappedF()
- },
+ title, err := gui.resolveTemplate(prompt.Title, promptResponses)
+ if err != nil {
+ return gui.surfaceError(err)
}
- }
- f = func() error {
- return gui.createMenu(prompt.Title, menuItems, createMenuOptions{showCancel: true})
+ return gui.createMenu(title, menuItems, createMenuOptions{showCancel: true})
}
default:
return gui.createErrorPanel("custom command prompt must have a type of 'prompt' or 'menu'")