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. "llm",
  12. "text-embedding",
  13. "rerank",
  14. "tts",
  15. "speech2text",
  16. "moderation",
  17. "extension",
  18. }
  19. func newCategory() category {
  20. return category{
  21. // default category is tool
  22. cursor: 0,
  23. }
  24. }
  25. func (c category) Category() string {
  26. return categories[c.cursor]
  27. }
  28. func (c category) View() string {
  29. s := "Select the type of plugin you want to create\n"
  30. for i, category := range categories {
  31. if i == c.cursor {
  32. s += fmt.Sprintf("\033[32m-> %s\033[0m\n", category)
  33. } else {
  34. s += fmt.Sprintf(" %s\n", category)
  35. }
  36. }
  37. return s
  38. }
  39. func (c category) Update(msg tea.Msg) (subMenu, subMenuEvent, tea.Cmd) {
  40. switch msg := msg.(type) {
  41. case tea.KeyMsg:
  42. switch msg.String() {
  43. case "ctrl+c", "q":
  44. return c, SUB_MENU_EVENT_NONE, tea.Quit
  45. case "j", "down":
  46. c.cursor++
  47. if c.cursor >= len(categories) {
  48. c.cursor = len(categories) - 1
  49. }
  50. case "k", "up":
  51. c.cursor--
  52. if c.cursor < 0 {
  53. c.cursor = 0
  54. }
  55. case "enter":
  56. return c, SUB_MENU_EVENT_NEXT, nil
  57. }
  58. }
  59. return c, SUB_MENU_EVENT_NONE, nil
  60. }
  61. func (c category) Init() tea.Cmd {
  62. return nil
  63. }