From 795a639587d522a18b68f9e7d7585cdba110c8cc Mon Sep 17 00:00:00 2001 From: leMicin Date: Tue, 14 Jan 2025 00:11:58 -0500 Subject: [PATCH 1/5] Implemented filters with values at 20% quality --- .../Properties/Definitions/ArmourProperty.cs | 3 +- .../Definitions/BlockChanceProperty.cs | 1 + .../Definitions/EnergyShieldProperty.cs | 3 +- .../Definitions/EvasionRatingProperty.cs | 3 +- .../Definitions/ItemQuantityProperty.cs | 2 + .../Definitions/ItemRarityProperty.cs | 2 + .../Definitions/MonsterPackSizeProperty.cs | 2 + .../Properties/Definitions/QualityProperty.cs | 4 +- .../Definitions/WeaponDamageProperty.cs | 16 +-- .../Filters/BooleanPropertyFilter.cs | 5 - .../Filters/DoublePropertyFilter.cs | 6 + .../Properties/Filters/IntPropertyFilter.cs | 6 + .../Filters/WeaponDamagePropertyFilter.cs | 9 ++ .../Trade/TradeSearchService.cs | 2 +- src/Sidekick.Common.Blazor/Main.razor | 6 + .../Forms/FormCheckbox.razor | 4 +- src/Sidekick.Common.Ui/Icons/IconSmall.razor | 11 ++ .../Poe/Items/ItemPropertyText.razor | 26 +++- .../ServiceCollectionExtensions.cs | 2 + .../Sidekick.Common.Ui.csproj | 6 +- .../Tooltips/TooltipBottomRight.razor | 19 --- .../Tooltips/TooltipHint.razor | 38 ++---- .../Tooltips/TooltipRight.razor | 23 ++++ .../Tooltips/TooltipTopRight.razor | 19 --- src/Sidekick.Common.Ui/UiIcons.cs | 4 +- src/Sidekick.Common.Ui/wwwroot/css/app.css | 117 +++++++---------- src/Sidekick.Common/Game/Items/DamageRange.cs | 8 +- .../Game/Items/ItemProperties.cs | 63 +++++++-- .../DoublePropertyFilterComponent.razor | 106 ---------------- .../Components/Filters/FiltersComponent.razor | 2 + .../Filters/IntPropertyFilterComponent.razor | 120 ------------------ .../Filters/ModifierFilterComponent.razor | 4 +- .../BooleanPropertyFilterComponent.razor | 0 .../DoublePropertyFilterComponent.razor | 74 +++++++++++ .../IntPropertyFilterComponent.razor | 90 +++++++++++++ .../TriStatePropertyFilterComponent.razor | 0 .../WeaponDamagePropertyFilterComponent.razor | 109 ++++++++++++++++ .../Components/Items/ItemProperties.razor | 2 +- .../Components/OilAnointment.razor | 4 +- .../Components/Options/OpenWebsiteLink.razor | 4 +- .../Options/ToggleCompactView.razor | 4 +- .../Prices/PriceNinjaComponent.razor | 4 +- 42 files changed, 520 insertions(+), 413 deletions(-) create mode 100644 src/Sidekick.Apis.Poe/Parser/Properties/Filters/WeaponDamagePropertyFilter.cs create mode 100644 src/Sidekick.Common.Ui/Icons/IconSmall.razor delete mode 100644 src/Sidekick.Common.Ui/Tooltips/TooltipBottomRight.razor create mode 100644 src/Sidekick.Common.Ui/Tooltips/TooltipRight.razor delete mode 100644 src/Sidekick.Common.Ui/Tooltips/TooltipTopRight.razor delete mode 100644 src/Sidekick.Modules.Trade/Components/Filters/DoublePropertyFilterComponent.razor delete mode 100644 src/Sidekick.Modules.Trade/Components/Filters/IntPropertyFilterComponent.razor rename src/Sidekick.Modules.Trade/Components/Filters/{ => Properties}/BooleanPropertyFilterComponent.razor (100%) create mode 100644 src/Sidekick.Modules.Trade/Components/Filters/Properties/DoublePropertyFilterComponent.razor create mode 100644 src/Sidekick.Modules.Trade/Components/Filters/Properties/IntPropertyFilterComponent.razor rename src/Sidekick.Modules.Trade/Components/Filters/{ => Properties}/TriStatePropertyFilterComponent.razor (100%) create mode 100644 src/Sidekick.Modules.Trade/Components/Filters/Properties/WeaponDamagePropertyFilterComponent.razor diff --git a/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/ArmourProperty.cs b/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/ArmourProperty.cs index fbf306a2a..0e1b74c7c 100644 --- a/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/ArmourProperty.cs +++ b/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/ArmourProperty.cs @@ -38,7 +38,8 @@ public override void Parse(ItemProperties itemProperties, ParsingItem parsingIte Text = gameLanguageProvider.Language.DescriptionArmour, NormalizeEnabled = true, NormalizeValue = normalizeValue, - Value = item.Properties.Armour, + Value = item.Properties.ArmourWithQuality, + OriginalValue = item.Properties.Armour, Checked = false, }; filter.NormalizeMinValue(); diff --git a/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/BlockChanceProperty.cs b/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/BlockChanceProperty.cs index 0ec1c803e..51ab7308a 100644 --- a/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/BlockChanceProperty.cs +++ b/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/BlockChanceProperty.cs @@ -43,6 +43,7 @@ public override void Parse(ItemProperties itemProperties, ParsingItem parsingIte NormalizeEnabled = true, NormalizeValue = normalizeValue, Value = item.Properties.BlockChance, + ValueSuffix = "%", Checked = false, }; filter.NormalizeMinValue(); diff --git a/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/EnergyShieldProperty.cs b/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/EnergyShieldProperty.cs index b10319501..0047f2e74 100644 --- a/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/EnergyShieldProperty.cs +++ b/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/EnergyShieldProperty.cs @@ -34,7 +34,8 @@ public override void Parse(ItemProperties itemProperties, ParsingItem parsingIte Text = gameLanguageProvider.Language.DescriptionEnergyShield, NormalizeEnabled = true, NormalizeValue = normalizeValue, - Value = item.Properties.EnergyShield, + Value = item.Properties.EnergyShieldWithQuality, + OriginalValue = item.Properties.EnergyShield, Checked = false, }; filter.NormalizeMinValue(); diff --git a/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/EvasionRatingProperty.cs b/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/EvasionRatingProperty.cs index 13ef15456..5ba8db379 100644 --- a/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/EvasionRatingProperty.cs +++ b/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/EvasionRatingProperty.cs @@ -34,7 +34,8 @@ public override void Parse(ItemProperties itemProperties, ParsingItem parsingIte Text = gameLanguageProvider.Language.DescriptionEvasion, NormalizeEnabled = true, NormalizeValue = normalizeValue, - Value = item.Properties.EvasionRating, + Value = item.Properties.EvasionRatingWithQuality, + OriginalValue = item.Properties.EvasionRating, Checked = false, }; filter.NormalizeMinValue(); diff --git a/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/ItemQuantityProperty.cs b/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/ItemQuantityProperty.cs index a5ee1925d..d04fe3525 100644 --- a/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/ItemQuantityProperty.cs +++ b/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/ItemQuantityProperty.cs @@ -34,6 +34,8 @@ public override void Parse(ItemProperties itemProperties, ParsingItem parsingIte NormalizeEnabled = true, NormalizeValue = normalizeValue, Value = item.Properties.ItemQuantity, + ValuePrefix = "+", + ValueSuffix = "%", Checked = false, }; filter.NormalizeMinValue(); diff --git a/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/ItemRarityProperty.cs b/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/ItemRarityProperty.cs index f513edd38..5d4a4eebe 100644 --- a/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/ItemRarityProperty.cs +++ b/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/ItemRarityProperty.cs @@ -34,6 +34,8 @@ public override void Parse(ItemProperties itemProperties, ParsingItem parsingIte NormalizeEnabled = true, NormalizeValue = normalizeValue, Value = item.Properties.ItemRarity, + ValuePrefix = "+", + ValueSuffix = "%", Checked = false, }; filter.NormalizeMinValue(); diff --git a/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/MonsterPackSizeProperty.cs b/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/MonsterPackSizeProperty.cs index 6ca7bae6f..405ef6f88 100644 --- a/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/MonsterPackSizeProperty.cs +++ b/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/MonsterPackSizeProperty.cs @@ -34,6 +34,8 @@ public override void Parse(ItemProperties itemProperties, ParsingItem parsingIte NormalizeEnabled = true, NormalizeValue = normalizeValue, Value = item.Properties.MonsterPackSize, + ValuePrefix = "+", + ValueSuffix = "%", Checked = false, }; filter.NormalizeMinValue(); diff --git a/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/QualityProperty.cs b/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/QualityProperty.cs index 31f252286..3dbfa016d 100644 --- a/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/QualityProperty.cs +++ b/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/QualityProperty.cs @@ -26,7 +26,7 @@ public override void Parse(ItemProperties itemProperties, ParsingItem parsingIte public override BooleanPropertyFilter? GetFilter(Item item, double normalizeValue) { - if (item.Properties.GemLevel <= 0) return null; + if (item.Properties.Quality <= 0) return null; var filter = new IntPropertyFilter(this) { @@ -34,6 +34,8 @@ public override void Parse(ItemProperties itemProperties, ParsingItem parsingIte NormalizeEnabled = false, NormalizeValue = normalizeValue, Value = item.Properties.Quality, + ValuePrefix = "+", + ValueSuffix = "%", Checked = item.Header.Rarity == Rarity.Gem, }; filter.NormalizeMinValue(); diff --git a/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/WeaponDamageProperty.cs b/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/WeaponDamageProperty.cs index e43bbb14a..000a04b73 100644 --- a/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/WeaponDamageProperty.cs +++ b/src/Sidekick.Apis.Poe/Parser/Properties/Definitions/WeaponDamageProperty.cs @@ -18,8 +18,6 @@ public class WeaponDamageProperty IStringLocalizer localizer ) : PropertyDefinition { - public const string DamageKey = "Damage"; - public override List ValidCategories { get; } = [Category.Weapon]; public override void Initialize() @@ -57,8 +55,8 @@ public override void ParseAfterModifiers(ItemProperties properties, ParsingItem continue; } - double.TryParse(matches[0].Groups[1].Value, NumberStyles.Any, CultureInfo.InvariantCulture, out var min); - double.TryParse(matches[0].Groups[2].Value, NumberStyles.Any, CultureInfo.InvariantCulture, out var max); + int.TryParse(matches[0].Groups[1].Value, NumberStyles.Any, CultureInfo.InvariantCulture, out var min); + int.TryParse(matches[0].Groups[2].Value, NumberStyles.Any, CultureInfo.InvariantCulture, out var max); var range = new DamageRange(min, max); if (isPhysical) properties.PhysicalDamage = range; @@ -86,8 +84,8 @@ private void ParseElementalDamage(ParsingLine line, ItemProperties itemPropertie continue; } - double.TryParse(match.Groups[1].Value, NumberStyles.Any, CultureInfo.InvariantCulture, out var min); - double.TryParse(match.Groups[2].Value, NumberStyles.Any, CultureInfo.InvariantCulture, out var max); + int.TryParse(match.Groups[1].Value, NumberStyles.Any, CultureInfo.InvariantCulture, out var min); + int.TryParse(match.Groups[2].Value, NumberStyles.Any, CultureInfo.InvariantCulture, out var max); var range = new DamageRange(min, max); var ids = itemMods[matchIndex].Modifiers.Where(x => x.Id != null).Select(x => x.Id!).ToList(); @@ -125,14 +123,14 @@ private void ParseElementalDamage(ParsingLine line, ItemProperties itemPropertie if (item.Properties.TotalDamage > 0) { - var filter = new DoublePropertyFilter(this) + var filter = new WeaponDamagePropertyFilter(this) { Text = localizer["Damage"], NormalizeEnabled = true, NormalizeValue = normalizeValue, - Value = item.Properties.TotalDamage ?? 0, + Value = item.Properties.TotalDamageWithQuality ?? 0, + OriginalValue = item.Properties.TotalDamage ?? 0, Checked = false, - IndentifyingKey = DamageKey, }; filter.NormalizeMinValue(); results.Add(filter); diff --git a/src/Sidekick.Apis.Poe/Parser/Properties/Filters/BooleanPropertyFilter.cs b/src/Sidekick.Apis.Poe/Parser/Properties/Filters/BooleanPropertyFilter.cs index c383e2385..6c53a1317 100644 --- a/src/Sidekick.Apis.Poe/Parser/Properties/Filters/BooleanPropertyFilter.cs +++ b/src/Sidekick.Apis.Poe/Parser/Properties/Filters/BooleanPropertyFilter.cs @@ -2,11 +2,6 @@ namespace Sidekick.Apis.Poe.Parser.Properties.Filters; public class BooleanPropertyFilter(PropertyDefinition definition) { - /// - /// Represents a key used to uniquely identify a property filter to do custom work on this filter. - /// - public string? IndentifyingKey { get; init; } - public bool ShowRow { get; init; } = true; public bool Checked { get; set; } diff --git a/src/Sidekick.Apis.Poe/Parser/Properties/Filters/DoublePropertyFilter.cs b/src/Sidekick.Apis.Poe/Parser/Properties/Filters/DoublePropertyFilter.cs index 8226b01eb..8d1bf8414 100644 --- a/src/Sidekick.Apis.Poe/Parser/Properties/Filters/DoublePropertyFilter.cs +++ b/src/Sidekick.Apis.Poe/Parser/Properties/Filters/DoublePropertyFilter.cs @@ -11,8 +11,14 @@ internal DoublePropertyFilter( public required double NormalizeValue { get; set; } + public string? ValuePrefix { get; set; } + + public string? ValueSuffix { get; set; } + public required double Value { get; set; } + public double OriginalValue { get; set; } + public double? Min { get; set; } public double? Max { get; set;} diff --git a/src/Sidekick.Apis.Poe/Parser/Properties/Filters/IntPropertyFilter.cs b/src/Sidekick.Apis.Poe/Parser/Properties/Filters/IntPropertyFilter.cs index 06a5df5fd..62a4070d3 100644 --- a/src/Sidekick.Apis.Poe/Parser/Properties/Filters/IntPropertyFilter.cs +++ b/src/Sidekick.Apis.Poe/Parser/Properties/Filters/IntPropertyFilter.cs @@ -11,8 +11,14 @@ internal IntPropertyFilter( public required double NormalizeValue { get; set; } + public string? ValuePrefix { get; set; } + + public string? ValueSuffix { get; set; } + public required int Value { get; set; } + public int OriginalValue { get; set; } + public int? Min { get; set; } public int? Max { get; set;} diff --git a/src/Sidekick.Apis.Poe/Parser/Properties/Filters/WeaponDamagePropertyFilter.cs b/src/Sidekick.Apis.Poe/Parser/Properties/Filters/WeaponDamagePropertyFilter.cs new file mode 100644 index 000000000..9c6b3dcc0 --- /dev/null +++ b/src/Sidekick.Apis.Poe/Parser/Properties/Filters/WeaponDamagePropertyFilter.cs @@ -0,0 +1,9 @@ +namespace Sidekick.Apis.Poe.Parser.Properties.Filters; + +public class WeaponDamagePropertyFilter : DoublePropertyFilter +{ + internal WeaponDamagePropertyFilter( + PropertyDefinition definition) : base(definition) + { + } +} diff --git a/src/Sidekick.Apis.Poe/Trade/TradeSearchService.cs b/src/Sidekick.Apis.Poe/Trade/TradeSearchService.cs index 06f86035e..5ee20ceb4 100644 --- a/src/Sidekick.Apis.Poe/Trade/TradeSearchService.cs +++ b/src/Sidekick.Apis.Poe/Trade/TradeSearchService.cs @@ -405,7 +405,7 @@ private TradeItem GetItem(GameType game, Result result) TotalDps = result.Item?.Extended?.DamagePerSecond ?? 0, ElementalDps = result.Item?.Extended?.ElementalDps ?? 0, PhysicalDps = result.Item?.Extended?.PhysicalDps ?? 0, - BaseDefencePercentile = result.Item?.Extended?.BaseDefencePercentile, + BaseDefencePercentile = result.Item?.Extended?.BaseDefencePercentile ?? 0, Influences = result.Item?.Influences ?? new(), }; diff --git a/src/Sidekick.Common.Blazor/Main.razor b/src/Sidekick.Common.Blazor/Main.razor index de47cd871..e955b6ac2 100644 --- a/src/Sidekick.Common.Blazor/Main.razor +++ b/src/Sidekick.Common.Blazor/Main.razor @@ -1,5 +1,6 @@ @using Microsoft.Extensions.Options; @using Sidekick.Common.Ui.Views +@using MudBlazor @inject IOptions Configuration; @inject IViewLocator ViewLocator @@ -25,3 +26,8 @@ + + + + + diff --git a/src/Sidekick.Common.Ui/Forms/FormCheckbox.razor b/src/Sidekick.Common.Ui/Forms/FormCheckbox.razor index ee09f14cf..9c35d45e9 100644 --- a/src/Sidekick.Common.Ui/Forms/FormCheckbox.razor +++ b/src/Sidekick.Common.Ui/Forms/FormCheckbox.razor @@ -4,9 +4,9 @@ @onmouseenter="OnMouseEnter" @onmousedown="OnMouseDown" @onclick:preventDefault="true" - class="leading-none peer-checked:[&_svg]:scale-100 peer-checked:text-zinc-600 [&_svg]:scale-0 peer-checked:[&_.custom-checkbox]:border-zinc-500 peer-checked:[&_.custom-checkbox]:bg-zinc-500 select-none flex items-center space-x-2"> + class="leading-none peer-checked:[&_svg.check]:scale-100 peer-checked:text-zinc-600 [&_svg.check]:scale-0 peer-checked:[&_.custom-checkbox]:border-zinc-500 peer-checked:[&_.custom-checkbox]:bg-zinc-500 select-none flex items-center space-x-2"> - + diff --git a/src/Sidekick.Common.Ui/Icons/IconSmall.razor b/src/Sidekick.Common.Ui/Icons/IconSmall.razor new file mode 100644 index 000000000..f884f23bb --- /dev/null +++ b/src/Sidekick.Common.Ui/Icons/IconSmall.razor @@ -0,0 +1,11 @@ +@code { + + [Parameter] + public required string Icon { get; set; } + + [Parameter] + public string Class { get; set; } = ""; + +} + +@((MarkupString)Icon) diff --git a/src/Sidekick.Common.Ui/Poe/Items/ItemPropertyText.razor b/src/Sidekick.Common.Ui/Poe/Items/ItemPropertyText.razor index c5af15f4c..7c8515a73 100644 --- a/src/Sidekick.Common.Ui/Poe/Items/ItemPropertyText.razor +++ b/src/Sidekick.Common.Ui/Poe/Items/ItemPropertyText.razor @@ -1,12 +1,26 @@ @using Sidekick.Apis.Poe.Trade.Models - - @Label + + @Label @if (OnlyShowLabel == false) { - : + @Value } + + @if (HasAdditionalInformation && AdditionalInformation != null) + { + + + + + + + + @AdditionalInformation + + + } @code { @@ -17,6 +31,12 @@ [Parameter] public string? Value { get; set; } + [Parameter] + public bool HasAdditionalInformation { get; set; } + + [Parameter] + public RenderFragment? AdditionalInformation { get; set; } + [Parameter] public LineContentType ContentType { get; set; } = LineContentType.Simple; diff --git a/src/Sidekick.Common.Ui/ServiceCollectionExtensions.cs b/src/Sidekick.Common.Ui/ServiceCollectionExtensions.cs index 2c560e558..11554ae44 100644 --- a/src/Sidekick.Common.Ui/ServiceCollectionExtensions.cs +++ b/src/Sidekick.Common.Ui/ServiceCollectionExtensions.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.DependencyInjection; +using MudBlazor.Services; using Sidekick.Common.Ui.Views; namespace Sidekick.Common.Ui; @@ -8,6 +9,7 @@ public static class ServiceCollectionExtensions public static IServiceCollection AddSidekickCommonUi(this IServiceCollection services) { services.AddSingleton(); + services.AddMudServices(); return services; } diff --git a/src/Sidekick.Common.Ui/Sidekick.Common.Ui.csproj b/src/Sidekick.Common.Ui/Sidekick.Common.Ui.csproj index 25293dccf..f48180d71 100644 --- a/src/Sidekick.Common.Ui/Sidekick.Common.Ui.csproj +++ b/src/Sidekick.Common.Ui/Sidekick.Common.Ui.csproj @@ -9,6 +9,7 @@ + @@ -21,11 +22,6 @@ - - - - - diff --git a/src/Sidekick.Common.Ui/Tooltips/TooltipBottomRight.razor b/src/Sidekick.Common.Ui/Tooltips/TooltipBottomRight.razor deleted file mode 100644 index e8efe0d63..000000000 --- a/src/Sidekick.Common.Ui/Tooltips/TooltipBottomRight.razor +++ /dev/null @@ -1,19 +0,0 @@ - -
- @ChildContent - -
- @TooltipContent -
-
- - -@code { - - [Parameter] - public RenderFragment? ChildContent { get; set; } - - [Parameter] - public RenderFragment? TooltipContent { get; set; } - -} diff --git a/src/Sidekick.Common.Ui/Tooltips/TooltipHint.razor b/src/Sidekick.Common.Ui/Tooltips/TooltipHint.razor index 9ffdd6918..33018816f 100644 --- a/src/Sidekick.Common.Ui/Tooltips/TooltipHint.razor +++ b/src/Sidekick.Common.Ui/Tooltips/TooltipHint.razor @@ -1,32 +1,14 @@ + + +
+ +
+
-@if (Bottom) -{ - - -
- -
-
- - - @Text - -
-} -else -{ - - -
- -
-
- - - @Text - -
-} + + @Text + +
@code { diff --git a/src/Sidekick.Common.Ui/Tooltips/TooltipRight.razor b/src/Sidekick.Common.Ui/Tooltips/TooltipRight.razor new file mode 100644 index 000000000..9bb3b78c4 --- /dev/null +++ b/src/Sidekick.Common.Ui/Tooltips/TooltipRight.razor @@ -0,0 +1,23 @@ +@using MudBlazor + + + + @ChildContent + + +
+ @TooltipContent +
+
+
+ + +@code { + + [Parameter] + public RenderFragment? ChildContent { get; set; } + + [Parameter] + public RenderFragment? TooltipContent { get; set; } + +} diff --git a/src/Sidekick.Common.Ui/Tooltips/TooltipTopRight.razor b/src/Sidekick.Common.Ui/Tooltips/TooltipTopRight.razor deleted file mode 100644 index 41bba13e1..000000000 --- a/src/Sidekick.Common.Ui/Tooltips/TooltipTopRight.razor +++ /dev/null @@ -1,19 +0,0 @@ - -
- @ChildContent - -
- @TooltipContent -
-
- - -@code { - - [Parameter] - public RenderFragment? ChildContent { get; set; } - - [Parameter] - public RenderFragment? TooltipContent { get; set; } - -} diff --git a/src/Sidekick.Common.Ui/UiIcons.cs b/src/Sidekick.Common.Ui/UiIcons.cs index 439399b1d..ea47f711f 100644 --- a/src/Sidekick.Common.Ui/UiIcons.cs +++ b/src/Sidekick.Common.Ui/UiIcons.cs @@ -20,5 +20,7 @@ public static class UiIcons public const string Collapse = "\r\n \r\n\r\n"; - public const string External = "\r\n \r\n\r\n"; + public const string External = "\r\n "; + + public const string PlusBox = ""; } diff --git a/src/Sidekick.Common.Ui/wwwroot/css/app.css b/src/Sidekick.Common.Ui/wwwroot/css/app.css index 1c814c949..3f7ef1e70 100644 --- a/src/Sidekick.Common.Ui/wwwroot/css/app.css +++ b/src/Sidekick.Common.Ui/wwwroot/css/app.css @@ -1327,10 +1327,6 @@ video { bottom: 0px; } -.bottom-\[calc\(100\%\+2px\)\] { - bottom: calc(100% + 2px); -} - .end-1 { inset-inline-end: 0.25rem; } @@ -1391,10 +1387,6 @@ video { top: 35%; } -.top-\[calc\(100\%\+2px\)\] { - top: calc(100% + 2px); -} - .top-full { top: 100%; } @@ -1480,6 +1472,16 @@ video { margin-right: -0.25rem; } +.-mx-2 { + margin-left: -0.5rem; + margin-right: -0.5rem; +} + +.-my-1 { + margin-top: -0.25rem; + margin-bottom: -0.25rem; +} + .-my-2 { margin-top: -0.5rem; margin-bottom: -0.5rem; @@ -1500,11 +1502,6 @@ video { margin-bottom: 0px; } -.my-1 { - margin-top: 0.25rem; - margin-bottom: 0.25rem; -} - .my-2 { margin-top: 0.5rem; margin-bottom: 0.5rem; @@ -1536,14 +1533,14 @@ video { margin-bottom: 0.75rem; } -.mb-4 { - margin-bottom: 1rem; -} - .ml-0 { margin-left: 0px; } +.ml-1 { + margin-left: 0.25rem; +} + .ml-2 { margin-left: 0.5rem; } @@ -1564,22 +1561,10 @@ video { margin-left: auto; } -.mr-1 { - margin-right: 0.25rem; -} - .mr-2 { margin-right: 0.5rem; } -.mr-3 { - margin-right: 0.75rem; -} - -.mr-4 { - margin-right: 1rem; -} - .mt-1 { margin-top: 0.25rem; } @@ -1596,10 +1581,6 @@ video { margin-top: 1rem; } -.mt-6 { - margin-top: 1.5rem; -} - .mt-9 { margin-top: 2.25rem; } @@ -1727,6 +1708,10 @@ video { height: 1.5rem; } +.h-\[0\.8em\] { + height: 0.8em; +} + .h-\[1em\] { height: 1em; } @@ -1791,6 +1776,10 @@ video { min-height: 1.5rem; } +.min-h-\[0\.8em\] { + min-height: 0.8em; +} + .min-h-\[1em\] { min-height: 1em; } @@ -1843,6 +1832,10 @@ video { width: 1.5rem; } +.w-\[0\.8em\] { + width: 0.8em; +} + .w-\[19rem\] { width: 19rem; } @@ -1875,11 +1868,6 @@ video { width: 100%; } -.w-max { - width: -moz-max-content; - width: max-content; -} - .min-w-0 { min-width: 0px; } @@ -1892,6 +1880,10 @@ video { min-width: 1.5rem; } +.min-w-\[0\.8em\] { + min-width: 0.8em; +} + .min-w-\[1em\] { min-width: 1em; } @@ -1940,10 +1932,6 @@ video { flex-grow: 1; } -.flex-grow-0 { - flex-grow: 0; -} - .grow { flex-grow: 1; } @@ -2822,6 +2810,10 @@ video { border-radius: 0.375rem; } +.rounded-sm { + border-radius: 0.125rem; +} + .rounded-b { border-bottom-right-radius: 0.25rem; border-bottom-left-radius: 0.25rem; @@ -3332,8 +3324,9 @@ video { padding-bottom: 1rem; } -.pb-0 { - padding-bottom: 0px; +.py-\[2px\] { + padding-top: 2px; + padding-bottom: 2px; } .pb-2 { @@ -3352,10 +3345,6 @@ video { padding-bottom: 4px; } -.pl-12 { - padding-left: 3rem; -} - .pl-2 { padding-left: 0.5rem; } @@ -3372,22 +3361,6 @@ video { padding-right: 0.5rem; } -.pr-4 { - padding-right: 1rem; -} - -.pt-0 { - padding-top: 0px; -} - -.pt-2 { - padding-top: 0.5rem; -} - -.pt-4 { - padding-top: 1rem; -} - .pt-\[4px\] { padding-top: 4px; } @@ -4328,10 +4301,6 @@ video { opacity: 1; } -.group\/tooltip:hover .group-hover\/tooltip\:opacity-100 { - opacity: 1; -} - .peer:checked ~ .peer-checked\:text-zinc-600 { --tw-text-opacity: 1; color: rgb(82 82 91 / var(--tw-text-opacity)); @@ -4432,6 +4401,18 @@ video { background-color: rgb(113 113 122 / var(--tw-bg-opacity)); } +.\[\&_svg\.check\]\:scale-0 svg.check { + --tw-scale-x: 0; + --tw-scale-y: 0; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.peer:checked ~ .peer-checked\:\[\&_svg\.check\]\:scale-100 svg.check { + --tw-scale-x: 1; + --tw-scale-y: 1; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + .\[\&_svg\]\:scale-0 svg { --tw-scale-x: 0; --tw-scale-y: 0; diff --git a/src/Sidekick.Common/Game/Items/DamageRange.cs b/src/Sidekick.Common/Game/Items/DamageRange.cs index 6bf1f7e03..41d15d5b4 100644 --- a/src/Sidekick.Common/Game/Items/DamageRange.cs +++ b/src/Sidekick.Common/Game/Items/DamageRange.cs @@ -1,10 +1,10 @@ namespace Sidekick.Common.Game.Items; -public class DamageRange(double min, double max) +public class DamageRange(int min, int max) { - public double Min { get; init; } = min; + public int Min { get; init; } = min; - public double Max { get; init; } = max; + public int Max { get; init; } = max; public override string ToString() { @@ -18,6 +18,6 @@ public string ToDisplayString() public double GetDps(double attacksPerSecond) { - return Math.Round(((Min + Max) / 2) * attacksPerSecond, 1); + return Math.Round(((Min + Max) / 2d) * attacksPerSecond, 1); } } diff --git a/src/Sidekick.Common/Game/Items/ItemProperties.cs b/src/Sidekick.Common/Game/Items/ItemProperties.cs index 39911d99e..ace4ac379 100644 --- a/src/Sidekick.Common/Game/Items/ItemProperties.cs +++ b/src/Sidekick.Common/Game/Items/ItemProperties.cs @@ -10,10 +10,18 @@ public class ItemProperties public int Armour { get; set; } + public int ArmourWithQuality => CalculateValueWithQuality(Armour); + public int EnergyShield { get; set; } + public int EnergyShieldWithQuality => CalculateValueWithQuality(EnergyShield); + public int EvasionRating { get; set; } + public int EvasionRatingWithQuality => CalculateValueWithQuality(EvasionRating); + + public int BaseDefencePercentile { get; init; } + public int BlockChance { get; set; } public int Quality { get; set; } @@ -42,6 +50,18 @@ public class ItemProperties public DamageRange? PhysicalDamage { get; set; } + public DamageRange? PhysicalDamageWithQuality + { + get + { + if(PhysicalDamage == null) return null; + + var min = CalculateValueWithQuality(PhysicalDamage.Min); + var max = CalculateValueWithQuality(PhysicalDamage.Max); + return new DamageRange(min, max); + } + } + public DamageRange? FireDamage { get; set; } public DamageRange? ColdDamage { get; set; } @@ -59,7 +79,7 @@ public double? PhysicalDps if (physicalDpsOverride != null) return physicalDpsOverride; var total = 0d; - if (PhysicalDamage != null) total += PhysicalDamage.GetDps(AttacksPerSecond); + if (PhysicalDamageWithQuality != null) total += PhysicalDamageWithQuality.GetDps(AttacksPerSecond); return total; } @@ -109,7 +129,7 @@ public double? TotalDps if (totalDpsOverride != null) return totalDpsOverride; var total = 0d; - if (PhysicalDamage != null) total += PhysicalDamage.GetDps(AttacksPerSecond); + if (PhysicalDamageWithQuality != null) total += PhysicalDamageWithQuality.GetDps(AttacksPerSecond); if (FireDamage != null) total += FireDamage.GetDps(AttacksPerSecond); if (ColdDamage != null) total += ColdDamage.GetDps(AttacksPerSecond); if (LightningDamage != null) total += LightningDamage.GetDps(AttacksPerSecond); @@ -125,15 +145,42 @@ public double? TotalDamage get { var total = 0d; - if (PhysicalDamage != null) total += (PhysicalDamage.Min + PhysicalDamage.Max) / 2; - if (FireDamage != null) total += (FireDamage.Min + FireDamage.Max) / 2; - if (ColdDamage != null) total += (ColdDamage.Min + ColdDamage.Max) / 2; - if (LightningDamage != null) total += (LightningDamage.Min + LightningDamage.Max) / 2; - if (ChaosDamage != null) total += (ChaosDamage.Min + ChaosDamage.Max) / 2; + if (PhysicalDamage != null) total += (PhysicalDamage.Min + PhysicalDamage.Max) / 2d; + if (FireDamage != null) total += (FireDamage.Min + FireDamage.Max) / 2d; + if (ColdDamage != null) total += (ColdDamage.Min + ColdDamage.Max) / 2d; + if (LightningDamage != null) total += (LightningDamage.Min + LightningDamage.Max) / 2d; + if (ChaosDamage != null) total += (ChaosDamage.Min + ChaosDamage.Max) / 2d; + + return total; + } + } + + public double? TotalDamageWithQuality + { + get + { + var total = 0d; + if (PhysicalDamageWithQuality != null) total += (PhysicalDamageWithQuality.Min + PhysicalDamageWithQuality.Max) / 2d; + if (FireDamage != null) total += (FireDamage.Min + FireDamage.Max) / 2d; + if (ColdDamage != null) total += (ColdDamage.Min + ColdDamage.Max) / 2d; + if (LightningDamage != null) total += (LightningDamage.Min + LightningDamage.Max) / 2d; + if (ChaosDamage != null) total += (ChaosDamage.Min + ChaosDamage.Max) / 2d; return total; } } - public int? BaseDefencePercentile { get; init; } + public int CalculateValueWithQuality(int value) + { + if (Quality >= 20) + { + return value; + } + + // Step 1: Calculate the base value (value at 0% quality) + var baseValue = Math.Round(value / (1 + Quality / 100d), MidpointRounding.ToPositiveInfinity); + + // Step 2: Adjust the base value for the target quality + return (int)(baseValue * 1.2); + } } diff --git a/src/Sidekick.Modules.Trade/Components/Filters/DoublePropertyFilterComponent.razor b/src/Sidekick.Modules.Trade/Components/Filters/DoublePropertyFilterComponent.razor deleted file mode 100644 index 05fce5632..000000000 --- a/src/Sidekick.Modules.Trade/Components/Filters/DoublePropertyFilterComponent.razor +++ /dev/null @@ -1,106 +0,0 @@ -@using Sidekick.Apis.Poe.Parser.Properties.Definitions -@using Sidekick.Apis.Poe.Parser.Properties.Filters -@using Sidekick.Apis.Poe.Trade.Models -@using Sidekick.Common.Game.Languages -@using Sidekick.Common.Settings - - -
-
- - @if (Filter.IndentifyingKey== WeaponDamageProperty.DamageKey) - { - if (PriceCheckService.Item?.Properties.PhysicalDamage != null) - { - - } - - if (PriceCheckService.Item?.Properties.FireDamage != null) - { - - } - - if (PriceCheckService.Item?.Properties.ColdDamage != null) - { - - } - - if (PriceCheckService.Item?.Properties.LightningDamage != null) - { - - } - - if (PriceCheckService.Item?.Properties.ChaosDamage != null) - { - - } - } - else - { - - } - -
- - @if (Filter.Checked) - { - - } -
-
- -@inject PriceCheckService PriceCheckService -@inject IGameLanguageProvider GameLanguageProvider -@inject ISettingsService SettingsService - -@code { - - [Parameter] - public required DoublePropertyFilter Filter { get; set; } - - private async void CheckedChanged(bool value) - { - Filter.Checked = value; - - // We can change the settings in the Trade window, so we should fetch here every time. - Filter.NormalizeValue = await SettingsService.GetObject(SettingKeys.PriceCheckNormalizeValue); - Filter.NormalizeMinValue(); - } - - private void TypeChanged(FilterRange.RangeType type) - { - switch (type) - { - case FilterRange.RangeType.Minimum: - Filter.NormalizeMinValue(); - Filter.Max = null; - break; - - case FilterRange.RangeType.Maximum: - Filter.NormalizeMaxValue(); - Filter.Min = null; - break; - - case FilterRange.RangeType.Equals: Filter.SetExactValue(); break; - - case FilterRange.RangeType.Range: - Filter.NormalizeMinValue(); - Filter.NormalizeMaxValue(); - break; - } - } - -} diff --git a/src/Sidekick.Modules.Trade/Components/Filters/FiltersComponent.razor b/src/Sidekick.Modules.Trade/Components/Filters/FiltersComponent.razor index a741ee7f9..37fdcd3b6 100644 --- a/src/Sidekick.Modules.Trade/Components/Filters/FiltersComponent.razor +++ b/src/Sidekick.Modules.Trade/Components/Filters/FiltersComponent.razor @@ -6,6 +6,7 @@ @using Sidekick.Modules.Trade.Localization @using Sidekick.Modules.Trade.Components.Prices @using ItemHeader = Sidekick.Common.Ui.Poe.Items.ItemHeader +@using Sidekick.Modules.Trade.Components.Filters.Properties @if (PriceCheckService.Item == null) { @@ -38,6 +39,7 @@ switch (filter) { case IntPropertyFilter intFilter: break; + case WeaponDamagePropertyFilter weaponDamageFilter: break; case DoublePropertyFilter doubleFilter: break; case TriStatePropertyFilter triStateFilter: break; case not null when filter.Definition is SeparatorProperty: break; diff --git a/src/Sidekick.Modules.Trade/Components/Filters/IntPropertyFilterComponent.razor b/src/Sidekick.Modules.Trade/Components/Filters/IntPropertyFilterComponent.razor deleted file mode 100644 index bcc955063..000000000 --- a/src/Sidekick.Modules.Trade/Components/Filters/IntPropertyFilterComponent.razor +++ /dev/null @@ -1,120 +0,0 @@ -@using Sidekick.Apis.Poe.Parser.Properties.Definitions -@using Sidekick.Apis.Poe.Parser.Properties.Filters -@using Sidekick.Apis.Poe.Trade.Models -@using Sidekick.Common.Game.Languages -@using Sidekick.Common.Settings - - -
-
- - @if (Filter.IndentifyingKey == WeaponDamageProperty.DamageKey) - { - if (PriceCheckService.Item?.Properties.PhysicalDamage != null) - { - - } - - if (PriceCheckService.Item?.Properties.FireDamage != null) - { - - } - - if (PriceCheckService.Item?.Properties.ColdDamage != null) - { - - } - - if (PriceCheckService.Item?.Properties.LightningDamage != null) - { - - } - - if (PriceCheckService.Item?.Properties.ChaosDamage != null) - { - - } - } - else - { - - } - -
- - @if (Filter.Checked) - { - - } -
-
- -@inject PriceCheckService PriceCheckService -@inject IGameLanguageProvider GameLanguageProvider -@inject ISettingsService SettingsService - -@code { - - [Parameter] - public required IntPropertyFilter Filter { get; set; } - - private async void CheckedChanged(bool value) - { - Filter.Checked = value; - - // We can change the settings in the Trade window, so we should fetch here every time. - Filter.NormalizeValue = await SettingsService.GetObject(SettingKeys.PriceCheckNormalizeValue); - Filter.NormalizeMinValue(); - } - - private void MinChanged(double? value) - { - Filter.Min = value != null ? (int)value : null; - } - - private void MaxChanged(double? value) - { - Filter.Max = value != null ? (int)value : null; - } - - private void TypeChanged(FilterRange.RangeType type) - { - switch (type) - { - case FilterRange.RangeType.Minimum: - Filter.NormalizeMinValue(); - Filter.Max = null; - break; - - case FilterRange.RangeType.Maximum: - Filter.NormalizeMaxValue(); - Filter.Min = null; - break; - - case FilterRange.RangeType.Equals: Filter.SetExactValue(); break; - - case FilterRange.RangeType.Range: - Filter.NormalizeMinValue(); - Filter.NormalizeMaxValue(); - break; - } - } - -} diff --git a/src/Sidekick.Modules.Trade/Components/Filters/ModifierFilterComponent.razor b/src/Sidekick.Modules.Trade/Components/Filters/ModifierFilterComponent.razor index 69112a91d..54036bdab 100644 --- a/src/Sidekick.Modules.Trade/Components/Filters/ModifierFilterComponent.razor +++ b/src/Sidekick.Modules.Trade/Components/Filters/ModifierFilterComponent.razor @@ -29,7 +29,7 @@ } && Filter.FirstCategory != ModifierCategory.Explicit) { - + @Resources["Selecting this checkbox will force this specific category in the results. Unchecking allows for all modifier categories in the results (explicit, crafted, fractured, etc.)."] - + }
diff --git a/src/Sidekick.Modules.Trade/Components/Filters/BooleanPropertyFilterComponent.razor b/src/Sidekick.Modules.Trade/Components/Filters/Properties/BooleanPropertyFilterComponent.razor similarity index 100% rename from src/Sidekick.Modules.Trade/Components/Filters/BooleanPropertyFilterComponent.razor rename to src/Sidekick.Modules.Trade/Components/Filters/Properties/BooleanPropertyFilterComponent.razor diff --git a/src/Sidekick.Modules.Trade/Components/Filters/Properties/DoublePropertyFilterComponent.razor b/src/Sidekick.Modules.Trade/Components/Filters/Properties/DoublePropertyFilterComponent.razor new file mode 100644 index 000000000..191bfb052 --- /dev/null +++ b/src/Sidekick.Modules.Trade/Components/Filters/Properties/DoublePropertyFilterComponent.razor @@ -0,0 +1,74 @@ +@using Sidekick.Apis.Poe.Parser.Properties.Filters +@using Sidekick.Common.Game.Languages +@using Sidekick.Modules.Trade.Localization +@using Sidekick.Common.Settings + + +
+
+ + + + + + + + +
+ + @if (Filter.Checked) + { + + } +
+
+ +@inject IStringLocalizer Resources +@inject PriceCheckService PriceCheckService +@inject IGameLanguageProvider GameLanguageProvider +@inject ISettingsService SettingsService + +@code { + + [Parameter] + public required DoublePropertyFilter Filter { get; set; } + + private async void CheckedChanged(bool value) + { + Filter.Checked = value; + + // We can change the settings in the Trade window, so we should fetch here every time. + Filter.NormalizeValue = await SettingsService.GetObject(SettingKeys.PriceCheckNormalizeValue); + Filter.NormalizeMinValue(); + } + + private void TypeChanged(FilterRange.RangeType type) + { + switch (type) + { + case FilterRange.RangeType.Minimum: + Filter.NormalizeMinValue(); + Filter.Max = null; + break; + + case FilterRange.RangeType.Maximum: + Filter.NormalizeMaxValue(); + Filter.Min = null; + break; + + case FilterRange.RangeType.Equals: Filter.SetExactValue(); break; + + case FilterRange.RangeType.Range: + Filter.NormalizeMinValue(); + Filter.NormalizeMaxValue(); + break; + } + } + +} diff --git a/src/Sidekick.Modules.Trade/Components/Filters/Properties/IntPropertyFilterComponent.razor b/src/Sidekick.Modules.Trade/Components/Filters/Properties/IntPropertyFilterComponent.razor new file mode 100644 index 000000000..80fb98868 --- /dev/null +++ b/src/Sidekick.Modules.Trade/Components/Filters/Properties/IntPropertyFilterComponent.razor @@ -0,0 +1,90 @@ +@using Sidekick.Apis.Poe.Parser.Properties.Definitions +@using Sidekick.Apis.Poe.Parser.Properties.Filters +@using Sidekick.Apis.Poe.Trade.Models +@using Sidekick.Common.Game.Languages +@using Sidekick.Modules.Trade.Localization +@using Sidekick.Common.Settings + + +
+
+ + + + + + + + +
+ + @if (Filter.Checked) + { + + } +
+
+ +@inject IStringLocalizer Resources +@inject PriceCheckService PriceCheckService +@inject IGameLanguageProvider GameLanguageProvider +@inject ISettingsService SettingsService + +@code { + + [Parameter] + public required IntPropertyFilter Filter { get; set; } + + private async void CheckedChanged(bool value) + { + Filter.Checked = value; + + // We can change the settings in the Trade window, so we should fetch here every time. + Filter.NormalizeValue = await SettingsService.GetObject(SettingKeys.PriceCheckNormalizeValue); + Filter.NormalizeMinValue(); + } + + private void MinChanged(double? value) + { + Filter.Min = value != null ? (int)value : null; + } + + private void MaxChanged(double? value) + { + Filter.Max = value != null ? (int)value : null; + } + + private void TypeChanged(FilterRange.RangeType type) + { + switch (type) + { + case FilterRange.RangeType.Minimum: + Filter.NormalizeMinValue(); + Filter.Max = null; + break; + + case FilterRange.RangeType.Maximum: + Filter.NormalizeMaxValue(); + Filter.Min = null; + break; + + case FilterRange.RangeType.Equals: Filter.SetExactValue(); break; + + case FilterRange.RangeType.Range: + Filter.NormalizeMinValue(); + Filter.NormalizeMaxValue(); + break; + } + } + +} diff --git a/src/Sidekick.Modules.Trade/Components/Filters/TriStatePropertyFilterComponent.razor b/src/Sidekick.Modules.Trade/Components/Filters/Properties/TriStatePropertyFilterComponent.razor similarity index 100% rename from src/Sidekick.Modules.Trade/Components/Filters/TriStatePropertyFilterComponent.razor rename to src/Sidekick.Modules.Trade/Components/Filters/Properties/TriStatePropertyFilterComponent.razor diff --git a/src/Sidekick.Modules.Trade/Components/Filters/Properties/WeaponDamagePropertyFilterComponent.razor b/src/Sidekick.Modules.Trade/Components/Filters/Properties/WeaponDamagePropertyFilterComponent.razor new file mode 100644 index 000000000..0aba9e592 --- /dev/null +++ b/src/Sidekick.Modules.Trade/Components/Filters/Properties/WeaponDamagePropertyFilterComponent.razor @@ -0,0 +1,109 @@ +@using Sidekick.Apis.Poe.Parser.Properties.Filters +@using Sidekick.Apis.Poe.Trade.Models +@using Sidekick.Common.Game.Languages +@using Sidekick.Modules.Trade.Localization +@using Sidekick.Common.Settings + + +
+
+ + @if (PriceCheckService.Item?.Properties.PhysicalDamage != null && PriceCheckService.Item?.Properties.PhysicalDamageWithQuality != null) + { + + + + + + + } + + @if (PriceCheckService.Item?.Properties.FireDamage != null) + { + + } + + @if (PriceCheckService.Item?.Properties.ColdDamage != null) + { + + } + + @if (PriceCheckService.Item?.Properties.LightningDamage != null) + { + + } + + @if (PriceCheckService.Item?.Properties.ChaosDamage != null) + { + + } + +
+ + @if (Filter.Checked) + { + + } +
+
+ +@inject IStringLocalizer Resources +@inject PriceCheckService PriceCheckService +@inject IGameLanguageProvider GameLanguageProvider +@inject ISettingsService SettingsService + +@code { + + [Parameter] + public required WeaponDamagePropertyFilter Filter { get; set; } + + private async void CheckedChanged(bool value) + { + Filter.Checked = value; + + // We can change the settings in the Trade window, so we should fetch here every time. + Filter.NormalizeValue = await SettingsService.GetObject(SettingKeys.PriceCheckNormalizeValue); + Filter.NormalizeMinValue(); + } + + private void TypeChanged(FilterRange.RangeType type) + { + switch (type) + { + case FilterRange.RangeType.Minimum: + Filter.NormalizeMinValue(); + Filter.Max = null; + break; + + case FilterRange.RangeType.Maximum: + Filter.NormalizeMaxValue(); + Filter.Min = null; + break; + + case FilterRange.RangeType.Equals: Filter.SetExactValue(); break; + + case FilterRange.RangeType.Range: + Filter.NormalizeMinValue(); + Filter.NormalizeMaxValue(); + break; + } + } + +} diff --git a/src/Sidekick.Modules.Trade/Components/Items/ItemProperties.razor b/src/Sidekick.Modules.Trade/Components/Items/ItemProperties.razor index 254352e12..f832908bd 100644 --- a/src/Sidekick.Modules.Trade/Components/Items/ItemProperties.razor +++ b/src/Sidekick.Modules.Trade/Components/Items/ItemProperties.razor @@ -7,7 +7,7 @@ { } - @if (Item.Properties.BaseDefencePercentile.HasValue) + @if (Item.Properties.BaseDefencePercentile > 0) { } diff --git a/src/Sidekick.Modules.Trade/Components/OilAnointment.razor b/src/Sidekick.Modules.Trade/Components/OilAnointment.razor index b43b972fc..fdebc9243 100644 --- a/src/Sidekick.Modules.Trade/Components/OilAnointment.razor +++ b/src/Sidekick.Modules.Trade/Components/OilAnointment.razor @@ -2,14 +2,14 @@ @foreach (var oilName in OilNames) {
- + @oilName @oilName - +
} diff --git a/src/Sidekick.Modules.Trade/Components/Options/OpenWebsiteLink.razor b/src/Sidekick.Modules.Trade/Components/Options/OpenWebsiteLink.razor index 1a2dc5983..50abe8e00 100644 --- a/src/Sidekick.Modules.Trade/Components/Options/OpenWebsiteLink.razor +++ b/src/Sidekick.Modules.Trade/Components/Options/OpenWebsiteLink.razor @@ -6,7 +6,7 @@ @if (!string.IsNullOrEmpty(QueryId)) { - +