Files
mtdb_movie/resources/client/seasons/requests/use-season.ts
maher 703f50a09d
Some checks failed
Build / run (push) Has been cancelled
first commit
2025-10-29 11:42:25 +01:00

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);
}