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; } 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(`titles/${titleId}/seasons/${seasonNumber}`, { params: {loader}, }) .then(response => response.data); }