From 59dabaa5bec093ab4690b96ec589d4b76a05d2b8 Mon Sep 17 00:00:00 2001 From: DismissedLight <1686188646@qq.com> Date: Tue, 5 Mar 2024 23:59:23 +0800 Subject: [PATCH] code style --- src/Snap.Hutao/Snap.Hutao/App.xaml | 1 + .../AutoSuggestTokenBox.cs | 27 ++++++++++--------- .../SearchToken.cs | 4 +-- .../Control/AutoSuggestBox/SearchTokenKind.cs | 17 ++++++++++++ .../Behavior/InvokeCommandOnLoadedBehavior.cs | 7 ++--- ...keCommandOrOnActualThemeChangedBehavior.cs | 6 ++--- .../Control/Extension/CommandExtension.cs | 18 +++++++++++++ .../Control/SuggestBox/SearchTokenKind.cs | 17 ------------ .../Extension/EnumerableExtension.cs | 6 +++++ .../Converter/AssociationTypeIconConverter.cs | 10 +++---- .../Converter/QualityColorConverter.cs | 20 +++++++------- .../Snap.Hutao/View/Page/WikiAvatarPage.xaml | 19 +++++++++---- .../Snap.Hutao/View/Page/WikiWeaponPage.xaml | 14 ++++++++-- .../Snap.Hutao/ViewModel/Wiki/AvatarFilter.cs | 18 ++++++------- .../Snap.Hutao/ViewModel/Wiki/WeaponFilter.cs | 14 +++++----- .../ViewModel/Wiki/WikiAvatarViewModel.cs | 14 +++++----- .../ViewModel/Wiki/WikiWeaponViewModel.cs | 10 +++---- 17 files changed, 132 insertions(+), 90 deletions(-) rename src/Snap.Hutao/Snap.Hutao/Control/{SuggestBox => AutoSuggestBox}/AutoSuggestTokenBox.cs (62%) rename src/Snap.Hutao/Snap.Hutao/Control/{SuggestBox => AutoSuggestBox}/SearchToken.cs (85%) create mode 100644 src/Snap.Hutao/Snap.Hutao/Control/AutoSuggestBox/SearchTokenKind.cs create mode 100644 src/Snap.Hutao/Snap.Hutao/Control/Extension/CommandExtension.cs delete mode 100644 src/Snap.Hutao/Snap.Hutao/Control/SuggestBox/SearchTokenKind.cs diff --git a/src/Snap.Hutao/Snap.Hutao/App.xaml b/src/Snap.Hutao/Snap.Hutao/App.xaml index 92ab950a..eca83605 100644 --- a/src/Snap.Hutao/Snap.Hutao/App.xaml +++ b/src/Snap.Hutao/Snap.Hutao/App.xaml @@ -6,6 +6,7 @@ + diff --git a/src/Snap.Hutao/Snap.Hutao/Control/SuggestBox/AutoSuggestTokenBox.cs b/src/Snap.Hutao/Snap.Hutao/Control/AutoSuggestBox/AutoSuggestTokenBox.cs similarity index 62% rename from src/Snap.Hutao/Snap.Hutao/Control/SuggestBox/AutoSuggestTokenBox.cs rename to src/Snap.Hutao/Snap.Hutao/Control/AutoSuggestBox/AutoSuggestTokenBox.cs index e49fe458..7c3b6782 100644 --- a/src/Snap.Hutao/Snap.Hutao/Control/SuggestBox/AutoSuggestTokenBox.cs +++ b/src/Snap.Hutao/Snap.Hutao/Control/AutoSuggestBox/AutoSuggestTokenBox.cs @@ -1,18 +1,22 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. +using CommunityToolkit.WinUI; using CommunityToolkit.WinUI.Controls; using Microsoft.UI.Xaml.Controls; -using Snap.Hutao.Control.SuggestBox; +using Microsoft.UI.Xaml.Controls.Primitives; +using Snap.Hutao.Control.Extension; -namespace Snap.Hutao.View.Control; +namespace Snap.Hutao.Control.AutoSuggestBox; [DependencyProperty("FilterCommand", typeof(ICommand))] +[DependencyProperty("FilterCommandParameter", typeof(object))] [DependencyProperty("AvailableTokens", typeof(IReadOnlyDictionary))] internal sealed partial class AutoSuggestTokenBox : TokenizingTextBox { public AutoSuggestTokenBox() { + DefaultStyleKey = typeof(TokenizingTextBox); TextChanged += OnFilterSuggestionRequested; QuerySubmitted += OnQuerySubmitted; TokenItemAdding += OnTokenItemAdding; @@ -20,7 +24,7 @@ internal sealed partial class AutoSuggestTokenBox : TokenizingTextBox TokenItemRemoved += OnTokenItemModified; } - private void OnFilterSuggestionRequested(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args) + private void OnFilterSuggestionRequested(Microsoft.UI.Xaml.Controls.AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args) { if (string.IsNullOrWhiteSpace(Text)) { @@ -30,20 +34,20 @@ internal sealed partial class AutoSuggestTokenBox : TokenizingTextBox if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput) { sender.ItemsSource = AvailableTokens.Values.Where(q => q.Value.Contains(Text, StringComparison.OrdinalIgnoreCase)); + + // TODO: CornerRadius + // Popup? popup = this.FindDescendant("SuggestionsPopup") as Popup; } } - private void OnQuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs args) + private void OnQuerySubmitted(Microsoft.UI.Xaml.Controls.AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs args) { if (args.ChosenSuggestion is not null) { return; } - if (FilterCommand.CanExecute(null)) - { - FilterCommand.Execute(null); - } + CommandExtension.TryExecute(FilterCommand, FilterCommandParameter); } private void OnTokenItemAdding(TokenizingTextBox sender, TokenItemAddingEventArgs args) @@ -53,14 +57,11 @@ internal sealed partial class AutoSuggestTokenBox : TokenizingTextBox return; } - args.Item = AvailableTokens.GetValueOrDefault(args.TokenText) ?? new SearchToken(args.TokenText, SearchTokenKind.Others); + args.Item = AvailableTokens.GetValueOrDefault(args.TokenText) ?? new SearchToken(SearchTokenKind.None, args.TokenText); } private void OnTokenItemModified(TokenizingTextBox sender, object args) { - if (FilterCommand.CanExecute(null)) - { - FilterCommand.Execute(null); - } + CommandExtension.TryExecute(FilterCommand, FilterCommandParameter); } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Control/SuggestBox/SearchToken.cs b/src/Snap.Hutao/Snap.Hutao/Control/AutoSuggestBox/SearchToken.cs similarity index 85% rename from src/Snap.Hutao/Snap.Hutao/Control/SuggestBox/SearchToken.cs rename to src/Snap.Hutao/Snap.Hutao/Control/AutoSuggestBox/SearchToken.cs index 1ee15e17..cfa8dc91 100644 --- a/src/Snap.Hutao/Snap.Hutao/Control/SuggestBox/SearchToken.cs +++ b/src/Snap.Hutao/Snap.Hutao/Control/AutoSuggestBox/SearchToken.cs @@ -3,11 +3,11 @@ using Windows.UI; -namespace Snap.Hutao.Control.SuggestBox; +namespace Snap.Hutao.Control.AutoSuggestBox; internal sealed class SearchToken { - public SearchToken(string value, SearchTokenKind kind, Uri? iconUri = null, Uri? sideIconUri = null, Color? quality = null) + public SearchToken(SearchTokenKind kind, string value, Uri? iconUri = null, Uri? sideIconUri = null, Color? quality = null) { Value = value; Kind = kind; diff --git a/src/Snap.Hutao/Snap.Hutao/Control/AutoSuggestBox/SearchTokenKind.cs b/src/Snap.Hutao/Snap.Hutao/Control/AutoSuggestBox/SearchTokenKind.cs new file mode 100644 index 00000000..4a155c86 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Control/AutoSuggestBox/SearchTokenKind.cs @@ -0,0 +1,17 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +namespace Snap.Hutao.Control.AutoSuggestBox; + +internal enum SearchTokenKind +{ + None, + AssociationType, + Avatar, + BodyType, + ElementName, + FightProperty, + ItemQuality, + Weapon, + WeaponType, +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Behavior/InvokeCommandOnLoadedBehavior.cs b/src/Snap.Hutao/Snap.Hutao/Control/Behavior/InvokeCommandOnLoadedBehavior.cs index 26697a31..954d61cd 100644 --- a/src/Snap.Hutao/Snap.Hutao/Control/Behavior/InvokeCommandOnLoadedBehavior.cs +++ b/src/Snap.Hutao/Snap.Hutao/Control/Behavior/InvokeCommandOnLoadedBehavior.cs @@ -3,6 +3,7 @@ using CommunityToolkit.WinUI.Behaviors; using Microsoft.UI.Xaml; +using Snap.Hutao.Control.Extension; namespace Snap.Hutao.Control.Behavior; @@ -45,10 +46,6 @@ internal sealed partial class InvokeCommandOnLoadedBehavior : BehaviorBase(this IGrouping grouping, out TKey key, out IEnumerable elements) + { + key = grouping.Key; + elements = grouping; + } + public static TElement? ElementAtOrLastOrDefault(this IEnumerable source, int index) { return source.ElementAtOrDefault(index) ?? source.LastOrDefault(); 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 d70a868a..e307895f 100644 --- a/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Converter/AssociationTypeIconConverter.cs +++ b/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Converter/AssociationTypeIconConverter.cs @@ -33,18 +33,18 @@ internal sealed class AssociationTypeIconConverter : ValueConverter "Mengde", AssociationType.ASSOC_TYPE_LIYUE => "Liyue", - AssociationType.ASSOC_TYPE_FATUI => null, + AssociationType.ASSOC_TYPE_FATUI => default, AssociationType.ASSOC_TYPE_INAZUMA => "Inazuma", - AssociationType.ASSOC_TYPE_RANGER => null, + AssociationType.ASSOC_TYPE_RANGER => default, AssociationType.ASSOC_TYPE_SUMERU => "Sumeru", AssociationType.ASSOC_TYPE_FONTAINE => "Fontaine", - AssociationType.ASSOC_TYPE_NATLAN => null, - AssociationType.ASSOC_TYPE_SNEZHNAYA => null, + AssociationType.ASSOC_TYPE_NATLAN => default, + AssociationType.ASSOC_TYPE_SNEZHNAYA => default, _ => throw Must.NeverHappen(), }; return association is null - ? null + ? default : Web.HutaoEndpoints.StaticRaw("ChapterIcon", $"UI_ChapterIcon_{association}.png").ToUri(); } diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Converter/QualityColorConverter.cs b/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Converter/QualityColorConverter.cs index 1c59ddf8..a2dda53c 100644 --- a/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Converter/QualityColorConverter.cs +++ b/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Converter/QualityColorConverter.cs @@ -26,6 +26,16 @@ internal sealed class QualityColorConverter : ValueConverter KeyValuePair.Create(SH.ModelIntrinsicItemQualityRed, QualityType.QUALITY_ORANGE_SP), ]); + private static readonly FrozenDictionary QualityTypeToColor = FrozenDictionary.ToFrozenDictionary( + [ + KeyValuePair.Create(QualityType.QUALITY_WHITE, KnownColors.White), + KeyValuePair.Create(QualityType.QUALITY_GREEN, KnownColors.Green), + KeyValuePair.Create(QualityType.QUALITY_BLUE, KnownColors.Blue), + KeyValuePair.Create(QualityType.QUALITY_PURPLE, KnownColors.Purple), + KeyValuePair.Create(QualityType.QUALITY_ORANGE, KnownColors.Orange), + KeyValuePair.Create(QualityType.QUALITY_ORANGE_SP, KnownColors.Orange), + ]); + public static Color QualityNameToColor(string qualityName) { return QualityToColor(LocalizedNameToQualityType.GetValueOrDefault(qualityName)); @@ -33,15 +43,7 @@ internal sealed class QualityColorConverter : ValueConverter public static Color QualityToColor(QualityType quality) { - return quality switch - { - QualityType.QUALITY_WHITE => KnownColors.White, - QualityType.QUALITY_GREEN => KnownColors.Green, - QualityType.QUALITY_BLUE => KnownColors.Blue, - QualityType.QUALITY_PURPLE => KnownColors.Purple, - QualityType.QUALITY_ORANGE or QualityType.QUALITY_ORANGE_SP => KnownColors.Orange, - _ => Colors.Transparent, - }; + return QualityTypeToColor.GetValueOrDefault(quality, Colors.Transparent); } /// diff --git a/src/Snap.Hutao/Snap.Hutao/View/Page/WikiAvatarPage.xaml b/src/Snap.Hutao/Snap.Hutao/View/Page/WikiAvatarPage.xaml index 271de945..2b5445d9 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/Page/WikiAvatarPage.xaml +++ b/src/Snap.Hutao/Snap.Hutao/View/Page/WikiAvatarPage.xaml @@ -8,6 +8,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mxi="using:Microsoft.Xaml.Interactivity" xmlns:shc="using:Snap.Hutao.Control" + xmlns:shca="using:Snap.Hutao.Control.AutoSuggestBox" xmlns:shcb="using:Snap.Hutao.Control.Behavior" xmlns:shci="using:Snap.Hutao.Control.Image" xmlns:shcm="using:Snap.Hutao.Control.Markup" @@ -303,14 +304,12 @@ Margin="8,8,0,0" LocalSettingKeySuffixForCurrent="WikiAvatarPage.Avatars"/> - - + TokenItemTemplate="{StaticResource TokenTemplate}"> + + + + + + - + TokenItemTemplate="{StaticResource TokenTemplate}"> + + + + + + matches = []; - foreach (IGrouping tokens in input.GroupBy(token => token.Kind, token => token.Value)) + foreach ((SearchTokenKind kind, IEnumerable tokens) in input.GroupBy(token => token.Kind, token => token.Value)) { - switch (tokens.Key) + switch (kind) { - case SearchTokenKind.ElementNames: + case SearchTokenKind.ElementName: if (IntrinsicFrozen.ElementNames.Overlaps(tokens)) { matches.Add(tokens.Contains(avatar.FetterInfo.VisionBefore)); } break; - case SearchTokenKind.AssociationTypes: + case SearchTokenKind.AssociationType: if (IntrinsicFrozen.AssociationTypes.Overlaps(tokens)) { matches.Add(tokens.Contains(avatar.FetterInfo.Association.GetLocalizedDescriptionOrDefault())); } break; - case SearchTokenKind.WeaponTypes: + case SearchTokenKind.WeaponType: if (IntrinsicFrozen.WeaponTypes.Overlaps(tokens)) { matches.Add(tokens.Contains(avatar.Weapon.GetLocalizedDescriptionOrDefault())); } break; - case SearchTokenKind.ItemQualities: + case SearchTokenKind.ItemQuality: if (IntrinsicFrozen.ItemQualities.Overlaps(tokens)) { matches.Add(tokens.Contains(avatar.Quality.GetLocalizedDescriptionOrDefault())); } break; - case SearchTokenKind.BodyTypes: + case SearchTokenKind.BodyType: if (IntrinsicFrozen.BodyTypes.Overlaps(tokens)) { matches.Add(tokens.Contains(avatar.Body.GetLocalizedDescriptionOrDefault())); } break; - case SearchTokenKind.Avatars: + case SearchTokenKind.Avatar: matches.Add(tokens.Contains(avatar.Name)); break; default: diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WeaponFilter.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WeaponFilter.cs index 01651fa3..359f258d 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WeaponFilter.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WeaponFilter.cs @@ -1,7 +1,7 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. -using Snap.Hutao.Control.SuggestBox; +using Snap.Hutao.Control.AutoSuggestBox; using Snap.Hutao.Model.Intrinsic.Frozen; using Snap.Hutao.Model.Metadata.Weapon; using System.Collections.ObjectModel; @@ -27,32 +27,32 @@ internal static class WeaponFilter { List matches = []; - foreach (IGrouping tokens in input.GroupBy(token => token.Kind, token => token.Value)) + foreach ((SearchTokenKind kind, IEnumerable tokens) in input.GroupBy(token => token.Kind, token => token.Value)) { - switch (tokens.Key) + switch (kind) { - case SearchTokenKind.WeaponTypes: + case SearchTokenKind.WeaponType: if (IntrinsicFrozen.WeaponTypes.Overlaps(tokens)) { matches.Add(tokens.Contains(weapon.WeaponType.GetLocalizedDescriptionOrDefault())); } break; - case SearchTokenKind.ItemQualities: + case SearchTokenKind.ItemQuality: if (IntrinsicFrozen.ItemQualities.Overlaps(tokens)) { matches.Add(tokens.Contains(weapon.Quality.GetLocalizedDescriptionOrDefault())); } break; - case SearchTokenKind.FightProperties: + case SearchTokenKind.FightProperty: if (IntrinsicFrozen.FightProperties.Overlaps(tokens)) { matches.Add(tokens.Contains(weapon.GrowCurves.ElementAtOrDefault(1)?.Type.GetLocalizedDescriptionOrDefault())); } break; - case SearchTokenKind.Weapons: + case SearchTokenKind.Weapon: matches.Add(tokens.Contains(weapon.Name)); break; default: diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WikiAvatarViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WikiAvatarViewModel.cs index cbb5257f..5b526fca 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WikiAvatarViewModel.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WikiAvatarViewModel.cs @@ -1,8 +1,8 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. +using Snap.Hutao.Control.AutoSuggestBox; using Snap.Hutao.Control.Collection.AdvancedCollectionView; -using Snap.Hutao.Control.SuggestBox; using Snap.Hutao.Factory.ContentDialog; using Snap.Hutao.Model.Calculable; using Snap.Hutao.Model.Entity.Primitive; @@ -116,12 +116,12 @@ internal sealed partial class WikiAvatarViewModel : Abstraction.ViewModel availableTokens = FrozenDictionary.ToFrozenDictionary( [ - .. avatars.Select(avatar => KeyValuePair.Create(avatar.Name, new SearchToken(avatar.Name, SearchTokenKind.Avatars, sideIconUri: AvatarSideIconConverter.IconNameToUri(avatar.SideIcon)))), - .. IntrinsicFrozen.AssociationTypes.Select(assoc => KeyValuePair.Create(assoc, new SearchToken(assoc, SearchTokenKind.AssociationTypes, iconUri: AssociationTypeIconConverter.AssociationTypeNameToIconUri(assoc)))), - .. IntrinsicFrozen.BodyTypes.Select(b => KeyValuePair.Create(b, new SearchToken(b, SearchTokenKind.BodyTypes))), - .. IntrinsicFrozen.ElementNames.Select(e => KeyValuePair.Create(e, new SearchToken(e, SearchTokenKind.ElementNames, iconUri: ElementNameIconConverter.ElementNameToIconUri(e)))), - .. IntrinsicFrozen.ItemQualities.Select(i => KeyValuePair.Create(i, new SearchToken(i, SearchTokenKind.ItemQualities, quality: QualityColorConverter.QualityNameToColor(i)))), - .. IntrinsicFrozen.WeaponTypes.Select(w => KeyValuePair.Create(w, new SearchToken(w, SearchTokenKind.WeaponTypes, iconUri: WeaponTypeIconConverter.WeaponTypeNameToIconUri(w)))), + .. 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)))), ]); return true; diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WikiWeaponViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WikiWeaponViewModel.cs index 3dba3741..6816423d 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WikiWeaponViewModel.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WikiWeaponViewModel.cs @@ -1,8 +1,8 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. +using Snap.Hutao.Control.AutoSuggestBox; using Snap.Hutao.Control.Collection.AdvancedCollectionView; -using Snap.Hutao.Control.SuggestBox; using Snap.Hutao.Factory.ContentDialog; using Snap.Hutao.Model.Calculable; using Snap.Hutao.Model.Entity.Primitive; @@ -113,10 +113,10 @@ internal sealed partial class WikiWeaponViewModel : Abstraction.ViewModel availableTokens = FrozenDictionary.ToFrozenDictionary( [ - .. weapons.Select(w => KeyValuePair.Create(w.Name, new SearchToken(w.Name, SearchTokenKind.Weapons, sideIconUri: EquipIconConverter.IconNameToUri(w.Icon)))), - .. IntrinsicFrozen.FightProperties.Select(f => KeyValuePair.Create(f, new SearchToken(f, SearchTokenKind.FightProperties))), - .. IntrinsicFrozen.ItemQualities.Select(i => KeyValuePair.Create(i, new SearchToken(i, SearchTokenKind.ItemQualities, quality: QualityColorConverter.QualityNameToColor(i)))), - .. IntrinsicFrozen.WeaponTypes.Select(w => KeyValuePair.Create(w, new SearchToken(w, SearchTokenKind.WeaponTypes, iconUri: WeaponTypeIconConverter.WeaponTypeNameToIconUri(w)))), + .. 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)))), ]); } }