function Find-AppsByNameOrDescription { <# .SYNOPSIS Searches through the Apps on the Install Tab and hides all entries that do not match the string .PARAMETER SearchString The string to be searched for #> param( [Parameter(Mandatory=$false)] [string]$SearchString = "" ) # Reset the visibility if the search string is empty or the search is cleared if ([string]::IsNullOrWhiteSpace($SearchString)) { $sync.ItemsControl.Items | ForEach-Object { # Each item is a StackPanel container $_.Visibility = [Windows.Visibility]::Visible if ($_.Children.Count -ge 2) { $categoryLabel = $_.Children[0] $wrapPanel = $_.Children[1] # Keep category label visible $categoryLabel.Visibility = [Windows.Visibility]::Visible # Respect the collapsed state of categories (indicated by + prefix) if ($categoryLabel.Content -like "+*") { $wrapPanel.Visibility = [Windows.Visibility]::Collapsed } else { $wrapPanel.Visibility = [Windows.Visibility]::Visible } # Show all apps within the category $wrapPanel.Children | ForEach-Object { $_.Visibility = [Windows.Visibility]::Visible } } } return } # Perform search $sync.ItemsControl.Items | ForEach-Object { # Each item is a StackPanel container with Children[0] = label, Children[1] = WrapPanel if ($_.Children.Count -ge 2) { $categoryLabel = $_.Children[0] $wrapPanel = $_.Children[1] $categoryHasMatch = $false # Keep category label visible $categoryLabel.Visibility = [Windows.Visibility]::Visible # Search through apps in this category $wrapPanel.Children | ForEach-Object { $appEntry = $sync.configs.applicationsHashtable.$($_.Tag) if ($appEntry.Content -like "*$SearchString*" -or $appEntry.Description -like "*$SearchString*") { # Show the App and mark that this category has a match $_.Visibility = [Windows.Visibility]::Visible $categoryHasMatch = $true } else { $_.Visibility = [Windows.Visibility]::Collapsed } } # If category has matches, show the WrapPanel and update the category label to expanded state if ($categoryHasMatch) { $wrapPanel.Visibility = [Windows.Visibility]::Visible $_.Visibility = [Windows.Visibility]::Visible # Update category label to show expanded state (-) if ($categoryLabel.Content -like "+*") { $categoryLabel.Content = $categoryLabel.Content -replace "^\+ ", "- " } } else { # Hide the entire category container if no matches $_.Visibility = [Windows.Visibility]::Collapsed } } } }