1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

Add global Api hooks

This commit is contained in:
grafixeyehero 2024-09-08 20:12:37 +03:00
parent b37766e273
commit f7fcf44f94
10 changed files with 222 additions and 0 deletions

View file

@ -0,0 +1 @@
export * from './useGetDownload';

View file

@ -0,0 +1,38 @@
import type { AxiosRequestConfig } from 'axios';
import type { LibraryApiGetDownloadRequest } from '@jellyfin/sdk/lib/generated-client';
import { getLibraryApi } from '@jellyfin/sdk/lib/utils/api/library-api';
import { queryOptions, useQuery } from '@tanstack/react-query';
import { type JellyfinApiContext, useApi } from 'hooks/useApi';
const getDownload = async (
apiContext: JellyfinApiContext,
params: LibraryApiGetDownloadRequest,
options?: AxiosRequestConfig
) => {
const { api, user } = apiContext;
if (!api) throw new Error('No API instance available');
if (!user?.Id) throw new Error('No User ID provided');
const response = await getLibraryApi(api).getDownload(
params,
options
);
return response.data;
};
export const getDownloadQuery = (
apiContext: JellyfinApiContext,
params: LibraryApiGetDownloadRequest
) => queryOptions({
queryKey: ['Download', params.itemId],
queryFn: ({ signal }) =>
getDownload(apiContext, params, { signal }),
enabled: !!apiContext.api && !!apiContext.user?.Id && !!params.itemId
});
export const useGetDownload = (
params: LibraryApiGetDownloadRequest
) => {
const apiContext = useApi();
return useQuery(getDownloadQuery(apiContext, params));
};

View file

@ -0,0 +1,5 @@
export * from './useCancelSeriesTimer';
export * from './useCancelTimer';
export * from './useGetChannel';
export * from './useGetSeriesTimer';
export * from './useGetTimer';

View file

@ -0,0 +1,23 @@
import type { LiveTvApiCancelSeriesTimerRequest } from '@jellyfin/sdk/lib/generated-client';
import { getLiveTvApi } from '@jellyfin/sdk/lib/utils/api/live-tv-api';
import { useMutation } from '@tanstack/react-query';
import { type JellyfinApiContext, useApi } from 'hooks/useApi';
const cancelSeriesTimer = async (
apiContext: JellyfinApiContext,
params: LiveTvApiCancelSeriesTimerRequest
) => {
const { api } = apiContext;
if (api) {
const response = await getLiveTvApi(api).cancelSeriesTimer(params);
return response.data;
}
};
export const useCancelSeriesTimer = () => {
const apiContext = useApi();
return useMutation({
mutationFn: (params: LiveTvApiCancelSeriesTimerRequest) =>
cancelSeriesTimer(apiContext, params)
});
};

View file

@ -0,0 +1,23 @@
import type { LiveTvApiCancelTimerRequest } from '@jellyfin/sdk/lib/generated-client';
import { getLiveTvApi } from '@jellyfin/sdk/lib/utils/api/live-tv-api';
import { useMutation } from '@tanstack/react-query';
import { type JellyfinApiContext, useApi } from 'hooks/useApi';
const cancelTimer = async (
apiContext: JellyfinApiContext,
params: LiveTvApiCancelTimerRequest
) => {
const { api } = apiContext;
if (api) {
const response = await getLiveTvApi(api).cancelTimer(params);
return response.data;
}
};
export const useCancelTimer = () => {
const apiContext = useApi();
return useMutation({
mutationFn: (params: LiveTvApiCancelTimerRequest) =>
cancelTimer(apiContext, params)
});
};

View file

@ -0,0 +1,40 @@
import type { AxiosRequestConfig } from 'axios';
import type { LiveTvApiGetChannelRequest } from '@jellyfin/sdk/lib/generated-client';
import { getLiveTvApi } from '@jellyfin/sdk/lib/utils/api/live-tv-api';
import { queryOptions, useQuery } from '@tanstack/react-query';
import { type JellyfinApiContext, useApi } from 'hooks/useApi';
const getChannel = async (
apiContext: JellyfinApiContext,
params: LiveTvApiGetChannelRequest,
options?: AxiosRequestConfig
) => {
const { api, user } = apiContext;
if (!api) throw new Error('No API instance available');
if (!user?.Id) throw new Error('No User ID provided');
const response = await getLiveTvApi(api).getChannel(
{
userId: user.Id,
...params
},
options
);
return response.data;
};
export const getChannelQuery = (
apiContext: JellyfinApiContext,
params: LiveTvApiGetChannelRequest
) => queryOptions({
queryKey: ['Channel', params.channelId],
queryFn: ({ signal }) => getChannel(apiContext, params, { signal }),
enabled: !!apiContext.api && !!apiContext.user?.Id && !!params.channelId
});
export const useGetChannel = (
params: LiveTvApiGetChannelRequest
) => {
const apiContext = useApi();
return useQuery(getChannelQuery(apiContext, params));
};

