diff options
Diffstat (limited to 'runtime/ui/viewmodels/tree_view_model.go')
-rw-r--r-- | runtime/ui/viewmodels/tree_view_model.go | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/runtime/ui/viewmodels/tree_view_model.go b/runtime/ui/viewmodels/tree_view_model.go index 22ed392..52b35a4 100644 --- a/runtime/ui/viewmodels/tree_view_model.go +++ b/runtime/ui/viewmodels/tree_view_model.go @@ -9,11 +9,12 @@ import ( "github.com/wagoodman/dive/dive/image" ) +//go:generate faux --interface FilterModel --output fakes/fake_filter_model.go type FilterModel interface { SetFilter(r *regexp.Regexp) GetFilter() *regexp.Regexp } - +//go:generate faux --interface LayersModel --output fakes/fake_layers_model.go type LayersModel interface { SetLayerIndex(index int) bool GetCompareIndicies() filetree.TreeIndexKey @@ -23,16 +24,31 @@ type LayersModel interface { SwitchLayerMode() error } +//go:generate faux --interface TreeCache --output fakes/fake_tree_cache.go +type TreeCache interface { + GetTree(key filetree.TreeIndexKey) (TreeModel, error) +} + +//go:generate faux --interface TreeModel --output fakes/fake_tree_model.go +type TreeModel interface { + StringBetween(start, stop int, showAttributes bool) string + VisitDepthParentFirst(visitor filetree.Visitor, evaluator filetree.VisitEvaluator) error + VisitDepthChildFirst(visitor filetree.Visitor, evaluator filetree.VisitEvaluator) error + RemovePath(path string) error + VisibleSize() int + +} + type TreeViewModel struct { - currentTree *filetree.FileTree - cache filetree.Comparer + currentTree TreeModel + cache TreeCache hiddenDiffTypes []bool // Make this an interface that is composed with the FilterView FilterModel LayersModel } -func NewTreeViewModel(cache filetree.Comparer, lModel LayersModel, fModel FilterModel) (*TreeViewModel, error) { +func NewTreeViewModel(cache TreeCache, lModel LayersModel, fModel FilterModel) (*TreeViewModel, error) { curTreeIndex := filetree.NewTreeIndexKey(0, 0, 0, 0) tree, err := cache.GetTree(curTreeIndex) if err != nil { @@ -67,7 +83,7 @@ func (tvm *TreeViewModel) VisibleSize() int { func (tvm *TreeViewModel) SetFilter(filterRegex *regexp.Regexp) { tvm.FilterModel.SetFilter(filterRegex) - if err := tvm.FilterUpdate(); err != nil { + if err := tvm.filterUpdate(); err != nil { panic(err) } } @@ -77,16 +93,15 @@ func (tvm *TreeViewModel) SetFilter(filterRegex *regexp.Regexp) { // TODO: handle errors correctly func (tvm *TreeViewModel) ToggleHiddenFileType(filetype filetree.DiffType) bool { tvm.hiddenDiffTypes[filetype] = !tvm.hiddenDiffTypes[filetype] - if err := tvm.FilterUpdate(); err != nil { + if err := tvm.filterUpdate(); err != nil { //panic(err) return false } return true - } // TODO: maek this method private, cant think of a reason for this to be public -func (tvm *TreeViewModel) FilterUpdate() error { +func (tvm *TreeViewModel) filterUpdate() error { logrus.Debug("Updating filter!!!") // keep the t selection in parity with the current DiffType selection filter := tvm.GetFilter() @@ -100,15 +115,19 @@ func (tvm *TreeViewModel) FilterUpdate() error { } } + if len(node.Children) > 0 { + node.Data.ViewInfo.Hidden = true + } + if filter != nil && !node.Data.ViewInfo.Hidden { // hide nodes that do not match the current file filter regex (also don't unhide nodes that are already hidden) match := filter.FindString(node.Path()) - node.Data.ViewInfo.Hidden = len(match) == 0 + node.Data.ViewInfo.Hidden = len(match) != 0 } return nil }, nil) if err != nil { - logrus.Errorf("unable to propagate t model tree: %+v", err) + logrus.Errorf("error updating filter on current tree: %s", err) return err } @@ -159,7 +178,7 @@ func (tvm *TreeViewModel) setCurrentTree(key filetree.TreeIndexKey) error { } tvm.currentTree = newTree - if err := tvm.FilterUpdate(); err != nil { + if err := tvm.filterUpdate(); err != nil { return err } return nil |