@@ -31,13 +31,15 @@ class BrowseParamsViewModel(
3131 when (event) {
3232 ParamBrowserViewEvent .RefreshRequested -> setPath(currentState.currentPath)
3333 is ParamBrowserViewEvent .DirectoryChanged -> onDirectoryChanged(event.dir)
34- is ParamBrowserViewEvent .SearchExpressionChanged -> searchExpression = event.data
34+ is ParamBrowserViewEvent .SearchExpressionChanged -> onSearchExpressionChanged( event.data)
3535 is ParamBrowserViewEvent .ParamClicked -> setEffect {
3636 ParamBrowserViewEffect .NavigateToParamDetails (DomainParamMapper .map(event.param))
3737 }
38+
3839 ParamBrowserViewEvent .DocumentationMenuClicked -> setEffect {
3940 ParamBrowserViewEffect .OpenDocumentationUrl (currentState.docUrl)
4041 }
42+
4143 ParamBrowserViewEvent .FavoritesMenuClicked -> setEffect {
4244 ParamBrowserViewEffect .NavigateToFavorite
4345 }
@@ -107,13 +109,18 @@ class BrowseParamsViewModel(
107109
108110 private suspend fun loadBrowsableParamFiles (path : String ) {
109111 setState { copy(isLoading = true ) }
110- val files = getCurrentPathFiles(path).maybeDirectorySorted().maybeFiltered()
112+ val files = getCurrentPathFiles(path).maybeDirectorySorted()
111113 val params = getParamsFromFilesUseCase(files).map {
112114 DomainParamMapper .map(it)
113115 }
114116
115117 setState {
116- copy(currentPath = path, isLoading = false , data = params)
118+ copy(
119+ currentPath = path,
120+ isLoading = false ,
121+ data = params.filter { param -> byName(param.name, searchExpression) },
122+ totalData = params
123+ )
117124 }
118125 }
119126
@@ -127,17 +134,25 @@ class BrowseParamsViewModel(
127134 }?.toList().orEmpty()
128135 }
129136
130- private suspend fun List<File>?.maybeFiltered () = withContext(dispatcher) {
131- return @withContext this @maybeFiltered?.run {
132- if (searchExpression.isNotEmpty()) {
133- filter { param ->
134- param.name.lowercase()
135- .replace(" ." , " " )
136- .contains(searchExpression.lowercase())
137- }
138- } else {
139- this
140- }
141- }?.toList().orEmpty()
137+ private fun onSearchExpressionChanged (expression : String ) {
138+ searchExpression = expression
139+
140+ setState {
141+ copy(data = this .totalData.filter { kernelParam ->
142+ byName(
143+ kernelParam.name,
144+ searchExpression
145+ )
146+ })
147+ }
148+ }
149+
150+ private fun byName (current : String , expected : String ): Boolean {
151+ if (expected.isEmpty()) {
152+ return true
153+ }
154+ return current.lowercase()
155+ .replace(" ." , " " )
156+ .contains(expected.lowercase())
142157 }
143158}
0 commit comments