@ -1,20 +1,18 @@
import { useMemo } from "react" ;
import { useMutation , useQuery , useQueryClient } from " react-query";
import { useMutation , useQuery , useQueryClient } from " @tanstack/ react-query";
import { QueryKeys } from "@/apis/queries/keys" ;
import api from "@/apis/raw" ;
import { Environment } from "@/utilities" ;
import { setAuthenticated } from "@/utilities/event" ;
export function useBadges() {
return useQuery (
[ QueryKeys . System , QueryKeys . Badges ] ,
( ) = > api . badges . all ( ) ,
{
refetchOnWindowFocus : "always" ,
refetchInterval : 1000 * 60 ,
staleTime : 1000 * 10 ,
} ,
) ;
return useQuery ( {
queryKey : [ QueryKeys . System , QueryKeys . Badges ] ,
queryFn : ( ) = > api . badges . all ( ) ,
refetchOnWindowFocus : "always" ,
refetchInterval : 1000 * 60 ,
staleTime : 1000 * 10 ,
} ) ;
}
export function useFileSystem (
@ -22,9 +20,10 @@ export function useFileSystem(
path : string ,
enabled : boolean ,
) {
return useQuery (
[ QueryKeys . FileSystem , type , path ] ,
( ) = > {
return useQuery ( {
queryKey : [ QueryKeys . FileSystem , type , path ] ,
queryFn : ( ) = > {
if ( type === "bazarr" ) {
return api . files . bazarr ( path ) ;
} else if ( type === "radarr" ) {
@ -32,53 +31,63 @@ export function useFileSystem(
} else if ( type === "sonarr" ) {
return api . files . sonarr ( path ) ;
}
return [ ] ;
} ,
{
enabled ,
} ,
) ;
enabled ,
} ) ;
}
export function useSystemSettings() {
return useQuery (
[ QueryKeys . System , QueryKeys . Settings ] ,
( ) = > api . system . settings ( ) ,
{
staleTime : Infinity ,
} ,
) ;
return useQuery ( {
queryKey : [ QueryKeys . System , QueryKeys . Settings ] ,
queryFn : ( ) = > api . system . settings ( ) ,
staleTime : Infinity ,
} ) ;
}
export function useSettingsMutation() {
const client = useQueryClient ( ) ;
return useMutation (
[ QueryKeys . System , QueryKeys . Settings ] ,
( data : LooseObject ) = > api . system . updateSettings ( data ) ,
{
onSuccess : ( ) = > {
client . invalidateQueries ( [ QueryKeys . System ] ) ;
client . invalidateQueries ( [ QueryKeys . Series ] ) ;
client . invalidateQueries ( [ QueryKeys . Episodes ] ) ;
client . invalidateQueries ( [ QueryKeys . Movies ] ) ;
client . invalidateQueries ( [ QueryKeys . Wanted ] ) ;
client . invalidateQueries ( [ QueryKeys . Badges ] ) ;
} ,
return useMutation ( {
mutationKey : [ QueryKeys . System , QueryKeys . Settings ] ,
mutationFn : ( data : LooseObject ) = > api . system . updateSettings ( data ) ,
onSuccess : ( ) = > {
client . invalidateQueries ( {
queryKey : [ QueryKeys . System ] ,
} ) ;
client . invalidateQueries ( {
queryKey : [ QueryKeys . Series ] ,
} ) ;
client . invalidateQueries ( {
queryKey : [ QueryKeys . Episodes ] ,
} ) ;
client . invalidateQueries ( {
queryKey : [ QueryKeys . Movies ] ,
} ) ;
client . invalidateQueries ( {
queryKey : [ QueryKeys . Wanted ] ,
} ) ;
client . invalidateQueries ( {
queryKey : [ QueryKeys . Badges ] ,
} ) ;
} ,
) ;
} );
}
export function useServerSearch ( query : string , enabled : boolean ) {
return useQuery (
[ QueryKeys . System , QueryKeys . Search , query ] ,
( ) = > api . system . search ( query ) ,
{
enabled ,
} ,
) ;
return useQuery ( {
queryKey : [ QueryKeys . System , QueryKeys . Search , query ] ,
queryFn : ( ) = > api . system . search ( query ) ,
enabled ,
} ) ;
}
export function useSystemLogs() {
return useQuery ( [ QueryKeys . System , QueryKeys . Logs ] , ( ) = > api . system . logs ( ) , {
return useQuery ( {
queryKey : [ QueryKeys . System , QueryKeys . Logs ] ,
queryFn : ( ) = > api . system . logs ( ) ,
refetchOnWindowFocus : "always" ,
refetchInterval : 1000 * 60 ,
staleTime : 1000 * 10 ,
@ -87,171 +96,187 @@ export function useSystemLogs() {
export function useDeleteLogs() {
const client = useQueryClient ( ) ;
return useMutation (
[ QueryKeys . System , QueryKeys . Logs ] ,
( ) = > api . system . deleteLogs ( ) ,
{
onSuccess : ( ) = > {
client . invalidateQueries ( [ QueryKeys . System , QueryKeys . Logs ] ) ;
} ,
return useMutation ( {
mutationKey : [ QueryKeys . System , QueryKeys . Logs ] ,
mutationFn : ( ) = > api . system . deleteLogs ( ) ,
onSuccess : ( ) = > {
client . invalidateQueries ( {
queryKey : [ QueryKeys . System , QueryKeys . Logs ] ,
} ) ;
} ,
);
} );
}
export function useSystemAnnouncements() {
return useQuery (
[ QueryKeys . System , QueryKeys . Announcements ] ,
( ) = > api . system . announcements ( ) ,
{
refetchOnWindowFocus : "always" ,
refetchInterval : 1000 * 60 ,
staleTime : 1000 * 10 ,
} ,
) ;
return useQuery ( {
queryKey : [ QueryKeys . System , QueryKeys . Announcements ] ,
queryFn : ( ) = > api . system . announcements ( ) ,
refetchOnWindowFocus : "always" ,
refetchInterval : 1000 * 60 ,
staleTime : 1000 * 10 ,
} ) ;
}
export function useSystemAnnouncementsAddDismiss() {
const client = useQueryClient ( ) ;
return useMutation (
[ QueryKeys . System , QueryKeys . Announcements ] ,
( param : { hash : string } ) = > {
return useMutation ( {
mutationKey : [ QueryKeys . System , QueryKeys . Announcements ] ,
mutationFn : ( param : { hash : string } ) = > {
const { hash } = param ;
return api . system . addAnnouncementsDismiss ( hash ) ;
} ,
{
onSuccess : ( _ , { hash } ) = > {
client . invalidateQueries ( [ QueryKeys . System , QueryKeys . Announcements ] ) ;
client . invalidateQueries ( [ QueryKeys . System , QueryKeys . Badges ] ) ;
} ,
onSuccess : ( _ , { hash } ) = > {
client . invalidateQueries ( {
queryKey : [ QueryKeys . System , QueryKeys . Announcements ] ,
} ) ;
client . invalidateQueries ( {
queryKey : [ QueryKeys . System , QueryKeys . Badges ] ,
} ) ;
} ,
) ;
} );
}
export function useSystemTasks() {
return useQuery (
[ QueryKeys . System , QueryKeys . Tasks ] ,
( ) = > api . system . tasks ( ) ,
{
refetchOnWindowFocus : "always" ,
refetchInterval : 1000 * 60 ,
staleTime : 1000 * 10 ,
} ,
) ;
return useQuery ( {
queryKey : [ QueryKeys . System , QueryKeys . Tasks ] ,
queryFn : ( ) = > api . system . tasks ( ) ,
refetchOnWindowFocus : "always" ,
refetchInterval : 1000 * 60 ,
staleTime : 1000 * 10 ,
} ) ;
}
export function useRunTask() {
const client = useQueryClient ( ) ;
return useMutation (
[ QueryKeys . System , QueryKeys . Tasks ] ,
( id : string ) = > api . system . runTask ( id ) ,
{
onSuccess : ( ) = > {
client . invalidateQueries ( [ QueryKeys . System , QueryKeys . Tasks ] ) ;
client . invalidateQueries ( [ QueryKeys . System , QueryKeys . Backups ] ) ;
} ,
return useMutation ( {
mutationKey : [ QueryKeys . System , QueryKeys . Tasks ] ,
mutationFn : ( id : string ) = > api . system . runTask ( id ) ,
onSuccess : ( ) = > {
client . invalidateQueries ( {
queryKey : [ QueryKeys . System , QueryKeys . Tasks ] ,
} ) ;
client . invalidateQueries ( {
queryKey : [ QueryKeys . System , QueryKeys . Backups ] ,
} ) ;
} ,
) ;
} );
}
export function useSystemBackups() {
return useQuery ( [ QueryKeys . System , "backups" ] , ( ) = > api . system . backups ( ) ) ;
return useQuery ( {
queryKey : [ QueryKeys . System , "backups" ] ,
queryFn : ( ) = > api . system . backups ( ) ,
} ) ;
}
export function useCreateBackups() {
const client = useQueryClient ( ) ;
return useMutation (
[ QueryKeys . System , QueryKeys . Backups ] ,
( ) = > api . system . createBackups ( ) ,
{
onSuccess : ( ) = > {
client . invalidateQueries ( [ QueryKeys . System , QueryKeys . Backups ] ) ;
} ,
return useMutation ( {
mutationKey : [ QueryKeys . System , QueryKeys . Backups ] ,
mutationFn : ( ) = > api . system . createBackups ( ) ,
onSuccess : ( ) = > {
client . invalidateQueries ( {
queryKey : [ QueryKeys . System , QueryKeys . Backups ] ,
} ) ;
} ,
);
} );
}
export function useRestoreBackups() {
const client = useQueryClient ( ) ;
return useMutation (
[ QueryKeys . System , QueryKeys . Backups ] ,
( filename : string ) = > api . system . restoreBackups ( filename ) ,
{
onSuccess : ( ) = > {
client . invalidateQueries ( [ QueryKeys . System , QueryKeys . Backups ] ) ;
} ,
return useMutation ( {
mutationKey : [ QueryKeys . System , QueryKeys . Backups ] ,
mutationFn : ( filename : string ) = > api . system . restoreBackups ( filename ) ,
onSuccess : ( ) = > {
client . invalidateQueries ( {
queryKey : [ QueryKeys . System , QueryKeys . Backups ] ,
} ) ;
} ,
);
} );
}
export function useDeleteBackups() {
const client = useQueryClient ( ) ;
return useMutation (
[ QueryKeys . System , QueryKeys . Backups ] ,
( filename : string ) = > api . system . deleteBackups ( filename ) ,
{
onSuccess : ( ) = > {
client . invalidateQueries ( [ QueryKeys . System , QueryKeys . Backups ] ) ;
} ,
return useMutation ( {
mutationKey : [ QueryKeys . System , QueryKeys . Backups ] ,
mutationFn : ( filename : string ) = > api . system . deleteBackups ( filename ) ,
onSuccess : ( ) = > {
client . invalidateQueries ( {
queryKey : [ QueryKeys . System , QueryKeys . Backups ] ,
} ) ;
} ,
);
} );
}
export function useSystemStatus() {
return useQuery ( [ QueryKeys . System , "status" ] , ( ) = > api . system . status ( ) ) ;
return useQuery ( {
queryKey : [ QueryKeys . System , "status" ] ,
queryFn : ( ) = > api . system . status ( ) ,
} ) ;
}
export function useSystemHealth() {
return useQuery ( [ QueryKeys . System , "health" ] , ( ) = > api . system . health ( ) ) ;
return useQuery ( {
queryKey : [ QueryKeys . System , "health" ] ,
queryFn : ( ) = > api . system . health ( ) ,
} ) ;
}
export function useSystemReleases() {
return useQuery ( [ QueryKeys . System , "releases" ] , ( ) = > api . system . releases ( ) ) ;
return useQuery ( {
queryKey : [ QueryKeys . System , "releases" ] ,
queryFn : ( ) = > api . system . releases ( ) ,
} ) ;
}
export function useSystem() {
const client = useQueryClient ( ) ;
const { mutate : logout , isLoading : isLoggingOut } = useMutation (
[ QueryKeys . System , QueryKeys . Actions ] ,
( ) = > api . system . logout ( ) ,
{
onSuccess : ( ) = > {
setAuthenticated ( false ) ;
client . clear ( ) ;
} ,
const { mutate : logout , isPending : isLoggingOut } = useMutation ( {
mutationKey : [ QueryKeys . System , QueryKeys . Actions ] ,
mutationFn : ( ) = > api . system . logout ( ) ,
onSuccess : ( ) = > {
setAuthenticated ( false ) ;
client . clear ( ) ;
} ,
);
} );
const { mutate : login , isLoading : isLoggingIn } = useMutation (
[ QueryKeys . System , QueryKeys . Actions ] ,
( param : { username : string ; password : string } ) = >
const { mutate : login , isPending : isLoggingIn } = useMutation ( {
mutationKey : [ QueryKeys . System , QueryKeys . Actions ] ,
mutationFn : ( param : { username : string ; password : string } ) = >
api . system . login ( param . username , param . password ) ,
{
onSuccess : ( ) = > {
// TODO: Hard-coded value
window . location . replace ( Environment . baseUrl ) ;
} ,
onSuccess : ( ) = > {
// TODO: Hard-coded value
window . location . replace ( Environment . baseUrl ) ;
} ,
);
} );
const { mutate : shutdown , isLoading : isShuttingDown } = useMutation (
[ QueryKeys . System , QueryKeys . Actions ] ,
( ) = > api . system . shutdown ( ) ,
{
onSuccess : ( ) = > {
client . clear ( ) ;
} ,
const { mutate : shutdown , isPending : isShuttingDown } = useMutation ( {
mutationKey : [ QueryKeys . System , QueryKeys . Actions ] ,
mutationFn : ( ) = > api . system . shutdown ( ) ,
onSuccess : ( ) = > {
client . clear ( ) ;
} ,
) ;
} ) ;
const { mutate : restart , isPending : isRestarting } = useMutation ( {
mutationKey : [ QueryKeys . System , QueryKeys . Actions ] ,
mutationFn : ( ) = > api . system . restart ( ) ,
const { mutate : restart , isLoading : isRestarting } = useMutation (
[ QueryKeys . System , QueryKeys . Actions ] ,
( ) = > api . system . restart ( ) ,
{
onSuccess : ( ) = > {
client . clear ( ) ;
} ,
onSuccess : ( ) = > {
client . clear ( ) ;
} ,
);
} ) ;
return useMemo (
( ) = > ( {