Use nuxtopenfetch

This commit is contained in:
2025-10-10 20:13:29 +02:00
parent 1bce60af7d
commit 48d355d657
19 changed files with 2039 additions and 1660 deletions

View File

@@ -8,7 +8,7 @@ import MangaDetailPage from '~/components/MangaDetailPage.vue';
const route = useRoute();
const mangaId = route.params.MangaId as string;
const { data: manga } = await useApiData('/v2/Manga/{MangaId}', {
const { data: manga } = await useApi('/v2/Manga/{MangaId}', {
path: { MangaId: mangaId },
key: FetchKeys.Manga.Id(mangaId),
});

View File

@@ -13,8 +13,6 @@
</template>
<script setup lang="ts">
const { data: manga } = await useApiData('/v2/Manga', { key: FetchKeys.Manga.All });
const { data: manga } = await useApi('/v2/Manga', { key: FetchKeys.Manga.All });
const expanded = ref(-1);
</script>
<style scoped></style>

View File

@@ -11,9 +11,9 @@
import MangaDetailPage from '~/components/MangaDetailPage.vue';
const route = useRoute();
const mangaId = route.params.MangaId as string;
const mangaId = route.params.mangaId as string;
const { data: manga } = await useApiData('/v2/Manga/{MangaId}', {
const { data: manga } = await useApi('/v2/Manga/{MangaId}', {
path: { MangaId: mangaId },
key: FetchKeys.Manga.Id(mangaId),
});

View File

@@ -24,11 +24,11 @@ const route = useRoute();
const targetId = route.params.targetId as string;
const mangaId = route.params.mangaId as string;
const { data: target } = await useApiData('/v2/Manga/{MangaId}', {
const { data: target } = await useApi('/v2/Manga/{MangaId}', {
path: { MangaId: targetId },
key: FetchKeys.Manga.Id(targetId),
});
const { data: manga } = await useApiData('/v2/Manga/{MangaId}', {
const { data: manga } = await useApi('/v2/Manga/{MangaId}', {
path: { MangaId: mangaId },
key: FetchKeys.Manga.Id(mangaId),
});

View File

@@ -12,10 +12,11 @@
<script setup lang="ts">
const route = useRoute();
const mangaId = route.params.mangaId as string;
const { data: manga } = await useApiData('/v2/Manga/{MangaId}', {
path: { MangaId: route.params.mangaId as string },
const { data: manga } = await useApi('/v2/Manga/{MangaId}', {
path: { MangaId: mangaId },
key: FetchKeys.Manga.Id(mangaId),
});
const { data: mangas } = await useApiData('/v2/Manga', { key: FetchKeys.Manga.All });
const { data: mangas } = await useApi('/v2/Manga', { key: FetchKeys.Manga.All });
</script>

View File

@@ -46,12 +46,13 @@
</template>
<script setup lang="ts">
import { $api, type ApiModel } from '#nuxt-api-party';
import type { components } from '#open-fetch-schemas/api';
import type { StepperItem } from '@nuxt/ui';
type MangaConnector = ApiModel<'MangaConnector'>;
type MinimalManga = ApiModel<'MinimalManga'>;
import type { AsyncData, FetchResult } from '#app';
type MangaConnector = components['schemas']['MangaConnector'];
type MinimalManga = components['schemas']['MinimalManga'];
const { data: connectors } = await useApiData('/v2/MangaConnector', { FetchKeys: FetchKeys.MangaConnector.All });
const { data: connectors } = await useApi('/v2/MangaConnector', { key: FetchKeys.MangaConnector.All });
const query = ref<string>();
const connector = useState<MangaConnector>();
@@ -91,21 +92,19 @@ const performSearch = () => {
.finally(() => (busy.value = false));
};
const config = useRuntimeConfig();
const search = async (query: string): Promise<MinimalManga[]> => {
if (isUrl(query)) {
return await $api<'/v2/Search/Url', MinimalManga>('/v2/Search/Url', {
body: JSON.stringify(query),
method: 'POST',
}).then((x) => [x]);
} else if (connector.value) {
return await $api('/v2/Search/{MangaConnectorName}/{Query}', {
path: { MangaConnectorName: connector.value.name, query: query },
method: 'POST',
const { data } = await useApi('/v2/Search/Url', { body: JSON.stringify(query), method: 'POST' });
if (data.value) return [data.value];
else return Promise.reject();
} else if (connector.value.name) {
const { data } = await useApi('/v2/Search/{MangaConnectorName}/{Query}', {
path: { MangaConnectorName: connector.value.name, Query: query },
method: 'GET',
});
}
return Promise.reject();
if (data.value) return data.value;
else return Promise.reject();
} else return Promise.reject();
};
const items = ref<StepperItem[]>([

View File

@@ -2,7 +2,7 @@
<UPageSection title="Settings" />
<UPageSection title="Libraries" orientation="horizontal">
<template #footer>
<UButton icon="i-lucide-plus" class="w-fit" @click="() => addLibraryModal.open()">Add</UButton>
<UButton icon="i-lucide-plus" class="w-fit" @click="addLibraryModal.open()">Add</UButton>
</template>
<FileLibraries />
</UPageSection>
@@ -17,19 +17,17 @@
<script setup lang="ts">
import { LazyAddLibraryModal } from '#components';
import FileLibraries from '~/components/FileLibraries.vue';
import { refreshNuxtData } from '#app';
const overlay = useOverlay();
const config = useRuntimeConfig();
const addLibraryModal = overlay.create(LazyAddLibraryModal);
const cleanUpDatabaseBusy = ref(false);
const cleanUpDatabase = async () => {
cleanUpDatabaseBusy.value = true;
await $api('/v2/Maintenance/CleanupNoDownloadManga', { method: 'POST' })
.then(() => refreshNuxtData(Keys.Manga.All))
await useApi('/v2/Maintenance/CleanupNoDownloadManga', { method: 'POST' })
.then(() => refreshNuxtData(FetchKeys.Manga.All))
.finally(() => (cleanUpDatabaseBusy.value = false));
};
</script>