1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-07-30 03:23:08 +03:00

Support filtering files

This commit is contained in:
Jesse Duffield
2023-05-27 19:58:48 +10:00
parent 84870d4503
commit 13326344f0
9 changed files with 72 additions and 19 deletions

View File

@ -9,20 +9,30 @@ import (
)
type WorkingTreeContext struct {
*FilteredList[*models.File]
*filetree.FileTreeViewModel
*ListContextTrait
}
var _ types.IListContext = (*WorkingTreeContext)(nil)
var (
_ types.IListContext = (*WorkingTreeContext)(nil)
_ types.IFilterableContext = (*WorkingTreeContext)(nil)
)
func NewWorkingTreeContext(c *ContextCommon) *WorkingTreeContext {
viewModel := filetree.NewFileTreeViewModel(
filteredList := NewFilteredList(
func() []*models.File { return c.Model().Files },
func(file *models.File) []string { return []string{file.GetPath()} },
)
viewModel := filetree.NewFileTreeViewModel(
func() []*models.File { return filteredList.GetFilteredList() },
c.Log,
c.UserConfig.Gui.ShowFileTree,
)
getDisplayStrings := func(startIdx int, length int) [][]string {
c.Log.Warn("in get display strings")
lines := presentation.RenderFileTree(viewModel, c.Modes().Diffing.Ref, c.Model().Submodules)
return slices.Map(lines, func(line string) []string {
return []string{line}
@ -30,6 +40,7 @@ func NewWorkingTreeContext(c *ContextCommon) *WorkingTreeContext {
}
return &WorkingTreeContext{
FilteredList: filteredList,
FileTreeViewModel: viewModel,
ListContextTrait: &ListContextTrait{
Context: NewSimpleContext(NewBaseContext(NewBaseContextOpts{
@ -54,3 +65,17 @@ func (self *WorkingTreeContext) GetSelectedItemId() string {
return item.ID()
}
// used for type switch
func (self *WorkingTreeContext) IsFilterableContext() {}
// TODO: see if we can just call SetTree() within HandleRender(). It doesn't seem
// right that we need to imperatively refresh the view model like this
func (self *WorkingTreeContext) SetFilter(filter string) {
self.FilteredList.SetFilter(filter)
self.SetTree()
}
func (self *WorkingTreeContext) ClearFilter() {
self.SetFilter("")
}