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.
88 lines
2.2 KiB
Go
88 lines
2.2 KiB
Go
package context
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/jesseduffield/lazygit/pkg/commands/models"
|
|
"github.com/jesseduffield/lazygit/pkg/gui/presentation"
|
|
"github.com/jesseduffield/lazygit/pkg/gui/types"
|
|
)
|
|
|
|
type ReflogCommitsContext struct {
|
|
*FilteredListViewModel[*models.Commit]
|
|
*ListContextTrait
|
|
}
|
|
|
|
var (
|
|
_ types.IListContext = (*ReflogCommitsContext)(nil)
|
|
_ types.DiffableContext = (*ReflogCommitsContext)(nil)
|
|
)
|
|
|
|
func NewReflogCommitsContext(c *ContextCommon) *ReflogCommitsContext {
|
|
viewModel := NewFilteredListViewModel(
|
|
func() []*models.Commit { return c.Model().FilteredReflogCommits },
|
|
func(commit *models.Commit) []string {
|
|
return []string{commit.ShortSha(), commit.Name}
|
|
},
|
|
func() bool { return true },
|
|
)
|
|
|
|
getDisplayStrings := func(_ int, _ int) [][]string {
|
|
return presentation.GetReflogCommitListDisplayStrings(
|
|
viewModel.GetItems(),
|
|
c.State().GetRepoState().GetScreenMode() != types.SCREEN_NORMAL,
|
|
c.Modes().CherryPicking.SelectedShaSet(),
|
|
c.Modes().Diffing.Ref,
|
|
time.Now(),
|
|
c.UserConfig.Gui.TimeFormat,
|
|
c.UserConfig.Gui.ShortTimeFormat,
|
|
c.UserConfig.Git.ParseEmoji,
|
|
)
|
|
}
|
|
|
|
return &ReflogCommitsContext{
|
|
FilteredListViewModel: viewModel,
|
|
ListContextTrait: &ListContextTrait{
|
|
Context: NewSimpleContext(NewBaseContext(NewBaseContextOpts{
|
|
View: c.Views().ReflogCommits,
|
|
WindowName: "commits",
|
|
Key: REFLOG_COMMITS_CONTEXT_KEY,
|
|
Kind: types.SIDE_CONTEXT,
|
|
Focusable: true,
|
|
NeedsRerenderOnWidthChange: true,
|
|
})),
|
|
ListRenderer: ListRenderer{
|
|
list: viewModel,
|
|
getDisplayStrings: getDisplayStrings,
|
|
},
|
|
c: c,
|
|
},
|
|
}
|
|
}
|
|
|
|
func (self *ReflogCommitsContext) CanRebase() bool {
|
|
return false
|
|
}
|
|
|
|
func (self *ReflogCommitsContext) GetSelectedRef() types.Ref {
|
|
commit := self.GetSelected()
|
|
if commit == nil {
|
|
return nil
|
|
}
|
|
return commit
|
|
}
|
|
|
|
func (self *ReflogCommitsContext) GetCommits() []*models.Commit {
|
|
return self.getModel()
|
|
}
|
|
|
|
func (self *ReflogCommitsContext) GetDiffTerminals() []string {
|
|
itemId := self.GetSelectedItemId()
|
|
|
|
return []string{itemId}
|
|
}
|
|
|
|
func (self *ReflogCommitsContext) ShowBranchHeadsInSubCommits() bool {
|
|
return false
|
|
}
|