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:
@ -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("")
|
||||
}
|
||||
|
Reference in New Issue
Block a user