category.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package init
  2. import (
  3. "fmt"
  4. tea "github.com/charmbracelet/bubbletea"
  5. )
  6. type category struct {
  7. cursor int
  8. }
  9. var categories = []string{
  10. "tool",
  11. "model",
  12. "extension",
  13. }
  14. func newCategory() category {
  15. return category{
  16. // default category is tool
  17. cursor: 0,
  18. }
  19. }
  20. func (c category) Category() string {
  21. return categories[c.cursor]
  22. }
  23. func (c category) View() string {
  24. s := "Select the type of plugin you want to create\n"
  25. for i, category := range categories {
  26. if i == c.cursor {
  27. s += fmt.Sprintf("\033[32m-> %s\033[0m\n", category)
  28. } else {
  29. s += fmt.Sprintf(" %s\n", category)
  30. }
  31. }
  32. return s
  33. }
  34. func (c category) Update(msg tea.Msg) (subMenu, subMenuEvent, tea.Cmd) {
  35. switch msg := msg.(type) {
  36. case tea.KeyMsg:
  37. switch msg.String() {
  38. case "ctrl+c", "q":
  39. return c, SUB_MENU_EVENT_NONE, tea.Quit
  40. case "j", "down":
  41. c.cursor++
  42. if c.cursor >= len(categories) {
  43. c.cursor = len(categories) - 1
  44. }
  45. case "k", "up":
  46. c.cursor--
  47. if c.cursor < 0 {
  48. c.cursor = 0
  49. }
  50. case "enter":
  51. if c.cursor != 0 {
  52. c.cursor = 0
  53. return c, SUB_MENU_EVENT_NONE, nil
  54. }
  55. return c, SUB_MENU_EVENT_NEXT, nil
  56. }
  57. }
  58. return c, SUB_MENU_EVENT_NONE, nil
  59. }
  60. func (c category) Init() tea.Cmd {
  61. return nil
  62. }