From 8cf15afaee51801875b8214b7b2b9a702f721477 Mon Sep 17 00:00:00 2001 From: Bastian Wagner Date: Wed, 19 Aug 2026 16:41:28 +0200 Subject: [PATCH] refactor(web): extract shared runtime monster-artwork lookup Co-Authored-By: Claude Sonnet 5 --- .../encounter-card/encounter-card.component.ts | 8 ++------ apps/web/src/app/shared/monster-artwork.spec.ts | 13 +++++++++++++ apps/web/src/app/shared/monster-artwork.ts | 8 ++++++++ 3 files changed, 23 insertions(+), 6 deletions(-) create mode 100644 apps/web/src/app/shared/monster-artwork.spec.ts create mode 100644 apps/web/src/app/shared/monster-artwork.ts diff --git a/apps/web/src/app/features/hunting/encounter-card/encounter-card.component.ts b/apps/web/src/app/features/hunting/encounter-card/encounter-card.component.ts index aefb280..0ac0e6e 100644 --- a/apps/web/src/app/features/hunting/encounter-card/encounter-card.component.ts +++ b/apps/web/src/app/features/hunting/encounter-card/encounter-card.component.ts @@ -1,12 +1,8 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; import { HuntEncounter } from '../../../core/api/game-api.models'; +import { runtimeMonsterArtworkPath } from '../../../shared/monster-artwork'; import { DangerBadgeComponent } from '../../../shared/danger-badge/danger-badge.component'; -const runtimeArtworkPaths: Readonly> = { - '/images/monsters/ash-rat.png': '/images/monsters/runtime/ash-rat-560.jpg', - '/images/monsters/road-bandit.png': '/images/monsters/runtime/road-bandit-560.jpg', -}; - @Component({ selector: 'app-encounter-card', imports: [DangerBadgeComponent], @@ -22,6 +18,6 @@ export class EncounterCardComponent { } protected runtimeArtworkPath(artworkPath: string): string | undefined { - return runtimeArtworkPaths[artworkPath]; + return runtimeMonsterArtworkPath(artworkPath); } } diff --git a/apps/web/src/app/shared/monster-artwork.spec.ts b/apps/web/src/app/shared/monster-artwork.spec.ts new file mode 100644 index 0000000..eb90bbb --- /dev/null +++ b/apps/web/src/app/shared/monster-artwork.spec.ts @@ -0,0 +1,13 @@ +import { runtimeMonsterArtworkPath } from './monster-artwork'; + +describe('runtimeMonsterArtworkPath', () => { + it('returns the optimized JPEG derivative for a known monster artwork path', () => { + expect(runtimeMonsterArtworkPath('/images/monsters/ash-rat.png')).toBe( + '/images/monsters/runtime/ash-rat-560.jpg', + ); + }); + + it('returns undefined for an artwork path with no runtime derivative', () => { + expect(runtimeMonsterArtworkPath('/images/enemies/Dawnwolf.png')).toBeUndefined(); + }); +}); diff --git a/apps/web/src/app/shared/monster-artwork.ts b/apps/web/src/app/shared/monster-artwork.ts new file mode 100644 index 0000000..d422f2e --- /dev/null +++ b/apps/web/src/app/shared/monster-artwork.ts @@ -0,0 +1,8 @@ +const RUNTIME_MONSTER_ARTWORK: Readonly> = { + '/images/monsters/ash-rat.png': '/images/monsters/runtime/ash-rat-560.jpg', + '/images/monsters/road-bandit.png': '/images/monsters/runtime/road-bandit-560.jpg', +}; + +export function runtimeMonsterArtworkPath(artworkPath: string): string | undefined { + return RUNTIME_MONSTER_ARTWORK[artworkPath]; +}