Skip to content

Commit f798733

Browse files
committed
feat(tui): add selected collection view
1 parent cd91f58 commit f798733

2 files changed

Lines changed: 94 additions & 8 deletions

File tree

internal/tui/app/model.go

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,19 @@ const (
1414
CollectionsViewMode ViewMode = iota
1515
AddCollectionViewMode
1616
EditCollectionViewMode
17+
SelectedCollectionViewMode
1718
)
1819

1920
type Model struct {
20-
ctx *Context
21-
mode ViewMode
22-
collectionsView views.CollectionsView
23-
addCollectionView views.AddCollectionView
24-
editCollectionView views.EditCollectionView
25-
width int
26-
height int
27-
selectedIndex int
21+
ctx *Context
22+
mode ViewMode
23+
collectionsView views.CollectionsView
24+
addCollectionView views.AddCollectionView
25+
editCollectionView views.EditCollectionView
26+
selectedCollectionView views.SelectedCollectionView
27+
width int
28+
height int
29+
selectedIndex int
2830
}
2931

3032
func NewModel(ctx *Context) Model {
@@ -61,6 +63,17 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
6163
m.mode = AddCollectionViewMode
6264
return m, nil
6365
}
66+
case "enter":
67+
if m.mode == CollectionsViewMode {
68+
if selectedItem := m.collectionsView.GetSelectedItem(); selectedItem != nil {
69+
m.selectedIndex = m.collectionsView.GetSelectedIndex()
70+
m.mode = SelectedCollectionViewMode
71+
m.selectedCollectionView = views.NewSelectedCollectionView(m.ctx.Endpoints, *selectedItem)
72+
return m, nil
73+
} else {
74+
log.Error("issue getting currently selected collection")
75+
}
76+
}
6477
case "e":
6578
if m.mode == CollectionsViewMode {
6679
if selectedItem := m.collectionsView.GetSelectedItem(); selectedItem != nil {
@@ -116,6 +129,8 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
116129
m.addCollectionView, cmd = m.addCollectionView.Update(msg)
117130
case EditCollectionViewMode:
118131
m.editCollectionView, cmd = m.editCollectionView.Update(msg)
132+
case SelectedCollectionViewMode:
133+
m.selectedCollectionView, cmd = m.selectedCollectionView.Update(msg)
119134
}
120135

121136
return m, cmd
@@ -129,6 +144,8 @@ func (m Model) View() string {
129144
return m.addCollectionView.View()
130145
case EditCollectionViewMode:
131146
return m.editCollectionView.View()
147+
case SelectedCollectionViewMode:
148+
return m.selectedCollectionView.View()
132149
default:
133150
return m.collectionsView.View()
134151
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package views
2+
3+
import (
4+
tea "github.com/charmbracelet/bubbletea"
5+
"github.com/maniac-en/req/internal/backend/collections"
6+
"github.com/maniac-en/req/internal/backend/endpoints"
7+
"github.com/maniac-en/req/internal/tui/components"
8+
)
9+
10+
type SelectedCollectionView struct {
11+
layout components.Layout
12+
endpointsManager *endpoints.EndpointsManager
13+
collection collections.CollectionEntity
14+
width int
15+
height int
16+
initialized bool
17+
}
18+
19+
func NewSelectedCollectionView(endpointsManager *endpoints.EndpointsManager, collection collections.CollectionEntity) SelectedCollectionView {
20+
return SelectedCollectionView{
21+
layout: components.NewLayout(),
22+
endpointsManager: endpointsManager,
23+
collection: collection,
24+
}
25+
}
26+
27+
func (v SelectedCollectionView) Init() tea.Cmd {
28+
return nil
29+
}
30+
31+
func (v SelectedCollectionView) Update(msg tea.Msg) (SelectedCollectionView, tea.Cmd) {
32+
var cmd tea.Cmd
33+
34+
switch msg := msg.(type) {
35+
case tea.WindowSizeMsg:
36+
v.width = msg.Width
37+
v.height = msg.Height
38+
v.layout.SetSize(v.width, v.height)
39+
v.initialized = true
40+
41+
case tea.KeyMsg:
42+
switch msg.String() {
43+
case "esc", "q":
44+
return v, func() tea.Msg { return BackToCollectionsMsg{} }
45+
}
46+
}
47+
48+
return v, cmd
49+
}
50+
51+
func (v SelectedCollectionView) View() string {
52+
if !v.initialized {
53+
return v.layout.FullView(
54+
"Loading...",
55+
"Initializing collection view...",
56+
"Please wait",
57+
)
58+
}
59+
60+
title := "Collection: " + v.collection.Name
61+
content := "Selected collection view - endpoints will be displayed here"
62+
instructions := "esc/q: back to collections"
63+
64+
return v.layout.FullView(
65+
title,
66+
content,
67+
instructions,
68+
)
69+
}

0 commit comments

Comments
 (0)