mirror of https://github.com/morpheus65535/bazarr
138 lines
3.4 KiB
TypeScript
138 lines
3.4 KiB
TypeScript
import {
|
|
QueryClient,
|
|
useMutation,
|
|
useQuery,
|
|
useQueryClient,
|
|
} from "react-query";
|
|
import { usePaginationQuery } from "../queries/hooks";
|
|
import { QueryKeys } from "../queries/keys";
|
|
import api from "../raw";
|
|
|
|
const cacheMovies = (client: QueryClient, movies: Item.Movie[]) => {
|
|
movies.forEach((item) => {
|
|
client.setQueryData([QueryKeys.Movies, item.radarrId], item);
|
|
});
|
|
};
|
|
|
|
export function useMoviesByIds(ids: number[]) {
|
|
const client = useQueryClient();
|
|
return useQuery([QueryKeys.Movies, ...ids], () => api.movies.movies(ids), {
|
|
onSuccess: (data) => {
|
|
cacheMovies(client, data);
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useMovieById(id: number) {
|
|
return useQuery([QueryKeys.Movies, id], async () => {
|
|
const response = await api.movies.movies([id]);
|
|
return response.length > 0 ? response[0] : undefined;
|
|
});
|
|
}
|
|
|
|
export function useMovies() {
|
|
const client = useQueryClient();
|
|
return useQuery(
|
|
[QueryKeys.Movies, QueryKeys.All],
|
|
() => api.movies.movies(),
|
|
{
|
|
onSuccess: (data) => {
|
|
cacheMovies(client, data);
|
|
},
|
|
}
|
|
);
|
|
}
|
|
|
|
export function useMoviesPagination() {
|
|
return usePaginationQuery([QueryKeys.Movies], (param) =>
|
|
api.movies.moviesBy(param)
|
|
);
|
|
}
|
|
|
|
export function useMovieModification() {
|
|
const client = useQueryClient();
|
|
return useMutation(
|
|
[QueryKeys.Movies],
|
|
(form: FormType.ModifyItem) => api.movies.modify(form),
|
|
{
|
|
onSuccess: (_, form) => {
|
|
form.id.forEach((v) => {
|
|
client.invalidateQueries([QueryKeys.Movies, v]);
|
|
});
|
|
// TODO: query less
|
|
client.invalidateQueries([QueryKeys.Movies]);
|
|
},
|
|
}
|
|
);
|
|
}
|
|
|
|
export function useMovieAction() {
|
|
const client = useQueryClient();
|
|
return useMutation(
|
|
[QueryKeys.Actions, QueryKeys.Movies],
|
|
(form: FormType.MoviesAction) => api.movies.action(form),
|
|
{
|
|
onSuccess: () => {
|
|
client.invalidateQueries([QueryKeys.Movies]);
|
|
},
|
|
}
|
|
);
|
|
}
|
|
|
|
export function useMovieWantedPagination() {
|
|
return usePaginationQuery([QueryKeys.Movies, QueryKeys.Wanted], (param) =>
|
|
api.movies.wanted(param)
|
|
);
|
|
}
|
|
|
|
export function useMovieBlacklist() {
|
|
return useQuery([QueryKeys.Movies, QueryKeys.Blacklist], () =>
|
|
api.movies.blacklist()
|
|
);
|
|
}
|
|
|
|
export function useMovieAddBlacklist() {
|
|
const client = useQueryClient();
|
|
return useMutation(
|
|
[QueryKeys.Movies, QueryKeys.Blacklist],
|
|
(param: { id: number; form: FormType.AddBlacklist }) => {
|
|
const { id, form } = param;
|
|
return api.movies.addBlacklist(id, form);
|
|
},
|
|
{
|
|
onSuccess: (_, { id }) => {
|
|
client.invalidateQueries([QueryKeys.Movies, QueryKeys.Blacklist]);
|
|
client.invalidateQueries([QueryKeys.Movies, id]);
|
|
},
|
|
}
|
|
);
|
|
}
|
|
|
|
export function useMovieDeleteBlacklist() {
|
|
const client = useQueryClient();
|
|
return useMutation(
|
|
[QueryKeys.Movies, QueryKeys.Blacklist],
|
|
(param: { all?: boolean; form?: FormType.DeleteBlacklist }) =>
|
|
api.movies.deleteBlacklist(param.all, param.form),
|
|
{
|
|
onSuccess: (_, param) => {
|
|
client.invalidateQueries([QueryKeys.Movies, QueryKeys.Blacklist]);
|
|
},
|
|
}
|
|
);
|
|
}
|
|
|
|
export function useMovieHistoryPagination() {
|
|
return usePaginationQuery([QueryKeys.Movies, QueryKeys.History], (param) =>
|
|
api.movies.history(param)
|
|
);
|
|
}
|
|
|
|
export function useMovieHistory(radarrId?: number) {
|
|
return useQuery([QueryKeys.Movies, QueryKeys.History, radarrId], () => {
|
|
if (radarrId) {
|
|
return api.movies.historyBy(radarrId);
|
|
}
|
|
});
|
|
}
|