22import { ref , onMounted , computed } from " vue" ;
33import { useI18n } from " vue-i18n" ;
44import { useDisplay } from " vuetify" ;
5+ import type { EarnedAchievement } from " @/__generated__/models/EarnedAchievement" ;
56import type { RAGameRomAchievement } from " @/__generated__/models/RAGameRomAchievement" ;
7+ import type { RAUserGameProgression } from " @/__generated__/models/RAUserGameProgression" ;
68import storeAuth from " @/stores/auth" ;
79import type { DetailedRom } from " @/stores/roms" ;
810
911const { smAndDown } = useDisplay ();
1012const props = defineProps <{ rom: DetailedRom }>();
1113const { t } = useI18n ();
1214const auth = storeAuth ();
13- const targetRom = ref ();
14- const earnedAchievements = ref <
15- { id : string ; date : string ; hardcore : boolean }[]
16- > ([]);
15+ const raUserAchivement = ref <RAUserGameProgression | undefined >();
16+ const earnedAchievements = ref <EarnedAchievement []>([]);
1717const achievementsPercentage = ref (0 );
1818const achievementsPercentageHardcore = ref (0 );
1919const showEarned = ref (false );
@@ -45,10 +45,11 @@ const isAchievementEarned = computed(
4545
4646const isAchievementEarnedHarcore = computed (
4747 () => (achievement : RAGameRomAchievement ) => {
48- return (
49- earnedAchievements .value .find (
50- (earned ) => earned .id === (achievement .badge_id ?? " " ),
51- )?.hardcore ?? false
48+ return earnedAchievements .value .some (
49+ (earned ) =>
50+ achievement .badge_id &&
51+ earned .id === achievement .badge_id &&
52+ earned .date_hardcore ,
5253 );
5354 },
5455);
@@ -66,29 +67,24 @@ onMounted(() => {
6667 props .rom .merged_ra_metadata ?.achievements ?? []
6768 ).sort ((a , b ) => (a .display_order ?? 0 ) - (b .display_order ?? 0 ));
6869 if (auth .user ?.ra_progression ?.results ) {
69- targetRom .value = auth .user .ra_progression .results .find (
70+ raUserAchivement .value = auth .user .ra_progression .results .find (
7071 (result ) => result .rom_ra_id === props .rom .ra_id ,
7172 );
72- if (targetRom .value ) {
73- earnedAchievements .value = targetRom .value .earned_achievements .map (
74- (achievement : {
75- id: string ;
76- date: string ;
77- date_hardcore? : string | null ;
78- }) => ({
79- id: achievement .id ,
73+ if (raUserAchivement .value ) {
74+ earnedAchievements .value = raUserAchivement .value .earned_achievements .map (
75+ (achievement ) => ({
76+ ... achievement ,
8077 date: achievement .date_hardcore || achievement .date ,
81- hardcore: !! achievement .date_hardcore ,
8278 }),
8379 );
8480 if (props .rom .merged_ra_metadata ?.achievements ) {
8581 achievementsPercentage .value = Math .round (
86- (targetRom .value .earned_achievements .length /
82+ (raUserAchivement .value .earned_achievements .length /
8783 props .rom .merged_ra_metadata ?.achievements .length ) *
8884 100 ,
8985 );
9086 achievementsPercentageHardcore .value = Math .round (
91- (targetRom .value .earned_achievements .filter (
87+ (raUserAchivement .value .earned_achievements .filter (
9288 (achievement : { date_hardcore? : string }) =>
9389 achievement .date_hardcore ,
9490 ).length /
@@ -105,7 +101,7 @@ onMounted(() => {
105101 <template #prepend >
106102 <v-chip v-if =" rom.merged_ra_metadata?.achievements" label rounded =" 0"
107103 ><v-icon class =" mr-2" >mdi-trophy</v-icon
108- >{{ targetRom ?.earned_achievements.length ?? 0 }} /
104+ >{{ raUserAchivement ?.earned_achievements.length ?? 0 }} /
109105 {{ rom.merged_ra_metadata?.achievements.length }}</v-chip
110106 >
111107 </template >
0 commit comments