67 lines
1.7 KiB
Go
67 lines
1.7 KiB
Go
package main
|
||
|
||
import (
|
||
"fmt"
|
||
"strings"
|
||
|
||
"github.com/manifoldco/promptui"
|
||
)
|
||
|
||
type pepper struct {
|
||
Name string
|
||
HeatUnit int
|
||
Peppers int
|
||
}
|
||
|
||
func main() {
|
||
peppers := []pepper{
|
||
{Name: "Bell Pepper", HeatUnit: 0, Peppers: 0},
|
||
{Name: "Banana Pepper", HeatUnit: 100, Peppers: 1},
|
||
{Name: "Poblano", HeatUnit: 1000, Peppers: 2},
|
||
{Name: "Jalapeño", HeatUnit: 3500, Peppers: 3},
|
||
{Name: "Aleppo", HeatUnit: 10000, Peppers: 4},
|
||
{Name: "Tabasco", HeatUnit: 30000, Peppers: 5},
|
||
{Name: "Malagueta", HeatUnit: 50000, Peppers: 6},
|
||
{Name: "Habanero", HeatUnit: 100000, Peppers: 7},
|
||
{Name: "Red Savina Habanero", HeatUnit: 350000, Peppers: 8},
|
||
{Name: "Dragon’s Breath", HeatUnit: 855000, Peppers: 9},
|
||
}
|
||
|
||
templates := &promptui.SelectTemplates{
|
||
Label: "{{ . }}?",
|
||
Active: "\U0001F336 {{ .Name | cyan }} ({{ .HeatUnit | red }})",
|
||
Inactive: " {{ .Name | cyan }} ({{ .HeatUnit | red }})",
|
||
Selected: "\U0001F336 {{ .Name | red | cyan }}",
|
||
Details: `
|
||
--------- Pepper ----------
|
||
{{ "Name:" | faint }} {{ .Name }}/
|
||
{{ "Heat Unit:" | faint }} {{ .HeatUnit }}
|
||
{{ "Peppers:" | faint }} {{ .Peppers }}`,
|
||
}
|
||
|
||
searcher := func(input string, index int) bool {
|
||
pepper := peppers[index]
|
||
name := strings.Replace(strings.ToLower(pepper.Name), " ", "", -1)
|
||
input = strings.Replace(strings.ToLower(input), " ", "", -1)
|
||
|
||
return strings.Contains(name, input)
|
||
}
|
||
|
||
prompt := promptui.Select{
|
||
Label: "Spicy Level",
|
||
Items: peppers,
|
||
Templates: templates,
|
||
Size: 4,
|
||
Searcher: searcher,
|
||
}
|
||
|
||
i, _, err := prompt.Run()
|
||
|
||
if err != nil {
|
||
fmt.Printf("Prompt failed %v\n", err)
|
||
return
|
||
}
|
||
|
||
fmt.Printf("You choose number %d: %s\n", i+1, peppers[i].Name)
|
||
}
|