diff --git a/pkg/gui/context/filtered_list.go b/pkg/gui/context/filtered_list.go index 8164cfa16..e8112f95b 100644 --- a/pkg/gui/context/filtered_list.go +++ b/pkg/gui/context/filtered_list.go @@ -12,9 +12,10 @@ import ( type FilteredList[T any] struct { filteredIndices []int // if nil, we are not filtering - getList func() []T - getFilterFields func(T) []string - filter string + getList func() []T + getFilterFields func(T) []string + preprocessFilter func(string) string + filter string mutex deadlock.Mutex } @@ -26,6 +27,10 @@ func NewFilteredList[T any](getList func() []T, getFilterFields func(T) []string } } +func (self *FilteredList[T]) SetPreprocessFilterFunc(preprocessFilter func(string) string) { + self.preprocessFilter = preprocessFilter +} + func (self *FilteredList[T]) GetFilter() string { return self.filter } @@ -79,7 +84,12 @@ func (self *FilteredList[T]) applyFilter(useFuzzySearch bool) { self.mutex.Lock() defer self.mutex.Unlock() - if self.filter == "" { + filter := self.filter + if self.preprocessFilter != nil { + filter = self.preprocessFilter(filter) + } + + if filter == "" { self.filteredIndices = nil } else { source := &fuzzySource[T]{ @@ -87,7 +97,7 @@ func (self *FilteredList[T]) applyFilter(useFuzzySearch bool) { getFilterFields: self.getFilterFields, } - matches := utils.FindFrom(self.filter, source, useFuzzySearch) + matches := utils.FindFrom(filter, source, useFuzzySearch) self.filteredIndices = lo.Map(matches, func(match fuzzy.Match, _ int) int { return match.Index })