diff --git a/apps/frontend/components/home/table/row/HomeTableRowProfessionConcentration.svelte b/apps/frontend/components/home/table/row/HomeTableRowProfessionConcentration.svelte index 62fd71381..dbc37648d 100644 --- a/apps/frontend/components/home/table/row/HomeTableRowProfessionConcentration.svelte +++ b/apps/frontend/components/home/table/row/HomeTableRowProfessionConcentration.svelte @@ -2,16 +2,13 @@ import sortBy from 'lodash/sortBy'; import { Constants } from '@/data/constants'; - import { imageStrings } from '@/data/icons'; import { expansionProfessionConcentration } from '@/data/professions/cooldowns'; import { settingsState } from '@/shared/state/settings.svelte'; import { wowthingData } from '@/shared/stores/data'; - import { timeStore } from '@/shared/stores/time'; - import { getCurrencyData } from '@/utils/characters/get-currency-data'; import { getProfessionSortKey } from '@/utils/professions'; import type { CharacterProps } from '@/types/props'; - import WowthingImage from '@/shared/components/images/sources/WowthingImage.svelte'; + import Currency from '@/shared/components/currencies/Currency.svelte'; type Props = CharacterProps & { expansion: number }; let { character, expansion }: Props = $props(); @@ -33,18 +30,6 @@ (prof) => getProfessionSortKey(prof) ) ); - - function statusClass(fullIsBad: boolean, percent: number) { - if (percent >= 100) { - return fullIsBad ? 'status-fail' : 'status-success'; - } else if (percent >= 75) { - return fullIsBad ? 'status-warn' : 'status-shrug'; - } else if (percent > 25 && percent < 75) { - return fullIsBad ? 'status-shrug' : 'status-warn'; - } else { - return fullIsBad ? 'status-success' : 'status-fail'; - } - }
@@ -128,29 +97,14 @@ {#if current} {#each fields as field (field)} {#if field === 'concentration' && showConcentration} - {#if concData} - {@const { amount, percent, tooltip } = concData} - {@const status = statusClass( - settingsState.value.professions.fullConcentrationIsBad, - percent - )} -
- - {amount} -
- {:else} -
- {/if} + {:else if field === 'moxie' && showMoxie} - {#if moxieData} - {@const { amount, tooltip } = moxieData} -
- - {amount} -
- {:else} -
- {/if} + {/if} {/each} {/if} diff --git a/apps/frontend/shared/components/currencies/Currency.svelte b/apps/frontend/shared/components/currencies/Currency.svelte new file mode 100644 index 000000000..57b6d4bde --- /dev/null +++ b/apps/frontend/shared/components/currencies/Currency.svelte @@ -0,0 +1,49 @@ + + + + +{#if data} + {@const { amount, percent, tooltip } = data} + {@const status = useStatusClass ? statusClass(percent) : ''} +
+ + {amount} +
+{:else} +
+{/if} diff --git a/apps/frontend/types/character/character.svelte.ts b/apps/frontend/types/character/character.svelte.ts index 47f91f1aa..ba2f61aee 100644 --- a/apps/frontend/types/character/character.svelte.ts +++ b/apps/frontend/types/character/character.svelte.ts @@ -125,6 +125,8 @@ export class Character implements ContainsItems, HasNameAndRealm { public lastSeenAddonUnix = $state(0); public scannedCurrencies: DateTime = $state(undefined); public scannedCurrenciesUnix = $state(0); + public transferredCurrencies: DateTime = $state(undefined); + public transferredCurrenciesUnix = $state(0); public quests = $state(undefined); @@ -194,6 +196,7 @@ export class Character implements ContainsItems, HasNameAndRealm { dailyResetUnix: number, weeklyResetUnix: number, scannedCurrenciesUnix: number, + transferredCurrenciesUnix: number, configuration: CharacterConfiguration, @@ -252,6 +255,7 @@ export class Character implements ContainsItems, HasNameAndRealm { this.lastApiUpdateUnix = lastApiUpdateUnix; this.lastSeenAddonUnix = lastSeenAddonUnix; this.scannedCurrenciesUnix = scannedCurrenciesUnix; + this.transferredCurrenciesUnix = transferredCurrenciesUnix; this.configuration = configuration; this.auras = auras; @@ -488,6 +492,10 @@ export class Character implements ContainsItems, HasNameAndRealm { if (scannedCurrenciesUnix && scannedCurrenciesUnix > Constants.defaultUnixTime) { this.scannedCurrencies = DateTime.fromSeconds(scannedCurrenciesUnix); } + + if (transferredCurrenciesUnix && transferredCurrenciesUnix > Constants.defaultUnixTime) { + this.transferredCurrencies = DateTime.fromSeconds(transferredCurrenciesUnix); + } } hidden = $derived.by( @@ -543,7 +551,7 @@ export class Character implements ContainsItems, HasNameAndRealm { public currencies = $derived.by(() => { const ret: Record = {}; - const now = timeState.slowTime; + const now = timeState.time; for (const characterCurrency of Object.values(this.currencyObjects)) { let newCurrency = characterCurrency; diff --git a/apps/web/Converters/ApiUserCharacterConverter.cs b/apps/web/Converters/ApiUserCharacterConverter.cs index 620f6d977..64bb630e8 100644 --- a/apps/web/Converters/ApiUserCharacterConverter.cs +++ b/apps/web/Converters/ApiUserCharacterConverter.cs @@ -40,35 +40,36 @@ public override void Write(Utf8JsonWriter writer, ApiUserCharacter character, Js writer.WriteNumberValue(character.DailyReset?.ToUnixTimeSeconds() ?? 0); // 23 writer.WriteNumberValue(character.WeeklyReset?.ToUnixTimeSeconds() ?? 0); // 24 writer.WriteNumberValue(character.ScannedCurrencies?.ToUnixTimeSeconds() ?? 0); // 25 + writer.WriteNumberValue(character.TransferredCurrencies?.ToUnixTimeSeconds() ?? 0); // 26 - JsonSerializer.Serialize(writer, character.Configuration, options); // 26 + JsonSerializer.Serialize(writer, character.Configuration, options); // 27 - JsonSerializer.Serialize(writer, character.Auras, options); // 27 - JsonSerializer.Serialize(writer, character.EquippedItems, options); // 28 - JsonSerializer.Serialize(writer, character.Garrisons, options); // 29 - JsonSerializer.Serialize(writer, character.GarrisonTrees, options); // 30 - JsonSerializer.Serialize(writer, character.HighestItemLevel, options); // 31 - JsonSerializer.Serialize(writer, character.KnownSpells, options); // 32 - JsonSerializer.Serialize(writer, character.Lockouts, options); // 33 - JsonSerializer.Serialize(writer, character.MythicPlus, options); // 34 - JsonSerializer.Serialize(writer, character.MythicPlusAddon, options); // 35 - JsonSerializer.Serialize(writer, character.MythicPlusSeasons, options); // 36 - JsonSerializer.Serialize(writer, character.Paragons, options); // 37 - JsonSerializer.Serialize(writer, character.PatronOrders, options); // 38 - JsonSerializer.Serialize(writer, character.Professions, options); // 39 - JsonSerializer.Serialize(writer, character.ProfessionCooldowns, options); // 40 - JsonSerializer.Serialize(writer, character.ProfessionSpecializations, options); // 41 - JsonSerializer.Serialize(writer, character.ProfessionTraits, options); // 42 - JsonSerializer.Serialize(writer, character.RaiderIo, options); // 43 - JsonSerializer.Serialize(writer, character.Reputations, options); // 44 - JsonSerializer.Serialize(writer, character.Shadowlands, options); // 45 - JsonSerializer.Serialize(writer, character.Weekly, options); // 46 + JsonSerializer.Serialize(writer, character.Auras, options); // 28 + JsonSerializer.Serialize(writer, character.EquippedItems, options); // 29 + JsonSerializer.Serialize(writer, character.Garrisons, options); // 30 + JsonSerializer.Serialize(writer, character.GarrisonTrees, options); // 31 + JsonSerializer.Serialize(writer, character.HighestItemLevel, options); // 32 + JsonSerializer.Serialize(writer, character.KnownSpells, options); // 33 + JsonSerializer.Serialize(writer, character.Lockouts, options); // 34 + JsonSerializer.Serialize(writer, character.MythicPlus, options); // 35 + JsonSerializer.Serialize(writer, character.MythicPlusAddon, options); // 36 + JsonSerializer.Serialize(writer, character.MythicPlusSeasons, options); // 37 + JsonSerializer.Serialize(writer, character.Paragons, options); // 38 + JsonSerializer.Serialize(writer, character.PatronOrders, options); // 39 + JsonSerializer.Serialize(writer, character.Professions, options); // 40 + JsonSerializer.Serialize(writer, character.ProfessionCooldowns, options); // 41 + JsonSerializer.Serialize(writer, character.ProfessionSpecializations, options); // 42 + JsonSerializer.Serialize(writer, character.ProfessionTraits, options); // 43 + JsonSerializer.Serialize(writer, character.RaiderIo, options); // 44 + JsonSerializer.Serialize(writer, character.Reputations, options); // 45 + JsonSerializer.Serialize(writer, character.Shadowlands, options); // 46 + JsonSerializer.Serialize(writer, character.Weekly, options); // 47 - JsonSerializer.Serialize(writer, character.RawCurrencies, options); // 47 - JsonSerializer.Serialize(writer, character.RawItems, options); // 48 - JsonSerializer.Serialize(writer, character.RawMythicPlusWeeks, options); // 49 - JsonSerializer.Serialize(writer, character.RawSpecializations, options); // 50 - JsonSerializer.Serialize(writer, character.RawStatistics, options); // 51 + JsonSerializer.Serialize(writer, character.RawCurrencies, options); // 48 + JsonSerializer.Serialize(writer, character.RawItems, options); // 49 + JsonSerializer.Serialize(writer, character.RawMythicPlusWeeks, options); // 50 + JsonSerializer.Serialize(writer, character.RawSpecializations, options); // 51 + JsonSerializer.Serialize(writer, character.RawStatistics, options); // 52 writer.WriteEndArray(); } diff --git a/apps/web/Models/Api/User/ApiUserCharacter.cs b/apps/web/Models/Api/User/ApiUserCharacter.cs index 159e35927..be78308c5 100644 --- a/apps/web/Models/Api/User/ApiUserCharacter.cs +++ b/apps/web/Models/Api/User/ApiUserCharacter.cs @@ -33,6 +33,7 @@ public class ApiUserCharacter public DateTime? DailyReset { get; set; } public DateTime? WeeklyReset { get; set; } public DateTime? ScannedCurrencies { get; set; } + public DateTime? TransferredCurrencies { get; set; } public WowFaction Faction { get; set; } public WowGender Gender { get; set; } @@ -128,15 +129,8 @@ public ApiUserCharacter( ProfessionCooldowns = character.AddonData?.ProfessionCooldowns; ProfessionTraits = character.AddonData?.ProfessionTraits; - var currenciesScanned = character.AddonData?.CurrenciesScannedAt; - if (currenciesScanned == null || - (character.AddonData?.CurrenciesTransferredAt != null && - character.AddonData?.CurrenciesTransferredAt > currenciesScanned) - ) - { - currenciesScanned = character.AddonData?.CurrenciesTransferredAt; - } - ScannedCurrencies = currenciesScanned; + ScannedCurrencies = character.AddonData?.CurrenciesScannedAt; + TransferredCurrencies = character.AddonData?.CurrenciesTransferredAt; Professions = character.Professions?.Professions; ProfessionSpecializations = character.Professions?.ProfessionSpecializations ?? new();