mirror of
https://github.com/ChrisTitusTech/winutil
synced 2026-02-06 07:50:10 +00:00
81 lines
3.1 KiB
PowerShell
81 lines
3.1 KiB
PowerShell
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
|
|
}
|
|
}
|
|
}
|
|
}
|