11package app
22
33import (
4+ "context"
5+
46 tea "github.com/charmbracelet/bubbletea"
7+ "github.com/maniac-en/req/internal/log"
58 "github.com/maniac-en/req/internal/tui/views"
69)
710
@@ -14,12 +17,13 @@ const (
1417)
1518
1619type Model struct {
17- ctx * Context
18- mode ViewMode
19- collectionsView views.CollectionsView
20- addCollectionView views.AddCollectionView
21- width int
22- height int
20+ ctx * Context
21+ mode ViewMode
22+ collectionsView views.CollectionsView
23+ addCollectionView views.AddCollectionView
24+ editCollectionView views.EditCollectionView
25+ width int
26+ height int
2327}
2428
2529func NewModel (ctx * Context ) Model {
@@ -28,6 +32,7 @@ func NewModel(ctx *Context) Model {
2832 mode : CollectionsViewMode ,
2933 collectionsView : views .NewCollectionsView (ctx .Collections ),
3034 addCollectionView : views .NewAddCollectionView (ctx .Collections ),
35+ // editCollectionView will be created on demand
3136 }
3237}
3338
@@ -42,7 +47,7 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
4247 case tea.KeyMsg :
4348 // Handle global keybinds only when not in filtering mode
4449 isFiltering := m .mode == CollectionsViewMode && m .collectionsView .IsFiltering ()
45-
50+
4651 if ! isFiltering {
4752 switch msg .String () {
4853 case "ctrl+c" , "q" :
@@ -57,6 +62,30 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
5762 m .mode = AddCollectionViewMode
5863 return m , nil
5964 }
65+ case "e" :
66+ if m .mode == CollectionsViewMode {
67+ // Get selected collection and switch to edit mode
68+ if selectedItem := m .collectionsView .GetSelectedItem (); selectedItem != nil {
69+ m .mode = EditCollectionViewMode
70+ m .editCollectionView = views .NewEditCollectionView (m .ctx .Collections , * selectedItem )
71+ return m , nil
72+ } else {
73+ log .Error ("issue getting currently selected collection" )
74+ }
75+ }
76+ case "x" :
77+ if m .mode == CollectionsViewMode {
78+ // Delete selected collection
79+ if selectedItem := m .collectionsView .GetSelectedItem (); selectedItem != nil {
80+ return m , func () tea.Msg {
81+ err := m .ctx .Collections .Delete (context .Background (), selectedItem .ID )
82+ if err != nil {
83+ return views.CollectionDeleteErrorMsg {Err : err }
84+ }
85+ return views.CollectionDeletedMsg {ID : selectedItem .ID }
86+ }
87+ }
88+ }
6089 }
6190 }
6291 case tea.WindowSizeMsg :
@@ -66,6 +95,16 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
6695 m .mode = CollectionsViewMode
6796 // Reload collections to show any changes
6897 return m , m .collectionsView .Init ()
98+ case views.EditCollectionMsg :
99+ m .mode = EditCollectionViewMode
100+ m .editCollectionView = views .NewEditCollectionView (m .ctx .Collections , msg .Collection )
101+ return m , nil
102+ case views.CollectionDeletedMsg :
103+ // Collection deleted, reload collections view
104+ return m , m .collectionsView .Init ()
105+ case views.CollectionDeleteErrorMsg :
106+ // Delete failed, just continue
107+ return m , nil
69108 }
70109
71110 // Forward messages to the appropriate view
@@ -74,8 +113,10 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
74113 m .collectionsView , cmd = m .collectionsView .Update (msg )
75114 case AddCollectionViewMode :
76115 m .addCollectionView , cmd = m .addCollectionView .Update (msg )
116+ case EditCollectionViewMode :
117+ m .editCollectionView , cmd = m .editCollectionView .Update (msg )
77118 }
78-
119+
79120 return m , cmd
80121}
81122
@@ -85,8 +126,9 @@ func (m Model) View() string {
85126 return m .collectionsView .View ()
86127 case AddCollectionViewMode :
87128 return m .addCollectionView .View ()
129+ case EditCollectionViewMode :
130+ return m .editCollectionView .View ()
88131 default :
89132 return m .collectionsView .View ()
90133 }
91134}
92-
0 commit comments