feat: add support for content fetch in provider manager and display update button conditionally

This commit is contained in:
Rodrigo Verdiani 2026-04-10 10:13:49 -03:00
parent 0fc2378cfa
commit a7058346a5
2 changed files with 42 additions and 24 deletions

View File

@ -117,6 +117,7 @@ export interface ContentProviderDTO {
name: string;
url?: string;
active?: boolean;
supportsContentFetch?: boolean;
}
export interface ContentProviderListDTO {
@ -214,9 +215,9 @@ export interface PageMangaImportJobDTO {
number?: number;
pageable?: PageableObject;
numberOfElements?: number;
sort?: SortObject;
first?: boolean;
last?: boolean;
sort?: SortObject;
empty?: boolean;
}
@ -277,9 +278,9 @@ export interface PageMangaListDTO {
number?: number;
pageable?: PageableObject;
numberOfElements?: number;
sort?: SortObject;
first?: boolean;
last?: boolean;
sort?: SortObject;
empty?: boolean;
}

View File

@ -7,6 +7,7 @@ import {
import { Badge } from "@/components/ui/badge.tsx";
import { Button } from "@/components/ui/button.tsx";
import { Card } from "@/components/ui/card.tsx";
import {toast} from "sonner";
export const ProviderManager = () => {
const { data } = useGetContentProviders();
@ -15,12 +16,26 @@ export const ProviderManager = () => {
const {
mutate: mutateFetchContentProviderMangas,
isPending: isPendingFetchContentProviderMangas,
} = useFetchContentProviderMangas();
} = useFetchContentProviderMangas({
mutation: {
onSuccess: () => {
toast.success("Content Provider mangas update queued successfully!");
},
},
});
const {
mutate: mutateFetchAllContentProviderMangas,
isPending: isPendingFetchAllContentProviderMangas,
} = useFetchAllContentProviderMangas();
} = useFetchAllContentProviderMangas(
{
mutation: {
onSuccess: () => {
toast.success("All Content Provider mangas update queued successfully!");
},
},
}
);
const activeCount = providers?.filter((p) => p.active).length;
@ -104,26 +119,28 @@ export const ProviderManager = () => {
</p>
</div>
<Button
variant="outline"
size="sm"
onClick={() =>
mutateFetchContentProviderMangas({
providerId: provider?.id ?? -1,
})
}
disabled={
!provider.active || isPendingFetchContentProviderMangas
}
className="gap-2 shrink-0"
>
{isPendingFetchContentProviderMangas ? (
<Loader2 className="h-3 w-3 animate-spin" />
) : (
<RefreshCw className="h-3 w-3" />
)}
Update
</Button>
{provider.supportsContentFetch && (
<Button
variant="outline"
size="sm"
onClick={() =>
mutateFetchContentProviderMangas({
providerId: provider?.id ?? -1,
})
}
disabled={
!provider.active || isPendingFetchContentProviderMangas
}
className="gap-2 shrink-0"
>
{isPendingFetchContentProviderMangas ? (
<Loader2 className="h-3 w-3 animate-spin" />
) : (
<RefreshCw className="h-3 w-3" />
)}
Update
</Button>
)}
</div>
</Card>
);