summaryrefslogtreecommitdiffstats
path: root/runtime/ui/viewmodels/tree_view_model.go
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/ui/viewmodels/tree_view_model.go')
-rw-r--r--runtime/ui/viewmodels/tree_view_model.go41
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