summaryrefslogtreecommitdiffstats
path: root/pkg/gui/context/filtered_list_view_model.go
blob: b52fcbc0abb26a49fce325c225c2e476a696ac78 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package context

type FilteredListViewModel[T HasID] struct {
	*FilteredList[T]
	*ListViewModel[T]
	*SearchHistory
}

func NewFilteredListViewModel[T HasID](getList func() []T, getFilterFields func(T) []string, shouldRetainSortOrder func() bool) *FilteredListViewModel[T] {
	filteredList := NewFilteredList(getList, getFilterFields, shouldRetainSortOrder)

	self := &FilteredListViewModel[T]{
		FilteredList:  filteredList,
		SearchHistory: NewSearchHistory(),
	}

	listViewModel := NewListViewModel(filteredList.GetFilteredList)

	self.ListViewModel = listViewModel

	return self
}

// used for type switch
func (self *FilteredListViewModel[T]) IsFilterableContext() {}

func (self *FilteredListViewModel[T]) ClearFilter() {
	// Set the selected line index to the unfiltered index of the currently selected line,
	// so that the current item is still selected after the filter is cleared.
	unfilteredIndex := self.FilteredList.UnfilteredIndex(self.GetSelectedLineIdx())

	self.FilteredList.ClearFilter()

	self.SetSelection(unfilteredIndex)
}