Store overhaul (#142)

* feat: small library tweaks + company page

* feat: new store view

* fix: ci merge error

* feat: add genres to store page

* feat: sorting

* feat: lock game/version imports while their tasks are running

* feat: feature games

* feat: tag based filtering

* fix: make tags alphabetical

* refactor: move a bunch of i18n to common

* feat: add localizations for everything

* fix: title description on panel

* fix: feature carousel text

* fix: i18n footer strings

* feat: add tag page

* fix: develop merge

* feat: offline games support (don't error out if provider throws)

* feat: tag management

* feat: show library next to game import + small fixes

* feat: most of the company and tag managers

* feat: company text field editing

* fix: small fixes + tsgo experiemental

* feat: upload icon and banner

* feat: store infinite scrolling and bulk import mode

* fix: lint

* fix: add drop-base to prettier ignore
This commit is contained in:
DecDuck
2025-07-30 13:40:49 +10:00
committed by GitHub
parent 1ae051f066
commit 8363de2eed
97 changed files with 3506 additions and 524 deletions

View File

@ -108,6 +108,72 @@
}}</span>
</td>
</tr>
<tr>
<td
class="whitespace-nowrap align-top py-4 pl-4 pr-3 text-sm font-medium text-zinc-100 sm:pl-3"
>
{{ $t("store.tags") }}
</td>
<td class="flex flex-col gap-1 px-3 py-4 text-sm text-zinc-400">
<NuxtLink
v-for="tag in game.tags"
:key="tag.id"
:href="`/store/t/${tag.id}`"
class="w-min hover:underline hover:text-zinc-100 whitespace-nowrap"
>
{{ tag.name }}
</NuxtLink>
<span
v-if="game.tags.length == 0"
class="text-zinc-700 font-bold uppercase font-display"
>{{ $t("store.noTags") }}</span
>
</td>
</tr>
<tr>
<td
class="whitespace-nowrap align-top py-4 pl-4 pr-3 text-sm font-medium text-zinc-100 sm:pl-3"
>
{{ $t("store.developers", game.developers.length) }}
</td>
<td class="flex flex-col px-3 py-4 text-sm text-zinc-400">
<NuxtLink
v-for="developer in game.developers"
:key="developer.id"
:href="`/store/c/${developer.id}`"
class="w-min hover:underline hover:text-zinc-100 whitespace-nowrap"
>
{{ developer.mName }}
</NuxtLink>
<span
v-if="game.developers.length == 0"
class="text-zinc-700 font-bold uppercase font-display"
>{{ $t("store.noDevelopers") }}</span
>
</td>
</tr>
<tr>
<td
class="whitespace-nowrap align-top py-4 pl-4 pr-3 text-sm font-medium text-zinc-100 sm:pl-3"
>
{{ $t("store.publishers", game.publishers.length) }}
</td>
<td class="flex flex-col px-3 py-4 text-sm text-zinc-400">
<NuxtLink
v-for="publisher in game.publishers"
:key="publisher.id"
:href="`/store/c/${publisher.id}`"
class="w-min hover:underline hover:text-zinc-100 whitespace-nowrap"
>
{{ publisher.mName }}
</NuxtLink>
<span
v-if="game.publishers.length == 0"
class="text-zinc-700 font-bold uppercase font-display"
>{{ $t("store.noPublishers") }}</span
>
</td>
</tr>
</tbody>
</table>
</div>
@ -225,6 +291,7 @@ const ratingArray = Array(5)
useHead({
title: game.mName,
link: [{ rel: "icon", href: useObject(game.mIconObjectId) }],
});
</script>