View file

@ -0,0 +1,34 @@
import type { AxiosRequestConfig } from 'axios';
import type { LiveTvApiGetSeriesTimerRequest } from '@jellyfin/sdk/lib/generated-client';
import { getLiveTvApi } from '@jellyfin/sdk/lib/utils/api/live-tv-api';
import { queryOptions, useQuery } from '@tanstack/react-query';
import { type JellyfinApiContext, useApi } from 'hooks/useApi';
const getSeriesTimer = async (
apiContext: JellyfinApiContext,
params: LiveTvApiGetSeriesTimerRequest,
options?: AxiosRequestConfig
) => {
const { api } = apiContext;
if (!api) throw new Error('No API instance available');
const response = await getLiveTvApi(api).getSeriesTimer(
params,
options
);
return response.data;
};
export const getSeriesTimerQuery = (
apiContext: JellyfinApiContext,
params: LiveTvApiGetSeriesTimerRequest
) => queryOptions({
queryKey: ['SeriesTimer', params.timerId],
queryFn: ({ signal }) => getSeriesTimer(apiContext, params, { signal }),
enabled: !!apiContext.api && !!apiContext.user?.Id && !!params.timerId
});
export const useGetSeriesTimer = (requestParameters: LiveTvApiGetSeriesTimerRequest) => {
const apiContext = useApi();
return useQuery(getSeriesTimerQuery(apiContext, requestParameters));
};

View file

@ -0,0 +1,34 @@
import type { AxiosRequestConfig } from 'axios';
import type { LiveTvApiGetTimerRequest } from '@jellyfin/sdk/lib/generated-client';
import { getLiveTvApi } from '@jellyfin/sdk/lib/utils/api/live-tv-api';
import { queryOptions, useQuery } from '@tanstack/react-query';
import { type JellyfinApiContext, useApi } from 'hooks/useApi';
const getTimer = async (
currentApi: JellyfinApiContext,
params: LiveTvApiGetTimerRequest,
options?: AxiosRequestConfig
) => {
const { api } = currentApi;
if (!api) throw new Error('No API instance available');
const response = await getLiveTvApi(api).getTimer(
params,
options
);
return response.data;
};
export const getTimerQuery = (
apiContext: JellyfinApiContext,
params: LiveTvApiGetTimerRequest
) => queryOptions({
queryKey: ['Timer', params.timerId],
queryFn: ({ signal }) => getTimer(apiContext, params, { signal }),
enabled: !!apiContext.api && !!apiContext.user?.Id && !!params.timerId
});
export const useGetTimer = (requestParameters: LiveTvApiGetTimerRequest) => {
const apiContext = useApi();
return useQuery(getTimerQuery(apiContext, requestParameters));
};

View file

@ -0,0 +1 @@
export * from './useDeleteAlternateSources';

View file

@ -0,0 +1,23 @@
import type { VideosApiDeleteAlternateSourcesRequest } from '@jellyfin/sdk/lib/generated-client';
import { getVideosApi } from '@jellyfin/sdk/lib/utils/api/videos-api';
import { useMutation } from '@tanstack/react-query';
import { type JellyfinApiContext, useApi } from 'hooks/useApi';
const deleteAlternateSources = async (
apiContext: JellyfinApiContext,
params: VideosApiDeleteAlternateSourcesRequest
) => {
const { api } = apiContext;
if (api) {
const response = await getVideosApi(api).deleteAlternateSources(params);
return response.data;
}
};
export const useDeleteAlternateSources = () => {
const apiContext = useApi();
return useMutation({
mutationFn: (params: VideosApiDeleteAlternateSourcesRequest) =>
deleteAlternateSources(apiContext, params)
});
};