Skip to content

Commit 8a29918

Browse files
authored
Merge pull request #2368 from rommapp/use-template-ref
Use modern useTemplateRef hook
2 parents fe0f58c + bacc8d7 commit 8a29918

22 files changed

Lines changed: 206 additions & 159 deletions

File tree

frontend/src/components/Details/RetroAchievements.vue

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,18 @@
22
import { ref, onMounted, computed } from "vue";
33
import { useI18n } from "vue-i18n";
44
import { useDisplay } from "vuetify";
5+
import type { EarnedAchievement } from "@/__generated__/models/EarnedAchievement";
56
import type { RAGameRomAchievement } from "@/__generated__/models/RAGameRomAchievement";
7+
import type { RAUserGameProgression } from "@/__generated__/models/RAUserGameProgression";
68
import storeAuth from "@/stores/auth";
79
import type { DetailedRom } from "@/stores/roms";
810
911
const { smAndDown } = useDisplay();
1012
const props = defineProps<{ rom: DetailedRom }>();
1113
const { t } = useI18n();
1214
const 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[]>([]);
1717
const achievementsPercentage = ref(0);
1818
const achievementsPercentageHardcore = ref(0);
1919
const showEarned = ref(false);
@@ -45,10 +45,11 @@ const isAchievementEarned = computed(
4545
4646
const 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>

frontend/src/components/Home/Collections.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ const gridCollections = useLocalStorage(`settings.${props.setting}`, false);
1919
const enable3DEffect = useLocalStorage("settings.enable3DEffect", false);
2020
const visibleCollections = ref(72);
2121
const isHovering = ref(false);
22-
const hoveringCollectionId = ref();
22+
const hoveringCollectionId = ref<number>();
2323
2424
function toggleGridCollections() {
2525
gridCollections.value = !gridCollections.value;

frontend/src/components/Home/ContinuePlaying.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ const gridContinuePlayingRoms = useLocalStorage(
1717
);
1818
const enable3DEffect = useLocalStorage("settings.enable3DEffect", false);
1919
const isHovering = ref(false);
20-
const hoveringRomId = ref();
20+
const hoveringRomId = ref<number>();
2121
const openedMenu = ref(false);
22-
const openedMenuRomId = ref();
22+
const openedMenuRomId = ref<number>();
2323
2424
function toggleGridContinuePlaying() {
2525
gridContinuePlayingRoms.value = !gridContinuePlayingRoms.value;
@@ -37,7 +37,7 @@ function onOpenedMenu(emitData: { openedMenu: boolean; id: number }) {
3737
3838
function onClosedMenu() {
3939
openedMenu.value = false;
40-
openedMenuRomId.value = null;
40+
openedMenuRomId.value = undefined;
4141
}
4242
</script>
4343
<template>

frontend/src/components/Home/Platforms.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ const { filledPlatforms } = storeToRefs(platformsStore);
1414
const gridPlatforms = useLocalStorage("settings.gridPlatforms", false);
1515
const enable3DEffect = useLocalStorage("settings.enable3DEffect", false);
1616
const isHovering = ref(false);
17-
const hoveringPlatformId = ref();
17+
const hoveringPlatformId = ref<number>();
1818
1919
function toggleGridPlatforms() {
2020
gridPlatforms.value = !gridPlatforms.value;

frontend/src/components/Home/RecentAdded.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ const { recentRoms } = storeToRefs(romsStore);
1414
const gridRecentRoms = useLocalStorage("settings.gridRecentRoms", false);
1515
const enable3DEffect = useLocalStorage("settings.enable3DEffect", false);
1616
const isHovering = ref(false);
17-
const hoveringRomId = ref();
17+
const hoveringRomId = ref<number>();
1818
const openedMenu = ref(false);
19-
const openedMenuRomId = ref();
19+
const openedMenuRomId = ref<number>();
2020
2121
function toggleGridRecentRoms() {
2222
gridRecentRoms.value = !gridRecentRoms.value;
@@ -34,7 +34,7 @@ function onOpenedMenu(emitData: { openedMenu: boolean; id: number }) {
3434
3535
function onClosedMenu() {
3636
openedMenu.value = false;
37-
openedMenuRomId.value = null;
37+
openedMenuRomId.value = undefined;
3838
}
3939
</script>
4040
<template>

frontend/src/components/Settings/LibraryManagement/Config/Dialog/DeletePlatformBinding.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ const { lgAndUp } = useDisplay();
1212
const show = ref(false);
1313
const emitter = inject<Emitter<Events>>("emitter");
1414
const configStore = storeConfig();
15-
const platformBindingFSSlugToDelete = ref();
16-
const platformBindingSlugToDelete = ref();
15+
const platformBindingFSSlugToDelete = ref("");
16+
const platformBindingSlugToDelete = ref("");
1717
emitter?.on("showDeletePlatformBindingDialog", ({ fsSlug, slug }) => {
1818
platformBindingFSSlugToDelete.value = fsSlug;
1919
platformBindingSlugToDelete.value = slug;

frontend/src/components/Settings/LibraryManagement/Config/Dialog/DeletePlatformVersion.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ const { lgAndUp } = useDisplay();
1212
const show = ref(false);
1313
const emitter = inject<Emitter<Events>>("emitter");
1414
const configStore = storeConfig();
15-
const fsSlugToDelete = ref();
16-
const slugToDelete = ref();
15+
const fsSlugToDelete = ref("");
16+
const slugToDelete = ref("");
1717
emitter?.on("showDeletePlatformVersionDialog", ({ fsSlug, slug }) => {
1818
fsSlugToDelete.value = fsSlug;
1919
slugToDelete.value = slug;

frontend/src/components/Settings/LibraryManagement/Config/PlatformBindCard.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<script setup lang="ts">
22
import PlatformIcon from "@/components/common/Platform/Icon.vue";
33
4-
const emit = defineEmits(["clickEdit", "clickDelete"]);
4+
const emit = defineEmits(["click-edit", "click-delete"]);
55
defineProps<{
66
slug: string;
77
fsSlug: string;
@@ -26,7 +26,7 @@ defineProps<{
2626
size="x-small"
2727
icon="mdi-pencil"
2828
class="ml-0"
29-
@click="$emit('clickEdit')"
29+
@click="$emit('click-edit')"
3030
/>
3131
</v-slide-x-reverse-transition>
3232
<v-slide-x-reverse-transition>
@@ -37,7 +37,7 @@ defineProps<{
3737
size="x-small"
3838
icon="mdi-delete"
3939
class="text-romm-red"
40-
@click="$emit('clickDelete')"
40+
@click="$emit('click-delete')"
4141
/>
4242
</v-slide-x-reverse-transition>
4343
</template>

frontend/src/components/common/Collection/Card.vue

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
<script setup lang="ts">
22
import VanillaTilt from "vanilla-tilt";
3-
import { computed, ref, watchEffect, onMounted, onBeforeUnmount } from "vue";
3+
import {
4+
computed,
5+
ref,
6+
watchEffect,
7+
onMounted,
8+
onBeforeUnmount,
9+
useTemplateRef,
10+
} from "vue";
411
import { useDisplay } from "vuetify";
512
import Skeleton from "@/components/common/Game/Card/Skeleton.vue";
613
import { ROUTES } from "@/plugins/router";
@@ -108,7 +115,7 @@ interface TiltHTMLElement extends HTMLElement {
108115
}
109116
const emit = defineEmits(["hover"]);
110117
111-
const tiltCard = ref<TiltHTMLElement | null>(null);
118+
const tiltCardRef = useTemplateRef<TiltHTMLElement>("tilt-card-ref");
112119
113120
// Determine the correct route for this collection type
114121
const collectionRoute = computed(() => {
@@ -138,8 +145,8 @@ const collectionRoute = computed(() => {
138145
});
139146
140147
onMounted(() => {
141-
if (tiltCard.value && !smAndDown.value && props.enable3DTilt) {
142-
VanillaTilt.init(tiltCard.value, {
148+
if (tiltCardRef.value && !smAndDown.value && props.enable3DTilt) {
149+
VanillaTilt.init(tiltCardRef.value, {
143150
max: 20,
144151
speed: 400,
145152
scale: 1.1,
@@ -150,15 +157,15 @@ onMounted(() => {
150157
});
151158
152159
onBeforeUnmount(() => {
153-
if (tiltCard.value?.vanillaTilt && props.enable3DTilt) {
154-
tiltCard.value.vanillaTilt.destroy();
160+
if (tiltCardRef.value?.vanillaTilt && props.enable3DTilt) {
161+
tiltCardRef.value.vanillaTilt.destroy();
155162
}
156163
});
157164
</script>
158165

159166
<template>
160167
<v-hover v-slot="{ isHovering, props: hoverProps }">
161-
<div data-tilt ref="tiltCard">
168+
<div data-tilt ref="tilt-card-ref">
162169
<v-card
163170
v-bind="{
164171
...hoverProps,

frontend/src/components/common/Game/Card/Base.vue

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,14 @@
22
import { useLocalStorage } from "@vueuse/core";
33
import type { Emitter } from "mitt";
44
import VanillaTilt from "vanilla-tilt";
5-
import { computed, ref, onMounted, onBeforeUnmount, inject } from "vue";
5+
import {
6+
computed,
7+
ref,
8+
onMounted,
9+
onBeforeUnmount,
10+
inject,
11+
useTemplateRef,
12+
} from "vue";
613
import { useDisplay } from "vuetify";
714
import type { SearchRomSchema } from "@/__generated__";
815
import ActionBar from "@/components/common/Game/Card/ActionBar.vue";
@@ -128,7 +135,7 @@ interface TiltHTMLElement extends HTMLElement {
128135
};
129136
}
130137
131-
const tiltCard = ref<TiltHTMLElement | null>(null);
138+
const tiltCardRef = useTemplateRef<TiltHTMLElement>("tilt-card-ref");
132139
133140
const isWebpEnabled = computed(
134141
() => heartbeatStore.value.TASKS?.ENABLE_SCHEDULED_CONVERT_IMAGES_TO_WEBP,
@@ -163,8 +170,8 @@ const showNoteDialog = (event: MouseEvent | KeyboardEvent) => {
163170
};
164171
165172
onMounted(() => {
166-
if (tiltCard.value && !smAndDown.value && props.enable3DTilt) {
167-
VanillaTilt.init(tiltCard.value, {
173+
if (tiltCardRef.value && !smAndDown.value && props.enable3DTilt) {
174+
VanillaTilt.init(tiltCardRef.value, {
168175
max: 20,
169176
speed: 400,
170177
scale: 1.1,
@@ -175,15 +182,15 @@ onMounted(() => {
175182
});
176183
177184
onBeforeUnmount(() => {
178-
if (tiltCard.value?.vanillaTilt && props.enable3DTilt) {
179-
tiltCard.value.vanillaTilt.destroy();
185+
if (tiltCardRef.value?.vanillaTilt && props.enable3DTilt) {
186+
tiltCardRef.value.vanillaTilt.destroy();
180187
}
181188
});
182189
</script>
183190

184191
<template>
185192
<v-hover v-slot="{ isHovering: isOuterHovering, props: hoverProps }">
186-
<div data-tilt ref="tiltCard">
193+
<div data-tilt ref="tilt-card-ref">
187194
<v-card
188195
:style="{
189196
...(disableViewTransition

0 commit comments

Comments
 (0)