|
1 | 1 | package app |
2 | 2 |
|
3 | 3 | import ( |
4 | | - "context" |
5 | | - |
6 | 4 | tea "github.com/charmbracelet/bubbletea" |
7 | | - "github.com/maniac-en/req/internal/log" |
8 | | - "github.com/maniac-en/req/internal/tui/views" |
9 | 5 | ) |
10 | 6 |
|
11 | | -type ViewMode int |
12 | | - |
13 | | -const ( |
14 | | - CollectionsViewMode ViewMode = iota |
15 | | - AddCollectionViewMode |
16 | | - EditCollectionViewMode |
17 | | - SelectedCollectionViewMode |
18 | | -) |
19 | | - |
20 | | -type Model struct { |
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 |
30 | | -} |
31 | | - |
32 | | -func NewModel(ctx *Context) Model { |
33 | | - collectionsView := views.NewCollectionsView(ctx.Collections) |
34 | | - if ctx.DummyDataCreated { |
35 | | - collectionsView.SetDummyDataNotification(true) |
36 | | - } |
37 | | - |
38 | | - m := Model{ |
39 | | - ctx: ctx, |
40 | | - mode: CollectionsViewMode, |
41 | | - collectionsView: collectionsView, |
42 | | - addCollectionView: views.NewAddCollectionView(ctx.Collections), |
43 | | - } |
44 | | - return m |
| 7 | +type AppModel struct { |
| 8 | + width int |
| 9 | + height int |
45 | 10 | } |
46 | 11 |
|
47 | | -func (m Model) Init() tea.Cmd { |
48 | | - return m.collectionsView.Init() |
| 12 | +func (a AppModel) Init() tea.Cmd { |
| 13 | + return nil |
49 | 14 | } |
50 | 15 |
|
51 | | -func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { |
52 | | - var cmd tea.Cmd |
53 | | - |
| 16 | +func (a AppModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { |
54 | 17 | switch msg := msg.(type) { |
55 | | - case tea.KeyMsg: |
56 | | - isFiltering := m.mode == CollectionsViewMode && m.collectionsView.IsFiltering() |
57 | | - |
58 | | - if !isFiltering { |
59 | | - switch msg.String() { |
60 | | - case "ctrl+c", "q": |
61 | | - if m.mode == CollectionsViewMode { |
62 | | - return m, tea.Quit |
63 | | - } |
64 | | - m.mode = CollectionsViewMode |
65 | | - return m, nil |
66 | | - case "a": |
67 | | - if m.mode == CollectionsViewMode { |
68 | | - m.selectedIndex = m.collectionsView.GetSelectedIndex() |
69 | | - m.mode = AddCollectionViewMode |
70 | | - if m.width > 0 && m.height > 0 { |
71 | | - sizeMsg := tea.WindowSizeMsg{Width: m.width, Height: m.height} |
72 | | - m.addCollectionView, _ = m.addCollectionView.Update(sizeMsg) |
73 | | - } |
74 | | - return m, nil |
75 | | - } |
76 | | - case "enter": |
77 | | - if m.mode == CollectionsViewMode { |
78 | | - if selectedItem := m.collectionsView.GetSelectedItem(); selectedItem != nil { |
79 | | - m.selectedIndex = m.collectionsView.GetSelectedIndex() |
80 | | - m.mode = SelectedCollectionViewMode |
81 | | - if m.width > 0 && m.height > 0 { |
82 | | - m.selectedCollectionView = views.NewSelectedCollectionViewWithSize(m.ctx.Endpoints, m.ctx.HTTP, *selectedItem, m.width, m.height) |
83 | | - } else { |
84 | | - m.selectedCollectionView = views.NewSelectedCollectionView(m.ctx.Endpoints, m.ctx.HTTP, *selectedItem) |
85 | | - } |
86 | | - return m, m.selectedCollectionView.Init() |
87 | | - } else { |
88 | | - log.Error("issue getting currently selected collection") |
89 | | - } |
90 | | - } |
91 | | - case "e": |
92 | | - if m.mode == CollectionsViewMode { |
93 | | - if selectedItem := m.collectionsView.GetSelectedItem(); selectedItem != nil { |
94 | | - m.selectedIndex = m.collectionsView.GetSelectedIndex() |
95 | | - m.mode = EditCollectionViewMode |
96 | | - m.editCollectionView = views.NewEditCollectionView(m.ctx.Collections, *selectedItem) |
97 | | - if m.width > 0 && m.height > 0 { |
98 | | - sizeMsg := tea.WindowSizeMsg{Width: m.width, Height: m.height} |
99 | | - m.editCollectionView, _ = m.editCollectionView.Update(sizeMsg) |
100 | | - } |
101 | | - return m, nil |
102 | | - } else { |
103 | | - log.Error("issue getting currently selected collection") |
104 | | - } |
105 | | - } |
106 | | - case "x": |
107 | | - if m.mode == CollectionsViewMode { |
108 | | - if selectedItem := m.collectionsView.GetSelectedItem(); selectedItem != nil { |
109 | | - return m, func() tea.Msg { |
110 | | - err := m.ctx.Collections.Delete(context.Background(), selectedItem.ID) |
111 | | - if err != nil { |
112 | | - return views.CollectionDeleteErrorMsg{Err: err} |
113 | | - } |
114 | | - return views.CollectionDeletedMsg{ID: selectedItem.ID} |
115 | | - } |
116 | | - } |
117 | | - } |
118 | | - } |
119 | | - } |
120 | 18 | case tea.WindowSizeMsg: |
121 | | - m.width = msg.Width |
122 | | - m.height = msg.Height |
123 | | - if m.mode == CollectionsViewMode && !m.collectionsView.IsInitialized() { |
124 | | - m.collectionsView = views.NewCollectionsViewWithSize(m.ctx.Collections, m.width, m.height) |
125 | | - if m.ctx.DummyDataCreated { |
126 | | - m.collectionsView.SetDummyDataNotification(true) |
127 | | - } |
128 | | - return m, m.collectionsView.Init() |
129 | | - } |
130 | | - if m.mode == CollectionsViewMode { |
131 | | - m.collectionsView, _ = m.collectionsView.Update(msg) |
132 | | - } |
133 | | - case views.BackToCollectionsMsg: |
134 | | - m.mode = CollectionsViewMode |
135 | | - if m.width > 0 && m.height > 0 { |
136 | | - m.collectionsView = views.NewCollectionsViewWithSize(m.ctx.Collections, m.width, m.height) |
137 | | - if m.ctx.DummyDataCreated { |
138 | | - m.collectionsView.SetDummyDataNotification(true) |
139 | | - } |
| 19 | + a.height = msg.Height |
| 20 | + a.width = msg.Width |
| 21 | + case tea.KeyMsg: |
| 22 | + switch msg.String() { |
| 23 | + case "ctrl+c": |
| 24 | + return a, tea.Quit |
140 | 25 | } |
141 | | - m.collectionsView.SetSelectedIndex(m.selectedIndex) |
142 | | - return m, m.collectionsView.Init() |
143 | | - case views.EditCollectionMsg: |
144 | | - m.mode = EditCollectionViewMode |
145 | | - m.editCollectionView = views.NewEditCollectionView(m.ctx.Collections, msg.Collection) |
146 | | - return m, nil |
147 | | - case views.CollectionDeletedMsg: |
148 | | - return m, m.collectionsView.Init() |
149 | | - case views.CollectionDeleteErrorMsg: |
150 | | - return m, nil |
151 | | - case views.CollectionCreatedMsg: |
152 | | - m.addCollectionView.ClearForm() |
153 | | - m.mode = CollectionsViewMode |
154 | | - m.selectedIndex = 0 |
155 | | - m.collectionsView.SetSelectedIndex(m.selectedIndex) |
156 | | - return m, m.collectionsView.Init() |
157 | | - } |
158 | | - |
159 | | - switch m.mode { |
160 | | - case CollectionsViewMode: |
161 | | - m.collectionsView, cmd = m.collectionsView.Update(msg) |
162 | | - case AddCollectionViewMode: |
163 | | - m.addCollectionView, cmd = m.addCollectionView.Update(msg) |
164 | | - case EditCollectionViewMode: |
165 | | - m.editCollectionView, cmd = m.editCollectionView.Update(msg) |
166 | | - case SelectedCollectionViewMode: |
167 | | - m.selectedCollectionView, cmd = m.selectedCollectionView.Update(msg) |
168 | 26 | } |
| 27 | + return a, nil |
| 28 | +} |
169 | 29 |
|
170 | | - return m, cmd |
| 30 | +func (a AppModel) View() string { |
| 31 | + return "Hello World" |
171 | 32 | } |
172 | 33 |
|
173 | | -func (m Model) View() string { |
174 | | - switch m.mode { |
175 | | - case CollectionsViewMode: |
176 | | - return m.collectionsView.View() |
177 | | - case AddCollectionViewMode: |
178 | | - return m.addCollectionView.View() |
179 | | - case EditCollectionViewMode: |
180 | | - return m.editCollectionView.View() |
181 | | - case SelectedCollectionViewMode: |
182 | | - return m.selectedCollectionView.View() |
183 | | - default: |
184 | | - return m.collectionsView.View() |
185 | | - } |
| 34 | +func NewAppModel() AppModel { |
| 35 | + return AppModel{} |
186 | 36 | } |
0 commit comments