新增搜索功能,优化JS脚本选择窗口的用户体验

This commit is contained in:
辉鸭蛋
2025-09-07 08:14:58 +08:00
parent e9987c62b1
commit 8e196efe8e
2 changed files with 54 additions and 2 deletions

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using BetterGenshinImpact.Core.Script;
using BetterGenshinImpact.Core.Script.Project;
@@ -17,9 +18,15 @@ public partial class JsScriptSelectionViewModel : ViewModel
[ObservableProperty]
private ObservableCollection<JsScriptInfo> _jsScripts = [];
[ObservableProperty]
private ObservableCollection<JsScriptInfo> _filteredJsScripts = [];
[ObservableProperty]
private JsScriptInfo? _selectedScript;
[ObservableProperty]
private string _searchText = string.Empty;
[ObservableProperty]
private string _readmeContent = string.Empty;
@@ -75,6 +82,8 @@ public partial class JsScriptSelectionViewModel : ViewModel
}
JsScripts = scripts;
ApplyFilter();
SelectFirstScript();
}
catch (Exception ex)
{
@@ -170,6 +179,41 @@ public partial class JsScriptSelectionViewModel : ViewModel
}
}
partial void OnSearchTextChanged(string value)
{
ApplyFilter();
SelectFirstScript();
}
private void ApplyFilter()
{
if (string.IsNullOrWhiteSpace(SearchText))
{
FilteredJsScripts = new ObservableCollection<JsScriptInfo>(JsScripts);
}
else
{
var filtered = JsScripts.Where(script =>
script.FolderName.Contains(SearchText, StringComparison.OrdinalIgnoreCase) ||
script.Manifest.Name.Contains(SearchText, StringComparison.OrdinalIgnoreCase) ||
script.Description.Contains(SearchText, StringComparison.OrdinalIgnoreCase)
).ToList();
FilteredJsScripts = new ObservableCollection<JsScriptInfo>(filtered);
}
}
private void SelectFirstScript()
{
if (FilteredJsScripts.Count > 0)
{
SelectedScript = FilteredJsScripts[0];
}
else
{
SelectedScript = null;
}
}
[RelayCommand]
private void RefreshScripts()
{