@@ -2,6 +2,7 @@ package dialog
22
33import (
44 "fmt"
5+ "slices"
56 "strings"
67 "time"
78
@@ -29,6 +30,7 @@ type sessionBrowserKeyMap struct {
2930 Star key.Binding
3031 FilterStar key.Binding
3132 CopyID key.Binding
33+ Delete key.Binding
3234}
3335
3436// Session browser dialog dimension constants
@@ -82,6 +84,7 @@ func NewSessionBrowserDialog(sessions []session.Summary) Dialog {
8284 Star : key .NewBinding (key .WithKeys ("ctrl+s" )),
8385 FilterStar : key .NewBinding (key .WithKeys ("ctrl+f" )),
8486 CopyID : key .NewBinding (key .WithKeys ("ctrl+y" )),
87+ Delete : key .NewBinding (key .WithKeys ("ctrl+d" )),
8588 },
8689 openedAt : time .Now (),
8790 }
@@ -195,6 +198,17 @@ func (d *sessionBrowserDialog) Update(msg tea.Msg) (layout.Model, tea.Cmd) {
195198 }
196199 return d , nil
197200
201+ case key .Matches (msg , d .keyMap .Delete ):
202+ if d .selected >= 0 && d .selected < len (d .filtered ) {
203+ sessionID := d .filtered [d .selected ].ID
204+ d .sessions = slices .DeleteFunc (d .sessions , func (s session.Summary ) bool {
205+ return s .ID == sessionID
206+ })
207+ d .filterSessions ()
208+ return d , core .CmdHandler (messages.DeleteSessionMsg {SessionID : sessionID })
209+ }
210+ return d , nil
211+
198212 default :
199213 var cmd tea.Cmd
200214 d .textInput , cmd = d .textInput .Update (msg )
@@ -333,7 +347,8 @@ func (d *sessionBrowserDialog) View() string {
333347 AddSeparator ().
334348 AddContent (idFooter ).
335349 AddSpace ().
336- AddHelpKeys ("↑/↓" , "navigate" , "ctrl+s" , "star" , "ctrl+f" , filterDesc , "ctrl+y" , "copy id" , "enter" , "load" , "esc" , "close" ).
350+ AddHelpKeys ("↑/↓" , "navigate" , "ctrl+s" , "star" , "ctrl+f" , filterDesc , "ctrl+y" , "copy id" , "ctrl+d" , "delete" ).
351+ AddHelpKeys ("enter" , "load" , "esc" , "close" ).
337352 Build ()
338353
339354 return styles .DialogStyle .Width (dialogWidth ).Render (content )
0 commit comments