61 lines
1.7 KiB
TypeScript
Executable File
61 lines
1.7 KiB
TypeScript
Executable File
import {useQuery} from '@tanstack/react-query';
|
|
import {apiClient} from '@common/http/query-client';
|
|
import {useParams} from 'react-router-dom';
|
|
import {BackendResponse} from '@common/http/backend-response/backend-response';
|
|
import {Season} from '@app/titles/models/season';
|
|
import {Title} from '@app/titles/models/title';
|
|
import {Episode} from '@app/titles/models/episode';
|
|
import {PaginationResponse} from '@common/http/backend-response/pagination-response';
|
|
import {getBootstrapData} from '@common/core/bootstrap-data/use-backend-bootstrap-data';
|
|
|
|
export interface GetSeasonResponse extends BackendResponse {
|
|
season: Season;
|
|
title: Title;
|
|
episodes?: PaginationResponse<Episode>;
|
|
}
|
|
|
|
interface Params {
|
|
skipUpdating?: boolean;
|
|
truncateDescriptions?: boolean;
|
|
load?: string;
|
|
}
|
|
|
|
export const seasonQueryKey = (
|
|
titleId: number | string,
|
|
season: number | string,
|
|
params?: any,
|
|
) => {
|
|
const key = ['titles', `${titleId}`, 'seasons', `${season}`];
|
|
if (params) {
|
|
key.push(params);
|
|
}
|
|
return key;
|
|
};
|
|
|
|
export function useSeason(loader: 'seasonPage' | 'season' | 'editSeasonPage') {
|
|
const {titleId, season} = useParams();
|
|
return useQuery({
|
|
queryKey: seasonQueryKey(titleId!, season!, loader),
|
|
queryFn: () => fetchSeason(titleId!, season!, loader),
|
|
initialData: () => {
|
|
const data = getBootstrapData().loaders?.[loader];
|
|
if (data?.title?.id == titleId && data?.season?.number == season) {
|
|
return data;
|
|
}
|
|
return undefined;
|
|
},
|
|
});
|
|
}
|
|
|
|
function fetchSeason(
|
|
titleId: number | string,
|
|
seasonNumber: number | string,
|
|
loader: string,
|
|
) {
|
|
return apiClient
|
|
.get<GetSeasonResponse>(`titles/${titleId}/seasons/${seasonNumber}`, {
|
|
params: {loader},
|
|
})
|
|
.then(response => response.data);
|
|
}
|