Fix type errors

This commit is contained in:
2025-10-16 20:44:52 +02:00
parent c80fc61539
commit baca5415c3
12 changed files with 56 additions and 43 deletions
+2 -1
View File
@@ -1,6 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
const { locale, locales, t } = useI18n(); const { locale, locales, t } = useI18n();
const switchLocalePath = useSwitchLocalePath();
const availableLocales = computed(() => { const availableLocales = computed(() => {
return locales.value.filter((i) => i.code !== locale.value); return locales.value.filter((i) => i.code !== locale.value);
}); });
@@ -14,7 +15,7 @@ function l(locale: (typeof locales.value)[0]) {
<VaSidebarItem <VaSidebarItem
v-for="loc in availableLocales" v-for="loc in availableLocales"
:key="loc.code" :key="loc.code"
:to="$switchLocalePath(loc.code)" :to="switchLocalePath(loc.code)"
:title="t('layouts.switch_lang', { locale: t(`locales.${l(loc)}`) })" :title="t('layouts.switch_lang', { locale: t(`locales.${l(loc)}`) })"
> >
<VaSidebarItemContent> <VaSidebarItemContent>
+19 -19
View File
@@ -1,8 +1,10 @@
<script setup lang="ts"> <script setup lang="ts">
import { sluggy } from '#imports';
import { useTitleStore } from '~/stores/title'; import { useTitleStore } from '~/stores/title';
const { loggedIn, clear, user } = useUserSession(); const { loggedIn, clear, user } = useUserSession();
const { t } = useI18n(); const { t } = useI18n();
const localePath = useLocalePath();
const route = useRoute(); const route = useRoute();
const breakpoints = useBreakpoint(); const breakpoints = useBreakpoint();
const titleStore = useTitleStore(); const titleStore = useTitleStore();
@@ -41,8 +43,8 @@ const slugs = computed(() => checkSlug(route.params));
<template #left> <template #left>
<VaSidebar v-model="isSidebarVisible"> <VaSidebar v-model="isSidebarVisible">
<VaSidebarItem <VaSidebarItem
:to="$localePath('/')" :to="localePath('/')"
:active="$localePath('/') === route.path" :active="localePath('/') === route.path"
> >
<VaSidebarItemContent> <VaSidebarItemContent>
<VaIcon name="home" /> <VaIcon name="home" />
@@ -50,8 +52,8 @@ const slugs = computed(() => checkSlug(route.params));
</VaSidebarItemContent> </VaSidebarItemContent>
</VaSidebarItem> </VaSidebarItem>
<VaSidebarItem <VaSidebarItem
:to="$localePath('/impressum')" :to="localePath('/impressum')"
:active="$localePath('/impressum') === route.path" :active="localePath('/impressum') === route.path"
> >
<VaSidebarItemContent> <VaSidebarItemContent>
<VaIcon name="balance" /> <VaIcon name="balance" />
@@ -62,10 +64,8 @@ const slugs = computed(() => checkSlug(route.params));
</VaSidebarItem> </VaSidebarItem>
<VaSidebarItem <VaSidebarItem
v-if="slugs?.huntSlug" v-if="slugs?.huntSlug"
:to="$localePath(`/hunt/${sluggy(slugs.huntSlug)}`)" :to="localePath(`/hunt/${sluggy(slugs.huntSlug)}`)"
:active=" :active="localePath(`/hunt/${sluggy(slugs.huntSlug)}`) === route.path"
$localePath(`/hunt/${sluggy(slugs.huntSlug)}`) === route.path
"
> >
<VaSidebarItemContent> <VaSidebarItemContent>
<VaIcon name="camera_indoor" /> <VaIcon name="camera_indoor" />
@@ -79,9 +79,9 @@ const slugs = computed(() => checkSlug(route.params));
text-color="danger" text-color="danger"
hover-color="danger" hover-color="danger"
active-color="onDanger" active-color="onDanger"
:to="$localePath(`/hunt/${sluggy(slugs.huntSlug)}/admin`)" :to="localePath(`/hunt/${sluggy(slugs.huntSlug)}/admin`)"
:active=" :active="
$localePath(`/hunt/${sluggy(slugs.huntSlug)}/admin`) === route.path localePath(`/hunt/${sluggy(slugs.huntSlug)}/admin`) === route.path
" "
> >
<VaSidebarItemContent> <VaSidebarItemContent>
@@ -94,9 +94,9 @@ const slugs = computed(() => checkSlug(route.params));
text-color="danger" text-color="danger"
hover-color="danger" hover-color="danger"
active-color="onDanger" active-color="onDanger"
:to="$localePath(`/hunt/${sluggy(slugs.huntSlug)}/teams`)" :to="localePath(`/hunt/${sluggy(slugs.huntSlug)}/teams`)"
:active=" :active="
$localePath(`/hunt/${sluggy(slugs.huntSlug)}/teams`) === route.path localePath(`/hunt/${sluggy(slugs.huntSlug)}/teams`) === route.path
" "
> >
<VaSidebarItemContent> <VaSidebarItemContent>
@@ -107,12 +107,12 @@ const slugs = computed(() => checkSlug(route.params));
<VaSidebarItem <VaSidebarItem
v-if="slugs?.huntSlug && slugs?.questSlug" v-if="slugs?.huntSlug && slugs?.questSlug"
:to=" :to="
$localePath( localePath(
`/hunt/${sluggy(slugs.huntSlug)}/${sluggy(slugs.questSlug)}` `/hunt/${sluggy(slugs.huntSlug)}/${sluggy(slugs.questSlug)}`
) )
" "
:active=" :active="
$localePath( localePath(
`/hunt/${sluggy(slugs.huntSlug)}/${sluggy(slugs.questSlug)}` `/hunt/${sluggy(slugs.huntSlug)}/${sluggy(slugs.questSlug)}`
) === route.path ) === route.path
" "
@@ -130,12 +130,12 @@ const slugs = computed(() => checkSlug(route.params));
hover-color="danger" hover-color="danger"
active-color="onDanger" active-color="onDanger"
:to=" :to="
$localePath( localePath(
`/hunt/${sluggy(slugs.huntSlug)}/${sluggy(slugs.questSlug)}/admin` `/hunt/${sluggy(slugs.huntSlug)}/${sluggy(slugs.questSlug)}/admin`
) )
" "
:active=" :active="
$localePath( localePath(
`/hunt/${sluggy(slugs.huntSlug)}/${sluggy(slugs.questSlug)}/admin` `/hunt/${sluggy(slugs.huntSlug)}/${sluggy(slugs.questSlug)}/admin`
) === route.path ) === route.path
" "
@@ -148,8 +148,8 @@ const slugs = computed(() => checkSlug(route.params));
<VaSpacer /> <VaSpacer />
<VaSidebarItem <VaSidebarItem
v-if="user" v-if="user"
:to="$localePath('/profile')" :to="localePath('/profile')"
:active="$localePath('/profile') === route.path" :active="localePath('/profile') === route.path"
:hover-color="user.role === 'ADMIN' ? 'danger' : undefined" :hover-color="user.role === 'ADMIN' ? 'danger' : undefined"
:text-color="user.role === 'ADMIN' ? 'danger' : undefined" :text-color="user.role === 'ADMIN' ? 'danger' : undefined"
> >
@@ -174,7 +174,7 @@ const slugs = computed(() => checkSlug(route.params));
</VaSidebarItemTitle> </VaSidebarItemTitle>
</VaSidebarItemContent> </VaSidebarItemContent>
</VaSidebarItem> </VaSidebarItem>
<VaSidebarItem v-else :to="$localePath(`/login?to=${route.path}`)"> <VaSidebarItem v-else :to="localePath(`/login?to=${route.path}`)">
<VaSidebarItemContent> <VaSidebarItemContent>
<VaIcon name="login" /> <VaIcon name="login" />
<VaSidebarItemTitle> <VaSidebarItemTitle>
@@ -1,4 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { sluggy } from '#imports';
import { useI18nKey } from '~/composables/useI18nKey'; import { useI18nKey } from '~/composables/useI18nKey';
import { useTitleStore } from '~/stores/title'; import { useTitleStore } from '~/stores/title';
@@ -42,7 +43,7 @@ titleStore.title = data.value ? tKey(data.value, 'title').value : undefined;
<VaButton <VaButton
icon="arrow_back" icon="arrow_back"
:to=" :to="
$localePath( localePath(
`/hunt/${data ? tSluggy(data.hunt).value : sluggy(huntSlug!)}` `/hunt/${data ? tSluggy(data.hunt).value : sluggy(huntSlug!)}`
) )
" "
@@ -1,4 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { parseError, sluggy } from '#imports';
import { compressImage, createImageURL } from '#shared/utils/image'; import { compressImage, createImageURL } from '#shared/utils/image';
import ClickableImage from '~/components/ClickableImage.vue'; import ClickableImage from '~/components/ClickableImage.vue';
import MultilineString from '~/components/MultilineString.vue'; import MultilineString from '~/components/MultilineString.vue';
@@ -17,6 +18,7 @@ const { user } = useUserSession();
const { huntSlug, questSlug } = app.$slugData; const { huntSlug, questSlug } = app.$slugData;
const { t, d, locale } = useI18n(); const { t, d, locale } = useI18n();
const localePath = useLocalePath();
const { tKey, hasKey, tSluggy } = useI18nKey(); const { tKey, hasKey, tSluggy } = useI18nKey();
const titleStore = useTitleStore(); const titleStore = useTitleStore();
@@ -176,7 +178,7 @@ async function submit() {
<VaButton <VaButton
icon="arrow_back" icon="arrow_back"
:to=" :to="
$localePath( localePath(
`/hunt/${data ? tSluggy(data.hunt).value : sluggy(huntSlug!)}` `/hunt/${data ? tSluggy(data.hunt).value : sluggy(huntSlug!)}`
) )
" "
@@ -196,7 +198,7 @@ async function submit() {
v-if="user && user.role === 'ADMIN'" v-if="user && user.role === 'ADMIN'"
color="danger" color="danger"
:to=" :to="
$localePath( localePath(
`/hunt/${data?.hunt ? tSluggy(data.hunt).value : sluggy(huntSlug!)}/${data ? tSluggy(data).value : sluggy(questSlug!)}}/admin` `/hunt/${data?.hunt ? tSluggy(data.hunt).value : sluggy(huntSlug!)}/${data ? tSluggy(data).value : sluggy(questSlug!)}}/admin`
) )
" "
+4 -2
View File
@@ -1,4 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { sluggy } from '#imports';
import { useTitleStore } from '~/stores/title'; import { useTitleStore } from '~/stores/title';
definePageMeta({ definePageMeta({
@@ -7,6 +8,7 @@ definePageMeta({
const app = useNuxtApp(); const app = useNuxtApp();
const { loggedIn } = useUserSession(); const { loggedIn } = useUserSession();
const { t } = useI18n(); const { t } = useI18n();
const localePath = useLocalePath();
const { tKey } = useI18nKey(); const { tKey } = useI18nKey();
const { name, id } = app.$slugData.huntSlug!; const { name, id } = app.$slugData.huntSlug!;
@@ -100,7 +102,7 @@ titleStore.title = data.value?.name;
}}</VaAlert }}</VaAlert
><VaButton ><VaButton
icon="arrow_back" icon="arrow_back"
:to="$localePath(`/hunt/${sluggy($nuxt.$slugData.huntSlug!)}`)" :to="localePath(`/hunt/${sluggy($nuxt.$slugData.huntSlug!)}`)"
>{{ t('page.common.back_to_hunt') }}</VaButton >{{ t('page.common.back_to_hunt') }}</VaButton
> >
</div> </div>
@@ -113,7 +115,7 @@ titleStore.title = data.value?.name;
}}</VaAlert }}</VaAlert
><VaButton ><VaButton
icon="arrow_back" icon="arrow_back"
:to="$localePath(`/hunt/${sluggy($nuxt.$slugData.huntSlug!)}`)" :to="localePath(`/hunt/${sluggy($nuxt.$slugData.huntSlug!)}`)"
>{{ t('page.common.back_to_hunt') }}</VaButton >{{ t('page.common.back_to_hunt') }}</VaButton
> >
</div> </div>
+11 -9
View File
@@ -1,4 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { parseError } from '#imports';
import TeamAddModal from '~/components/TeamAddModal.vue'; import TeamAddModal from '~/components/TeamAddModal.vue';
import { useSettingsStore } from '~/stores/settings'; import { useSettingsStore } from '~/stores/settings';
import { useTitleStore } from '~/stores/title'; import { useTitleStore } from '~/stores/title';
@@ -7,6 +8,7 @@ import { fullDate } from '~~/server/utils/date';
const app = useNuxtApp(); const app = useNuxtApp();
const { loggedIn } = useUserSession(); const { loggedIn } = useUserSession();
const { t, d } = useI18n(); const { t, d } = useI18n();
const localePath = useLocalePath();
const { tKey, hasKey, tSluggy } = useI18nKey(); const { tKey, hasKey, tSluggy } = useI18nKey();
const { init } = useToast(); const { init } = useToast();
@@ -95,34 +97,34 @@ ${document.location.href}`
v-if="(data?.revealAnswers && data?.revealQuests) || data?.isMember" v-if="(data?.revealAnswers && data?.revealQuests) || data?.isMember"
color="success" color="success"
icon="leaderboard" icon="leaderboard"
:to="$localePath(`/hunt/${tSluggy(data).value}/showcase`)" :to="localePath(`/hunt/${tSluggy(data).value}/showcase`)"
>{{ t('page.hunt.showcase') }}</VaButton >{{ t('page.hunt.showcase') }}</VaButton
> >
<VaButton <VaButton
v-if="(data?.revealAnswers && data?.revealQuests) || data?.isMember" v-if="(data?.revealAnswers && data?.revealQuests) || data?.isMember"
color="success" color="success"
icon="collections" icon="collections"
:to="$localePath(`/hunt/${tSluggy(data).value}/diashow`)" :to="localePath(`/hunt/${tSluggy(data).value}/diashow`)"
>{{ t('page.hunt.diashow') }}</VaButton >{{ t('page.hunt.diashow') }}</VaButton
> >
<VaButton <VaButton
v-if="(data?.revealAnswers && data?.revealQuests) || data?.isMember" v-if="(data?.revealAnswers && data?.revealQuests) || data?.isMember"
color="success" color="success"
icon="auto_awesome_mosaic" icon="auto_awesome_mosaic"
:to="$localePath(`/hunt/${tSluggy(data).value}/pictures`)" :to="localePath(`/hunt/${tSluggy(data).value}/pictures`)"
>{{ t('page.hunt.all_pictures') }}</VaButton >{{ t('page.hunt.all_pictures') }}</VaButton
> >
<VaButton <VaButton
v-if="data?.isMember" v-if="data?.isMember"
color="danger" color="danger"
icon="edit" icon="edit"
:to="$localePath(`/hunt/${tSluggy(data).value}/admin`)" :to="localePath(`/hunt/${tSluggy(data).value}/admin`)"
>{{ t('page.common.admin') }}</VaButton >{{ t('page.common.admin') }}</VaButton
><VaButton ><VaButton
v-if="data?.isMember" v-if="data?.isMember"
color="danger" color="danger"
icon="groups" icon="groups"
:to="$localePath(`/hunt/${tSluggy(data).value}/teams`)" :to="localePath(`/hunt/${tSluggy(data).value}/teams`)"
>{{ t('page.hunt.teams') }}</VaButton >{{ t('page.hunt.teams') }}</VaButton
> >
</div> </div>
@@ -199,7 +201,7 @@ ${document.location.href}`
<VaButton <VaButton
color="info" color="info"
icon="login" icon="login"
:to="$localePath(`/login?to=/hunt/${tSluggy(data).value}`)" :to="localePath(`/login?to=/hunt/${tSluggy(data).value}`)"
>{{ t('page.common.login_first') }}</VaButton >{{ t('page.common.login_first') }}</VaButton
> >
</VaCardActions> </VaCardActions>
@@ -267,7 +269,7 @@ ${document.location.href}`
<VaCardActions> <VaCardActions>
<VaButton <VaButton
:to=" :to="
$localePath( localePath(
`/hunt/${tSluggy(data).value}/${tSluggy(quest).value}` `/hunt/${tSluggy(data).value}/${tSluggy(quest).value}`
) )
" "
@@ -291,7 +293,7 @@ ${document.location.href}`
" "
:icon="(quest.unreviewed || 0) > 0 ? 'priority_high' : undefined" :icon="(quest.unreviewed || 0) > 0 ? 'priority_high' : undefined"
:to=" :to="
$localePath( localePath(
`/hunt/${tSluggy(data).value}/${tSluggy(quest).value}/admin` `/hunt/${tSluggy(data).value}/${tSluggy(quest).value}/admin`
) )
" "
@@ -312,7 +314,7 @@ ${document.location.href}`
<div v-if="error"> <div v-if="error">
<h1 class="mt-8 text-3xl">{{ t(parseError(error)) }}</h1> <h1 class="mt-8 text-3xl">{{ t(parseError(error)) }}</h1>
<VaButton icon="arrow_back" :to="$localePath(`/`)">{{ <VaButton icon="arrow_back" :to="localePath(`/`)">{{
t('page.common.back_home') t('page.common.back_home')
}}</VaButton> }}</VaButton>
</div> </div>
+4 -2
View File
@@ -1,4 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { sluggy } from '#imports';
import { unique } from '#shared/utils/array'; import { unique } from '#shared/utils/array';
import { useTitleStore } from '~/stores/title'; import { useTitleStore } from '~/stores/title';
@@ -8,6 +9,7 @@ definePageMeta({
const app = useNuxtApp(); const app = useNuxtApp();
const { loggedIn } = useUserSession(); const { loggedIn } = useUserSession();
const { t, locale } = useI18n(); const { t, locale } = useI18n();
const localePath = useLocalePath();
const { tKey, hasKey } = useI18nKey(); const { tKey, hasKey } = useI18nKey();
const { name, id } = app.$slugData.huntSlug!; const { name, id } = app.$slugData.huntSlug!;
@@ -161,7 +163,7 @@ titleStore.title = data.value ? tKey(data.value, 'name').value : undefined;
}}</VaAlert }}</VaAlert
><VaButton ><VaButton
icon="arrow_back" icon="arrow_back"
:to="$localePath(`/hunt/${sluggy($nuxt.$slugData.huntSlug!)}`)" :to="localePath(`/hunt/${sluggy($nuxt.$slugData.huntSlug!)}`)"
>{{ t('page.common.back_to_hunt') }}</VaButton >{{ t('page.common.back_to_hunt') }}</VaButton
> >
</div> </div>
@@ -174,7 +176,7 @@ titleStore.title = data.value ? tKey(data.value, 'name').value : undefined;
}}</VaAlert }}</VaAlert
><VaButton ><VaButton
icon="arrow_back" icon="arrow_back"
:to="$localePath(`/hunt/${sluggy($nuxt.$slugData.huntSlug!)}`)" :to="localePath(`/hunt/${sluggy($nuxt.$slugData.huntSlug!)}`)"
>{{ t('page.common.back_to_hunt') }}</VaButton >{{ t('page.common.back_to_hunt') }}</VaButton
> >
</div> </div>
+3 -1
View File
@@ -1,4 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { sluggy } from '#imports';
import type { DataTableColumnSource } from 'vuestic-ui'; import type { DataTableColumnSource } from 'vuestic-ui';
import NumberCard from '~/components/showcase/NumberCard.vue'; import NumberCard from '~/components/showcase/NumberCard.vue';
import { fullDate } from '~~/server/utils/date'; import { fullDate } from '~~/server/utils/date';
@@ -7,6 +8,7 @@ definePageMeta({
layout: 'full' layout: 'full'
}); });
const { t, d } = useI18n(); const { t, d } = useI18n();
const localePath = useLocalePath();
const { tKey, hasKey, tSluggy } = useI18nKey(); const { tKey, hasKey, tSluggy } = useI18nKey();
const app = useNuxtApp(); const app = useNuxtApp();
@@ -266,7 +268,7 @@ const columns = leaderboardColumns.map((c) =>
}}</VaAlert }}</VaAlert
><VaButton ><VaButton
icon="arrow_back" icon="arrow_back"
:to="$localePath(`/hunt/${sluggy($nuxt.$slugData.huntSlug!)}`)" :to="localePath(`/hunt/${sluggy($nuxt.$slugData.huntSlug!)}`)"
>{{ t('page.common.back_to_hunt') }}</VaButton >{{ t('page.common.back_to_hunt') }}</VaButton
> >
</article> </article>
+4 -3
View File
@@ -5,6 +5,7 @@ import { fullDate } from '~~/server/utils/date';
const { loggedIn } = useUserSession(); const { loggedIn } = useUserSession();
const { data, pending, refresh } = await useFetch('/api/home'); const { data, pending, refresh } = await useFetch('/api/home');
const { t, d } = useI18n(); const { t, d } = useI18n();
const localePath = useLocalePath();
const { tKey, tSluggy } = useI18nKey(); const { tKey, tSluggy } = useI18nKey();
watch(loggedIn, () => refresh()); watch(loggedIn, () => refresh());
</script> </script>
@@ -26,7 +27,7 @@ watch(loggedIn, () => refresh());
v-for="hunt in data.own" v-for="hunt in data.own"
:key="hunt.id" :key="hunt.id"
stripe stripe
:to="$localePath(`/hunt/${tSluggy(hunt).value}`)" :to="localePath(`/hunt/${tSluggy(hunt).value}`)"
> >
<VaCardTitle>{{ tKey(hunt, 'name') }}</VaCardTitle> <VaCardTitle>{{ tKey(hunt, 'name') }}</VaCardTitle>
@@ -72,7 +73,7 @@ watch(loggedIn, () => refresh());
class="mt-6" class="mt-6"
color="info" color="info"
icon="login" icon="login"
:to="$localePath(`/login`)" :to="localePath(`/login`)"
>{{ t('page.home.login_first') }}</VaButton >{{ t('page.home.login_first') }}</VaButton
> >
</div> </div>
@@ -85,7 +86,7 @@ watch(loggedIn, () => refresh());
<VaCard <VaCard
v-for="hunt in data.others" v-for="hunt in data.others"
:key="hunt.id" :key="hunt.id"
:to="$localePath(`/hunt/${tSluggy(hunt).value}`)" :to="localePath(`/hunt/${tSluggy(hunt).value}`)"
> >
<VaCardTitle>{{ tKey(hunt, 'name') }}</VaCardTitle> <VaCardTitle>{{ tKey(hunt, 'name') }}</VaCardTitle>
<ClickableImage <ClickableImage
+1 -1
View File
@@ -132,7 +132,7 @@ async function submit() {
t('auth.login') t('auth.login')
}}</VaButton> }}</VaButton>
<VaButton <VaButton
:to="$localePath({ path: '/register', query: route.query })" :to="localePath({ path: '/register', query: route.query })"
border-color="primary" border-color="primary"
preset="secondary" preset="secondary"
>{{ t('auth.register_instead') }}</VaButton >{{ t('auth.register_instead') }}</VaButton
+1 -1
View File
@@ -252,7 +252,7 @@ async function submitPassword() {
/> />
<NuxtLink <NuxtLink
:to=" :to="
$localePath( localePath(
`/hunt/${tSluggy(item.answer.quest.hunt).value}/${tSluggy(item.answer.quest).value}` `/hunt/${tSluggy(item.answer.quest.hunt).value}/${tSluggy(item.answer.quest).value}`
) )
" "
+1 -1
View File
@@ -164,7 +164,7 @@ async function submit() {
t('auth.register') t('auth.register')
}}</VaButton> }}</VaButton>
<VaButton <VaButton
:to="$localePath({ path: '/login', query: route.query })" :to="localePath({ path: '/login', query: route.query })"
border-color="primary" border-color="primary"
preset="secondary" preset="secondary"
>{{ t('auth.login_instead') }}</VaButton >{{ t('auth.login_instead') }}</VaButton