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();