Merge pull request 'refactor: Add fetchAllContentImages function and update Manga component to utilize it' (#29) from refactor into main
Reviewed-on: #29
This commit is contained in:
commit
3bfa2ffdb6
@ -192,17 +192,17 @@ export interface PageMangaImportJobDTO {
|
|||||||
number?: number;
|
number?: number;
|
||||||
pageable?: PageableObject;
|
pageable?: PageableObject;
|
||||||
numberOfElements?: number;
|
numberOfElements?: number;
|
||||||
|
sort?: SortObject;
|
||||||
first?: boolean;
|
first?: boolean;
|
||||||
last?: boolean;
|
last?: boolean;
|
||||||
sort?: SortObject;
|
|
||||||
empty?: boolean;
|
empty?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface PageableObject {
|
export interface PageableObject {
|
||||||
offset?: number;
|
offset?: number;
|
||||||
|
paged?: boolean;
|
||||||
pageNumber?: number;
|
pageNumber?: number;
|
||||||
pageSize?: number;
|
pageSize?: number;
|
||||||
paged?: boolean;
|
|
||||||
unpaged?: boolean;
|
unpaged?: boolean;
|
||||||
sort?: SortObject;
|
sort?: SortObject;
|
||||||
}
|
}
|
||||||
@ -254,9 +254,9 @@ export interface PageMangaListDTO {
|
|||||||
number?: number;
|
number?: number;
|
||||||
pageable?: PageableObject;
|
pageable?: PageableObject;
|
||||||
numberOfElements?: number;
|
numberOfElements?: number;
|
||||||
|
sort?: SortObject;
|
||||||
first?: boolean;
|
first?: boolean;
|
||||||
last?: boolean;
|
last?: boolean;
|
||||||
sort?: SortObject;
|
|
||||||
empty?: boolean;
|
empty?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -289,6 +289,69 @@ export const useFetchContentProviderContentList = <TError = unknown,
|
|||||||
return useMutation(mutationOptions, queryClient);
|
return useMutation(mutationOptions, queryClient);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
* Fetch all not yet downloaded content's images from the provider
|
||||||
|
* @summary Fetch all content's images
|
||||||
|
*/
|
||||||
|
export const fetchAllContentImages = (
|
||||||
|
mangaContentProviderId: number,
|
||||||
|
options?: SecondParameter<typeof customInstance>,signal?: AbortSignal
|
||||||
|
) => {
|
||||||
|
|
||||||
|
|
||||||
|
return customInstance<DefaultResponseDTOVoid>(
|
||||||
|
{url: `/ingestion/manga-content-providers/${encodeURIComponent(String(mangaContentProviderId))}/fetch-all-chapters`, method: 'POST', signal
|
||||||
|
},
|
||||||
|
options);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export const getFetchAllContentImagesMutationOptions = <TError = unknown,
|
||||||
|
TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof fetchAllContentImages>>, TError,{mangaContentProviderId: number}, TContext>, request?: SecondParameter<typeof customInstance>}
|
||||||
|
): UseMutationOptions<Awaited<ReturnType<typeof fetchAllContentImages>>, TError,{mangaContentProviderId: number}, TContext> => {
|
||||||
|
|
||||||
|
const mutationKey = ['fetchAllContentImages'];
|
||||||
|
const {mutation: mutationOptions, request: requestOptions} = options ?
|
||||||
|
options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ?
|
||||||
|
options
|
||||||
|
: {...options, mutation: {...options.mutation, mutationKey}}
|
||||||
|
: {mutation: { mutationKey, }, request: undefined};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const mutationFn: MutationFunction<Awaited<ReturnType<typeof fetchAllContentImages>>, {mangaContentProviderId: number}> = (props) => {
|
||||||
|
const {mangaContentProviderId} = props ?? {};
|
||||||
|
|
||||||
|
return fetchAllContentImages(mangaContentProviderId,requestOptions)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return { mutationFn, ...mutationOptions }}
|
||||||
|
|
||||||
|
export type FetchAllContentImagesMutationResult = NonNullable<Awaited<ReturnType<typeof fetchAllContentImages>>>
|
||||||
|
|
||||||
|
export type FetchAllContentImagesMutationError = unknown
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @summary Fetch all content's images
|
||||||
|
*/
|
||||||
|
export const useFetchAllContentImages = <TError = unknown,
|
||||||
|
TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof fetchAllContentImages>>, TError,{mangaContentProviderId: number}, TContext>, request?: SecondParameter<typeof customInstance>}
|
||||||
|
, queryClient?: QueryClient): UseMutationResult<
|
||||||
|
Awaited<ReturnType<typeof fetchAllContentImages>>,
|
||||||
|
TError,
|
||||||
|
{mangaContentProviderId: number},
|
||||||
|
TContext
|
||||||
|
> => {
|
||||||
|
|
||||||
|
const mutationOptions = getFetchAllContentImagesMutationOptions(options);
|
||||||
|
|
||||||
|
return useMutation(mutationOptions, queryClient);
|
||||||
|
}
|
||||||
|
/**
|
||||||
* Retrieve a list of content providers
|
* Retrieve a list of content providers
|
||||||
* @summary Get a list of content providers
|
* @summary Get a list of content providers
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -1,91 +0,0 @@
|
|||||||
/**
|
|
||||||
* Generated by orval v7.17.0 🍺
|
|
||||||
* Do not edit manually.
|
|
||||||
* OpenAPI definition
|
|
||||||
* OpenAPI spec version: v0
|
|
||||||
*/
|
|
||||||
import {
|
|
||||||
useMutation
|
|
||||||
} from '@tanstack/react-query';
|
|
||||||
import type {
|
|
||||||
MutationFunction,
|
|
||||||
QueryClient,
|
|
||||||
UseMutationOptions,
|
|
||||||
UseMutationResult
|
|
||||||
} from '@tanstack/react-query';
|
|
||||||
|
|
||||||
import type {
|
|
||||||
DefaultResponseDTOVoid
|
|
||||||
} from '../api.schemas';
|
|
||||||
|
|
||||||
import { customInstance } from '../../api';
|
|
||||||
|
|
||||||
|
|
||||||
type SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fetch all not yet downloaded chapters from the provider
|
|
||||||
* @summary Fetch all chapters
|
|
||||||
*/
|
|
||||||
export const fetchAllChapters = (
|
|
||||||
mangaProviderId: number,
|
|
||||||
options?: SecondParameter<typeof customInstance>,signal?: AbortSignal
|
|
||||||
) => {
|
|
||||||
|
|
||||||
|
|
||||||
return customInstance<DefaultResponseDTOVoid>(
|
|
||||||
{url: `/mangas/${encodeURIComponent(String(mangaProviderId))}/fetch-all-chapters`, method: 'POST', signal
|
|
||||||
},
|
|
||||||
options);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export const getFetchAllChaptersMutationOptions = <TError = unknown,
|
|
||||||
TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof fetchAllChapters>>, TError,{mangaProviderId: number}, TContext>, request?: SecondParameter<typeof customInstance>}
|
|
||||||
): UseMutationOptions<Awaited<ReturnType<typeof fetchAllChapters>>, TError,{mangaProviderId: number}, TContext> => {
|
|
||||||
|
|
||||||
const mutationKey = ['fetchAllChapters'];
|
|
||||||
const {mutation: mutationOptions, request: requestOptions} = options ?
|
|
||||||
options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ?
|
|
||||||
options
|
|
||||||
: {...options, mutation: {...options.mutation, mutationKey}}
|
|
||||||
: {mutation: { mutationKey, }, request: undefined};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const mutationFn: MutationFunction<Awaited<ReturnType<typeof fetchAllChapters>>, {mangaProviderId: number}> = (props) => {
|
|
||||||
const {mangaProviderId} = props ?? {};
|
|
||||||
|
|
||||||
return fetchAllChapters(mangaProviderId,requestOptions)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return { mutationFn, ...mutationOptions }}
|
|
||||||
|
|
||||||
export type FetchAllChaptersMutationResult = NonNullable<Awaited<ReturnType<typeof fetchAllChapters>>>
|
|
||||||
|
|
||||||
export type FetchAllChaptersMutationError = unknown
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @summary Fetch all chapters
|
|
||||||
*/
|
|
||||||
export const useFetchAllChapters = <TError = unknown,
|
|
||||||
TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof fetchAllChapters>>, TError,{mangaProviderId: number}, TContext>, request?: SecondParameter<typeof customInstance>}
|
|
||||||
, queryClient?: QueryClient): UseMutationResult<
|
|
||||||
Awaited<ReturnType<typeof fetchAllChapters>>,
|
|
||||||
TError,
|
|
||||||
{mangaProviderId: number},
|
|
||||||
TContext
|
|
||||||
> => {
|
|
||||||
|
|
||||||
const mutationOptions = getFetchAllChaptersMutationOptions(options);
|
|
||||||
|
|
||||||
return useMutation(mutationOptions, queryClient);
|
|
||||||
}
|
|
||||||
|
|
||||||
@ -14,7 +14,7 @@ import { useCallback } from "react";
|
|||||||
import { useNavigate, useParams } from "react-router";
|
import { useNavigate, useParams } from "react-router";
|
||||||
import { toast } from "sonner";
|
import { toast } from "sonner";
|
||||||
import { useGetManga } from "@/api/generated/catalog/catalog.ts";
|
import { useGetManga } from "@/api/generated/catalog/catalog.ts";
|
||||||
import { useFetchContentProviderContentList } from "@/api/generated/ingestion/ingestion.ts";
|
import {useFetchAllContentImages, useFetchContentProviderContentList} from "@/api/generated/ingestion/ingestion.ts";
|
||||||
import {
|
import {
|
||||||
useFollowManga,
|
useFollowManga,
|
||||||
useSetFavorite,
|
useSetFavorite,
|
||||||
@ -53,12 +53,12 @@ const Manga = () => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
// const { mutate: fetchAllMutate, isPending: fetchAllPending } =
|
const { mutate: fetchAllMutate, isPending: fetchAllPending } =
|
||||||
// useFetchAllChapters({
|
useFetchAllContentImages({
|
||||||
// mutation: {
|
mutation: {
|
||||||
// onSuccess: () => toast.success("Chapter import queued successfully."),
|
onSuccess: () => toast.success("Chapter import queued successfully."),
|
||||||
// },
|
},
|
||||||
// });
|
});
|
||||||
|
|
||||||
const isPending = fetchPending;
|
const isPending = fetchPending;
|
||||||
|
|
||||||
@ -368,24 +368,24 @@ const Manga = () => {
|
|||||||
</div>
|
</div>
|
||||||
{provider.supportsChapterFetch && provider.active && (
|
{provider.supportsChapterFetch && provider.active && (
|
||||||
<div className={"flex gap-4 pr-4"}>
|
<div className={"flex gap-4 pr-4"}>
|
||||||
{/*<Button*/}
|
|
||||||
{/* size="sm"*/}
|
|
||||||
{/* variant="outline"*/}
|
|
||||||
{/* disabled={isPending}*/}
|
|
||||||
{/* onClick={() =>*/}
|
|
||||||
{/* fetchAllMutate({*/}
|
|
||||||
{/* mangaProviderId: provider.id?? -1,*/}
|
|
||||||
{/* })*/}
|
|
||||||
{/* }*/}
|
|
||||||
{/* className="gap-2"*/}
|
|
||||||
{/*>*/}
|
|
||||||
{/* <Database className="h-4 w-4" />*/}
|
|
||||||
{/* Fetch all from Provider*/}
|
|
||||||
{/*</Button>*/}
|
|
||||||
<Button
|
<Button
|
||||||
size="sm"
|
size="sm"
|
||||||
variant="outline"
|
variant="outline"
|
||||||
disabled={isPending}
|
disabled={(isPending || fetchAllPending) && provider.chaptersAvailable > 0}
|
||||||
|
onClick={() =>
|
||||||
|
fetchAllMutate({
|
||||||
|
mangaContentProviderId: provider.id?? -1,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
className="gap-2"
|
||||||
|
>
|
||||||
|
<Database className="h-4 w-4" />
|
||||||
|
Fetch all from Provider
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
size="sm"
|
||||||
|
variant="outline"
|
||||||
|
disabled={isPending || fetchAllPending}
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
mutate({
|
mutate({
|
||||||
mangaContentProviderId: provider.id ?? -1,
|
mangaContentProviderId: provider.id ?? -1,
|
||||||
@ -394,7 +394,7 @@ const Manga = () => {
|
|||||||
className="gap-2"
|
className="gap-2"
|
||||||
>
|
>
|
||||||
<Database className="h-4 w-4" />
|
<Database className="h-4 w-4" />
|
||||||
Fetch from Provider
|
Fetch list from Provider
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user