mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-04-27 12:32:37 +02:00
For some lists it is useful to keep the same sort order when filtering (rather than sorting by best match like we usually do). Add an optional function to FilteredList to make this possible, and use it whenever we show lists of things sorted by date (branches, stashes, reflog entries), as well as menu items because this allows us to keep the section headers in the keybindings menu, which is useful for understanding what you are looking at when filtering.
70 lines
1.6 KiB
Go
70 lines
1.6 KiB
Go
package context
|
|
|
|
import (
|
|
"github.com/jesseduffield/lazygit/pkg/commands/models"
|
|
"github.com/jesseduffield/lazygit/pkg/gui/presentation"
|
|
"github.com/jesseduffield/lazygit/pkg/gui/types"
|
|
)
|
|
|
|
type StashContext struct {
|
|
*FilteredListViewModel[*models.StashEntry]
|
|
*ListContextTrait
|
|
}
|
|
|
|
var (
|
|
_ types.IListContext = (*StashContext)(nil)
|
|
_ types.DiffableContext = (*StashContext)(nil)
|
|
)
|
|
|
|
func NewStashContext(
|
|
c *ContextCommon,
|
|
) *StashContext {
|
|
viewModel := NewFilteredListViewModel(
|
|
func() []*models.StashEntry { return c.Model().StashEntries },
|
|
func(stashEntry *models.StashEntry) []string {
|
|
return []string{stashEntry.Name}
|
|
},
|
|
func() bool { return true },
|
|
)
|
|
|
|
getDisplayStrings := func(_ int, _ int) [][]string {
|
|
return presentation.GetStashEntryListDisplayStrings(viewModel.GetItems(), c.Modes().Diffing.Ref)
|
|
}
|
|
|
|
return &StashContext{
|
|
FilteredListViewModel: viewModel,
|
|
ListContextTrait: &ListContextTrait{
|
|
Context: NewSimpleContext(NewBaseContext(NewBaseContextOpts{
|
|
View: c.Views().Stash,
|
|
WindowName: "stash",
|
|
Key: STASH_CONTEXT_KEY,
|
|
Kind: types.SIDE_CONTEXT,
|
|
Focusable: true,
|
|
})),
|
|
ListRenderer: ListRenderer{
|
|
list: viewModel,
|
|
getDisplayStrings: getDisplayStrings,
|
|
},
|
|
c: c,
|
|
},
|
|
}
|
|
}
|
|
|
|
func (self *StashContext) CanRebase() bool {
|
|
return false
|
|
}
|
|
|
|
func (self *StashContext) GetSelectedRef() types.Ref {
|
|
stash := self.GetSelected()
|
|
if stash == nil {
|
|
return nil
|
|
}
|
|
return stash
|
|
}
|
|
|
|
func (self *StashContext) GetDiffTerminals() []string {
|
|
itemId := self.GetSelectedItemId()
|
|
|
|
return []string{itemId}
|
|
}
|