on main help sign in
fix(ui): dialogs: loop around and scroll list when navigating with up/down keys
155fc61Ayman Bagabas
internal/ui/dialog/commands.go+4−6
@@ -153,19 +153,17 @@ func (c *Commands) HandleMsg(msg tea.Msg) Action {
153 c.list.Focus()
153 c.list.Focus()
154 if c.list.IsSelectedFirst() {
154 if c.list.IsSelectedFirst() {
155 c.list.SelectLast()
155 c.list.SelectLast()
156− c.list.ScrollToBottom()
156+ } else {
157− break
157+ c.list.SelectPrev()
158 }
158 }
159− c.list.SelectPrev()
160 c.list.ScrollToSelected()
159 c.list.ScrollToSelected()
161 case key.Matches(msg, c.keyMap.Next):
160 case key.Matches(msg, c.keyMap.Next):
162 c.list.Focus()
161 c.list.Focus()
163 if c.list.IsSelectedLast() {
162 if c.list.IsSelectedLast() {
164 c.list.SelectFirst()
163 c.list.SelectFirst()
165− c.list.ScrollToTop()
164+ } else {
166− break
165+ c.list.SelectNext()
167 }
166 }
168− c.list.SelectNext()
169 c.list.ScrollToSelected()
167 c.list.ScrollToSelected()
170 case key.Matches(msg, c.keyMap.Select):
168 case key.Matches(msg, c.keyMap.Select):
171 if selectedItem := c.list.SelectedItem(); selectedItem != nil {
169 if selectedItem := c.list.SelectedItem(); selectedItem != nil {
internal/ui/dialog/models.go+4−6
@@ -174,19 +174,17 @@ func (m *Models) HandleMsg(msg tea.Msg) Action {
174 m.list.Focus()
174 m.list.Focus()
175 if m.list.IsSelectedFirst() {
175 if m.list.IsSelectedFirst() {
176 m.list.SelectLast()
176 m.list.SelectLast()
177− m.list.ScrollToBottom()
177+ } else {
178− break
178+ m.list.SelectPrev()
179 }
179 }
180− m.list.SelectPrev()
181 m.list.ScrollToSelected()
180 m.list.ScrollToSelected()
182 case key.Matches(msg, m.keyMap.Next):
181 case key.Matches(msg, m.keyMap.Next):
183 m.list.Focus()
182 m.list.Focus()
184 if m.list.IsSelectedLast() {
183 if m.list.IsSelectedLast() {
185 m.list.SelectFirst()
184 m.list.SelectFirst()
186− m.list.ScrollToTop()
185+ } else {
187− break
186+ m.list.SelectNext()
188 }
187 }
189− m.list.SelectNext()
190 m.list.ScrollToSelected()
188 m.list.ScrollToSelected()
191 case key.Matches(msg, m.keyMap.Select, m.keyMap.Edit):
189 case key.Matches(msg, m.keyMap.Select, m.keyMap.Edit):
192 selectedItem := m.list.SelectedItem()
190 selectedItem := m.list.SelectedItem()
internal/ui/dialog/sessions.go+4−6
@@ -190,19 +190,17 @@ func (s *Session) HandleMsg(msg tea.Msg) Action {
190 s.list.Focus()
190 s.list.Focus()
191 if s.list.IsSelectedFirst() {
191 if s.list.IsSelectedFirst() {
192 s.list.SelectLast()
192 s.list.SelectLast()
193− s.list.ScrollToBottom()
193+ } else {
194− break
194+ s.list.SelectPrev()
195 }
195 }
196− s.list.SelectPrev()
197 s.list.ScrollToSelected()
196 s.list.ScrollToSelected()
198 case key.Matches(msg, s.keyMap.Next):
197 case key.Matches(msg, s.keyMap.Next):
199 s.list.Focus()
198 s.list.Focus()
200 if s.list.IsSelectedLast() {
199 if s.list.IsSelectedLast() {
201 s.list.SelectFirst()
200 s.list.SelectFirst()
202− s.list.ScrollToTop()
201+ } else {
203− break
202+ s.list.SelectNext()
204 }
203 }
205− s.list.SelectNext()
206 s.list.ScrollToSelected()
204 s.list.ScrollToSelected()
207 case key.Matches(msg, s.keyMap.Select):
205 case key.Matches(msg, s.keyMap.Select):
208 if item := s.list.SelectedItem(); item != nil {
206 if item := s.list.SelectedItem(); item != nil {