mirror of
https://github.com/Drop-OSS/drop.git
synced 2025-11-09 20:12:10 +10:00
* 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
122 lines
3.1 KiB
Vue
122 lines
3.1 KiB
Vue
<template>
|
|
<div class="space-y-4">
|
|
<div class="sm:flex sm:items-center">
|
|
<div class="sm:flex-auto">
|
|
<h1 class="text-2xl font-semibold text-zinc-100">
|
|
{{ $t("settings.admin.title") }}
|
|
</h1>
|
|
<p class="mt-2 text-base text-zinc-400">
|
|
{{ $t("settings.admin.description") }}
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<form class="space-y-4" @submit.prevent="() => saveSettings()">
|
|
<div class="py-6 border-y border-zinc-700">
|
|
<h2 class="text-xl font-semibold text-zinc-100">
|
|
{{ $t("settings.admin.store.title") }}
|
|
</h2>
|
|
|
|
<h3 class="text-base font-medium text-zinc-400 mb-3 m-x-0">
|
|
{{ $t("settings.admin.store.showGamePanelTextDecoration") }}
|
|
</h3>
|
|
<ul class="flex gap-3">
|
|
<li class="inline-block">
|
|
<OptionWrapper
|
|
:active="showGamePanelTextDecoration"
|
|
@click="setShowTitleDescription(true)"
|
|
>
|
|
<div class="flex">
|
|
<GamePanel
|
|
:animate="false"
|
|
:game="game"
|
|
:default-placeholder="true"
|
|
/>
|
|
</div>
|
|
</OptionWrapper>
|
|
</li>
|
|
<li class="inline-block">
|
|
<OptionWrapper
|
|
:active="!showGamePanelTextDecoration"
|
|
@click="setShowTitleDescription(false)"
|
|
>
|
|
<div class="flex">
|
|
<GamePanel
|
|
:game="game"
|
|
:show-title-description="false"
|
|
:animate="false"
|
|
:default-placeholder="true"
|
|
/>
|
|
</div>
|
|
</OptionWrapper>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<LoadingButton
|
|
type="submit"
|
|
class="inline-flex w-full shadow-sm sm:w-auto"
|
|
:loading="saving"
|
|
:disabled="!allowSave"
|
|
>
|
|
{{ allowSave ? $t("common.save") : $t("common.saved") }}
|
|
</LoadingButton>
|
|
</form>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import { FetchError } from "ofetch";
|
|
|
|
const { t } = useI18n();
|
|
|
|
definePageMeta({
|
|
layout: "admin",
|
|
});
|
|
|
|
useHead({
|
|
title: t("settings.admin.title"),
|
|
});
|
|
|
|
const settings = await $dropFetch("/api/v1/settings");
|
|
const { game } = await $dropFetch("/api/v1/admin/settings/dummy-data");
|
|
|
|
const allowSave = ref(false);
|
|
|
|
const showGamePanelTextDecoration = ref<boolean>(
|
|
settings.showGamePanelTextDecoration,
|
|
);
|
|
|
|
function setShowTitleDescription(value: boolean) {
|
|
showGamePanelTextDecoration.value = value;
|
|
allowSave.value = true;
|
|
}
|
|
|
|
const saving = ref<boolean>(false);
|
|
async function saveSettings() {
|
|
saving.value = true;
|
|
try {
|
|
await $dropFetch("/api/v1/admin/settings", {
|
|
method: "PATCH",
|
|
body: {
|
|
showGamePanelTextDecoration: showGamePanelTextDecoration.value,
|
|
},
|
|
});
|
|
} catch (e) {
|
|
createModal(
|
|
ModalType.Notification,
|
|
{
|
|
title: `Failed to save settings.`,
|
|
description:
|
|
e instanceof FetchError
|
|
? (e.statusMessage ?? e.message)
|
|
: (e as string).toString(),
|
|
},
|
|
(_, c) => c(),
|
|
);
|
|
}
|
|
saving.value = false;
|
|
allowSave.value = false;
|
|
}
|
|
</script>
|