diff --git a/src/Snap.Hutao/Snap.Hutao/Control/AutoSuggestBox/AutoSuggestTokenBox.cs b/src/Snap.Hutao/Snap.Hutao/Control/AutoSuggestBox/AutoSuggestTokenBox.cs
index 6910f600..00a5a25c 100644
--- a/src/Snap.Hutao/Snap.Hutao/Control/AutoSuggestBox/AutoSuggestTokenBox.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Control/AutoSuggestBox/AutoSuggestTokenBox.cs
@@ -7,6 +7,7 @@ using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Controls.Primitives;
using Snap.Hutao.Control.Extension;
+using System.Collections;
namespace Snap.Hutao.Control.AutoSuggestBox;
@@ -56,7 +57,9 @@ internal sealed partial class AutoSuggestTokenBox : TokenizingTextBox
sender.ItemsSource = AvailableTokens
.Where(kvp => kvp.Value.Value.Contains(Text, StringComparison.OrdinalIgnoreCase))
.OrderBy(kvp => kvp.Value.Kind)
- .Select(kvp => kvp.Value);
+ .ThenBy(kvp => kvp.Value.Order)
+ .Select(kvp => kvp.Value)
+ .DefaultIfEmpty(SearchToken.NotFound);
}
}
@@ -77,11 +80,23 @@ internal sealed partial class AutoSuggestTokenBox : TokenizingTextBox
return;
}
- args.Item = AvailableTokens.GetValueOrDefault(args.TokenText) ?? new SearchToken(SearchTokenKind.None, args.TokenText);
+ if (AvailableTokens.GetValueOrDefault(args.TokenText) is { } token)
+ {
+ args.Item = token;
+ }
+ else
+ {
+ args.Cancel = true;
+ }
}
private void OnTokenItemCollectionChanged(TokenizingTextBox sender, object args)
{
+ if (args is SearchToken { Kind: SearchTokenKind.None } token)
+ {
+ ((IList)sender.ItemsSource).Remove(token);
+ }
+
FilterCommand.TryExecute(FilterCommandParameter);
}
}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/Control/AutoSuggestBox/SearchToken.cs b/src/Snap.Hutao/Snap.Hutao/Control/AutoSuggestBox/SearchToken.cs
index cfa8dc91..21cec83e 100644
--- a/src/Snap.Hutao/Snap.Hutao/Control/AutoSuggestBox/SearchToken.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Control/AutoSuggestBox/SearchToken.cs
@@ -7,13 +7,16 @@ namespace Snap.Hutao.Control.AutoSuggestBox;
internal sealed class SearchToken
{
- public SearchToken(SearchTokenKind kind, string value, Uri? iconUri = null, Uri? sideIconUri = null, Color? quality = null)
+ public static readonly SearchToken NotFound = new(SearchTokenKind.None, SH.ControlAutoSuggestBoxNotFoundValue, 0);
+
+ public SearchToken(SearchTokenKind kind, string value, int order, Uri? iconUri = null, Uri? sideIconUri = null, Color? quality = null)
{
Value = value;
Kind = kind;
IconUri = iconUri;
SideIconUri = sideIconUri;
Quality = quality;
+ Order = order;
}
public SearchTokenKind Kind { get; }
@@ -26,6 +29,8 @@ internal sealed class SearchToken
public Color? Quality { get; }
+ public int Order { get; }
+
public override string ToString()
{
return Value;
diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Theme/Uri.xaml b/src/Snap.Hutao/Snap.Hutao/Control/Theme/Uri.xaml
index a27ffe32..090e6817 100644
--- a/src/Snap.Hutao/Snap.Hutao/Control/Theme/Uri.xaml
+++ b/src/Snap.Hutao/Snap.Hutao/Control/Theme/Uri.xaml
@@ -30,6 +30,7 @@
https://api.snapgenshin.com/static/raw/EmotionIcon/UI_EmotionIcon25.png
https://api.snapgenshin.com/static/raw/EmotionIcon/UI_EmotionIcon52.png
https://api.snapgenshin.com/static/raw/EmotionIcon/UI_EmotionIcon71.png
+ https://api.snapgenshin.com/static/raw/EmotionIcon/UI_EmotionIcon89.png
https://api.snapgenshin.com/static/raw/EmotionIcon/UI_EmotionIcon250.png
https://api.snapgenshin.com/static/raw/EmotionIcon/UI_EmotionIcon271.png
https://api.snapgenshin.com/static/raw/EmotionIcon/UI_EmotionIcon272.png
diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Intrinsic/Frozen/IntrinsicFrozen.cs b/src/Snap.Hutao/Snap.Hutao/Model/Intrinsic/Frozen/IntrinsicFrozen.cs
index 6963ff37..7d9604a8 100644
--- a/src/Snap.Hutao/Snap.Hutao/Model/Intrinsic/Frozen/IntrinsicFrozen.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Model/Intrinsic/Frozen/IntrinsicFrozen.cs
@@ -11,34 +11,26 @@ namespace Snap.Hutao.Model.Intrinsic.Frozen;
[HighQuality]
internal static class IntrinsicFrozen
{
- ///
- /// 所属地区
- ///
public static FrozenSet AssociationTypes { get; } = Enum.GetValues().Select(e => e.GetLocalizedDescriptionOrDefault()).OfType().ToFrozenSet();
- ///
- /// 武器类型
- ///
+ public static FrozenSet> AssociationTypeNameValues { get; } = Enum.GetValues().Select(e => new NameValue(e.GetLocalizedDescriptionOrDefault()!, e)).Where(nv => !string.IsNullOrEmpty(nv.Name)).ToFrozenSet();
+
public static FrozenSet WeaponTypes { get; } = Enum.GetValues().Select(e => e.GetLocalizedDescriptionOrDefault()).OfType().ToFrozenSet();
- ///
- /// 物品类型
- ///
+ public static FrozenSet> WeaponTypeNameValues { get; } = Enum.GetValues().Select(e => new NameValue(e.GetLocalizedDescriptionOrDefault()!, e)).Where(nv => !string.IsNullOrEmpty(nv.Name)).ToFrozenSet();
+
public static FrozenSet ItemQualities { get; } = Enum.GetValues().Select(e => e.GetLocalizedDescriptionOrDefault()).OfType().ToFrozenSet();
- ///
- /// 身材类型
- ///
+ public static FrozenSet> ItemQualityNameValues { get; } = Enum.GetValues().Select(e => new NameValue(e.GetLocalizedDescriptionOrDefault()!, e)).Where(nv => !string.IsNullOrEmpty(nv.Name)).ToFrozenSet();
+
public static FrozenSet BodyTypes { get; } = Enum.GetValues().Select(e => e.GetLocalizedDescriptionOrDefault()).OfType().ToFrozenSet();
- ///
- /// 战斗属性
- ///
+ public static FrozenSet> BodyTypeNameValues { get; } = Enum.GetValues().Select(e => new NameValue(e.GetLocalizedDescriptionOrDefault()!, e)).Where(nv => !string.IsNullOrEmpty(nv.Name)).ToFrozenSet();
+
public static FrozenSet FightProperties { get; } = Enum.GetValues().Select(e => e.GetLocalizedDescriptionOrDefault()).OfType().ToFrozenSet();
- ///
- /// 元素名称
- ///
+ public static FrozenSet> FightPropertyNameValues { get; } = Enum.GetValues().Select(e => new NameValue(e.GetLocalizedDescriptionOrDefault()!, e)).Where(nv => !string.IsNullOrEmpty(nv.Name)).ToFrozenSet();
+
public static FrozenSet ElementNames { get; } = FrozenSet.ToFrozenSet(
[
SH.ModelIntrinsicElementNameFire,
@@ -50,6 +42,17 @@ internal static class IntrinsicFrozen
SH.ModelIntrinsicElementNameRock,
]);
+ public static FrozenSet> ElementNameValues { get; } = FrozenSet.ToFrozenSet(
+ [
+ new NameValue(SH.ModelIntrinsicElementNameFire, 1),
+ new NameValue(SH.ModelIntrinsicElementNameWater, 2),
+ new NameValue(SH.ModelIntrinsicElementNameGrass, 3),
+ new NameValue(SH.ModelIntrinsicElementNameElec, 4),
+ new NameValue(SH.ModelIntrinsicElementNameWind, 5),
+ new NameValue(SH.ModelIntrinsicElementNameIce, 6),
+ new NameValue(SH.ModelIntrinsicElementNameRock, 7),
+ ]);
+
public static FrozenSet MaterialTypeDescriptions { get; } = FrozenSet.ToFrozenSet(
[
SH.ModelMetadataMaterialCharacterAndWeaponEnhancementMaterial,
diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Converter/AssociationTypeIconConverter.cs b/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Converter/AssociationTypeIconConverter.cs
index e307895f..5db2c9cb 100644
--- a/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Converter/AssociationTypeIconConverter.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Converter/AssociationTypeIconConverter.cs
@@ -9,24 +9,6 @@ namespace Snap.Hutao.Model.Metadata.Converter;
internal sealed class AssociationTypeIconConverter : ValueConverter
{
- private static readonly FrozenDictionary LocalizedNameToAssociationType = FrozenDictionary.ToFrozenDictionary(
- [
- KeyValuePair.Create(SH.ModelIntrinsicAssociationTypeMondstadt, AssociationType.ASSOC_TYPE_MONDSTADT),
- KeyValuePair.Create(SH.ModelIntrinsicAssociationTypeLiyue, AssociationType.ASSOC_TYPE_LIYUE),
- KeyValuePair.Create(SH.ModelIntrinsicAssociationTypeFatui, AssociationType.ASSOC_TYPE_FATUI),
- KeyValuePair.Create(SH.ModelIntrinsicAssociationTypeInazuma, AssociationType.ASSOC_TYPE_INAZUMA),
- KeyValuePair.Create(SH.ModelIntrinsicAssociationTypeRanger, AssociationType.ASSOC_TYPE_RANGER),
- KeyValuePair.Create(SH.ModelIntrinsicAssociationTypeSumeru, AssociationType.ASSOC_TYPE_SUMERU),
- KeyValuePair.Create(SH.ModelIntrinsicAssociationTypeFontaine, AssociationType.ASSOC_TYPE_FONTAINE),
- KeyValuePair.Create(SH.ModelIntrinsicAssociationTypeNatlan, AssociationType.ASSOC_TYPE_NATLAN),
- KeyValuePair.Create(SH.ModelIntrinsicAssociationTypeSnezhnaya, AssociationType.ASSOC_TYPE_SNEZHNAYA),
- ]);
-
- public static Uri? AssociationTypeNameToIconUri(string associationTypeName)
- {
- return AssociationTypeToIconUri(LocalizedNameToAssociationType.GetValueOrDefault(associationTypeName));
- }
-
public static Uri? AssociationTypeToIconUri(AssociationType type)
{
string? association = type switch
diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.en.resx b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.en.resx
index 9ae9b5d1..1c70bb17 100644
--- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.en.resx
+++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.en.resx
@@ -144,6 +144,9 @@
Save
+
+ No results found
+
Invalid Uri
diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx
index 39312912..a53e02e4 100644
--- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx
+++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx
@@ -144,6 +144,9 @@
保存
+
+ 未找到结果
+
无效的 Uri
diff --git a/src/Snap.Hutao/Snap.Hutao/View/Page/WikiAvatarPage.xaml b/src/Snap.Hutao/Snap.Hutao/View/Page/WikiAvatarPage.xaml
index 3346fc0c..76146f3b 100644
--- a/src/Snap.Hutao/Snap.Hutao/View/Page/WikiAvatarPage.xaml
+++ b/src/Snap.Hutao/Snap.Hutao/View/Page/WikiAvatarPage.xaml
@@ -365,367 +365,378 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+ Margin="16"
+ Style="{StaticResource BorderCardStyle}">
+
+
+
+
-
-
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -734,19 +745,33 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Snap.Hutao/Snap.Hutao/View/Page/WikiWeaponPage.xaml b/src/Snap.Hutao/Snap.Hutao/View/Page/WikiWeaponPage.xaml
index eefb8246..e480d002 100644
--- a/src/Snap.Hutao/Snap.Hutao/View/Page/WikiWeaponPage.xaml
+++ b/src/Snap.Hutao/Snap.Hutao/View/Page/WikiWeaponPage.xaml
@@ -233,111 +233,125 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -346,19 +360,34 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Achievement/AchievementViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Achievement/AchievementViewModel.cs
index 4c1891e4..d50110b8 100644
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Achievement/AchievementViewModel.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Achievement/AchievementViewModel.cs
@@ -381,26 +381,29 @@ internal sealed partial class AchievementViewModel : Abstraction.ViewModel, INav
{
SetProperty(ref selectedAchievementGoal, null);
- if (!string.IsNullOrEmpty(search))
+ if (string.IsNullOrEmpty(search))
{
- if (uint.TryParse(search, out uint achievementId))
- {
- Achievements.Filter = view => view.Inner.Id == achievementId;
- return;
- }
-
- if (VersionRegex().IsMatch(search))
- {
- Achievements.Filter = view => view.Inner.Version == search;
- return;
- }
-
- Achievements.Filter = view =>
- {
- return view.Inner.Title.Contains(search, StringComparison.CurrentCultureIgnoreCase)
- || view.Inner.Description.Contains(search, StringComparison.CurrentCultureIgnoreCase);
- };
+ Achievements.Filter = default!;
+ return;
}
+
+ if (uint.TryParse(search, out uint achievementId))
+ {
+ Achievements.Filter = view => view.Inner.Id == achievementId;
+ return;
+ }
+
+ if (VersionRegex().IsMatch(search))
+ {
+ Achievements.Filter = view => view.Inner.Version == search;
+ return;
+ }
+
+ Achievements.Filter = view =>
+ {
+ return view.Inner.Title.Contains(search, StringComparison.CurrentCultureIgnoreCase)
+ || view.Inner.Description.Contains(search, StringComparison.CurrentCultureIgnoreCase);
+ };
}
}
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WikiAvatarViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WikiAvatarViewModel.cs
index ba95f763..52c1475b 100644
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WikiAvatarViewModel.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WikiAvatarViewModel.cs
@@ -119,12 +119,12 @@ internal sealed partial class WikiAvatarViewModel : Abstraction.ViewModel
availableTokens = FrozenDictionary.ToFrozenDictionary(
[
- .. avatars.Select(avatar => KeyValuePair.Create(avatar.Name, new SearchToken(SearchTokenKind.Avatar, avatar.Name, sideIconUri: AvatarSideIconConverter.IconNameToUri(avatar.SideIcon)))),
- .. IntrinsicFrozen.AssociationTypes.Select(assoc => KeyValuePair.Create(assoc, new SearchToken(SearchTokenKind.AssociationType, assoc, iconUri: AssociationTypeIconConverter.AssociationTypeNameToIconUri(assoc)))),
- .. IntrinsicFrozen.BodyTypes.Select(b => KeyValuePair.Create(b, new SearchToken(SearchTokenKind.BodyType, b))),
- .. IntrinsicFrozen.ElementNames.Select(e => KeyValuePair.Create(e, new SearchToken(SearchTokenKind.ElementName, e, iconUri: ElementNameIconConverter.ElementNameToIconUri(e)))),
- .. IntrinsicFrozen.ItemQualities.Select(i => KeyValuePair.Create(i, new SearchToken(SearchTokenKind.ItemQuality, i, quality: QualityColorConverter.QualityNameToColor(i)))),
- .. IntrinsicFrozen.WeaponTypes.Select(w => KeyValuePair.Create(w, new SearchToken(SearchTokenKind.WeaponType, w, iconUri: WeaponTypeIconConverter.WeaponTypeNameToIconUri(w)))),
+ .. avatars.Select((avatar, index) => KeyValuePair.Create(avatar.Name, new SearchToken(SearchTokenKind.Avatar, avatar.Name, index, sideIconUri: AvatarSideIconConverter.IconNameToUri(avatar.SideIcon)))),
+ .. IntrinsicFrozen.AssociationTypeNameValues.Select(nv => KeyValuePair.Create(nv.Name, new SearchToken(SearchTokenKind.AssociationType, nv.Name, (int)nv.Value, iconUri: AssociationTypeIconConverter.AssociationTypeToIconUri(nv.Value)))),
+ .. IntrinsicFrozen.BodyTypeNameValues.Select(nv => KeyValuePair.Create(nv.Name, new SearchToken(SearchTokenKind.BodyType, nv.Name, (int)nv.Value))),
+ .. IntrinsicFrozen.ElementNameValues.Select(nv => KeyValuePair.Create(nv.Name, new SearchToken(SearchTokenKind.ElementName, nv.Name, nv.Value, iconUri: ElementNameIconConverter.ElementNameToIconUri(nv.Name)))),
+ .. IntrinsicFrozen.ItemQualityNameValues.Select(nv => KeyValuePair.Create(nv.Name, new SearchToken(SearchTokenKind.ItemQuality, nv.Name, (int)nv.Value, quality: QualityColorConverter.QualityToColor(nv.Value)))),
+ .. IntrinsicFrozen.WeaponTypeNameValues.Select(nv => KeyValuePair.Create(nv.Name, new SearchToken(SearchTokenKind.WeaponType, nv.Name, (int)nv.Value, iconUri: WeaponTypeIconConverter.WeaponTypeToIconUri(nv.Value)))),
]);
return true;
@@ -246,10 +246,11 @@ internal sealed partial class WikiAvatarViewModel : Abstraction.ViewModel
if (FilterTokens.IsNullOrEmpty())
{
Avatars.Filter = default!;
- return;
}
-
- Avatars.Filter = AvatarFilter.Compile(FilterTokens);
+ else
+ {
+ Avatars.Filter = AvatarFilter.Compile(FilterTokens);
+ }
if (Selected is not null && Avatars.Contains(Selected))
{
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WikiWeaponViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WikiWeaponViewModel.cs
index 374bbbdf..69e19d14 100644
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WikiWeaponViewModel.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WikiWeaponViewModel.cs
@@ -119,10 +119,10 @@ internal sealed partial class WikiWeaponViewModel : Abstraction.ViewModel
availableTokens = FrozenDictionary.ToFrozenDictionary(
[
- .. weapons.Select(w => KeyValuePair.Create(w.Name, new SearchToken(SearchTokenKind.Weapon, w.Name, sideIconUri: EquipIconConverter.IconNameToUri(w.Icon)))),
- .. IntrinsicFrozen.FightProperties.Select(f => KeyValuePair.Create(f, new SearchToken(SearchTokenKind.FightProperty, f))),
- .. IntrinsicFrozen.ItemQualities.Select(i => KeyValuePair.Create(i, new SearchToken(SearchTokenKind.ItemQuality, i, quality: QualityColorConverter.QualityNameToColor(i)))),
- .. IntrinsicFrozen.WeaponTypes.Select(w => KeyValuePair.Create(w, new SearchToken(SearchTokenKind.WeaponType, w, iconUri: WeaponTypeIconConverter.WeaponTypeNameToIconUri(w)))),
+ .. weapons.Select((weapon, index) => KeyValuePair.Create(weapon.Name, new SearchToken(SearchTokenKind.Weapon, weapon.Name, index, sideIconUri: EquipIconConverter.IconNameToUri(weapon.Icon)))),
+ .. IntrinsicFrozen.FightPropertyNameValues.Select(nv => KeyValuePair.Create(nv.Name, new SearchToken(SearchTokenKind.FightProperty, nv.Name, (int)nv.Value))),
+ .. IntrinsicFrozen.ItemQualityNameValues.Select(nv => KeyValuePair.Create(nv.Name, new SearchToken(SearchTokenKind.ItemQuality, nv.Name, (int)nv.Value, quality: QualityColorConverter.QualityToColor(nv.Value)))),
+ .. IntrinsicFrozen.WeaponTypeNameValues.Select(nv => KeyValuePair.Create(nv.Name, new SearchToken(SearchTokenKind.WeaponType, nv.Name, (int)nv.Value, iconUri: WeaponTypeIconConverter.WeaponTypeToIconUri(nv.Value)))),
]);
}
catch (OperationCanceledException)
@@ -228,10 +228,11 @@ internal sealed partial class WikiWeaponViewModel : Abstraction.ViewModel
if (FilterTokens.IsNullOrEmpty())
{
Weapons.Filter = default!;
- return;
}
-
- Weapons.Filter = WeaponFilter.Compile(FilterTokens);
+ else
+ {
+ Weapons.Filter = WeaponFilter.Compile(FilterTokens);
+ }
if (Selected is not null && Weapons.Contains(Selected))
{