import { faAdjust, faBriefcase, faCloudUploadAlt, faHdd, faSearch, faSync, faWrench, } from "@fortawesome/free-solid-svg-icons"; import React, { FunctionComponent, useMemo, useState } from "react"; import { Alert, Container, Row } from "react-bootstrap"; import { Helmet } from "react-helmet"; import { Redirect, RouteComponentProps, withRouter } from "react-router-dom"; import { dispatchTask } from "../../@modules/task"; import { useIsAnyTaskRunningWithId } from "../../@modules/task/hooks"; import { createTask } from "../../@modules/task/utilities"; import { useEpisodesBy, useProfileBy, useSerieBy } from "../../@redux/hooks"; import { SeriesApi } from "../../apis"; import { ContentHeader, ItemEditorModal, LoadingIndicator, SeriesUploadModal, useShowModal, } from "../../components"; import { RouterEmptyPath } from "../../special-pages/404"; import { useOnLoadedOnce } from "../../utilities"; import ItemOverview from "../generic/ItemOverview"; import Table from "./table"; interface Params { id: string; } interface Props extends RouteComponentProps {} const SeriesEpisodesView: FunctionComponent = (props) => { const { match } = props; const id = Number.parseInt(match.params.id); const series = useSerieBy(id); const episodes = useEpisodesBy(id); const serie = series.content; const available = episodes.content.length !== 0; const details = useMemo( () => [ { icon: faHdd, text: `${serie?.episodeFileCount} files`, }, { icon: faAdjust, text: serie?.seriesType ?? "", }, ], [serie] ); const showModal = useShowModal(); const [valid, setValid] = useState(true); useOnLoadedOnce(() => { if (series.content === null) { setValid(false); } }, series); const profile = useProfileBy(series.content?.profileId); const hasTask = useIsAnyTaskRunningWithId([ ...episodes.content.map((v) => v.sonarrEpisodeId), id, ]); if (isNaN(id) || !valid) { return ; } if (!serie) { return ; } return ( {serie.title} - Bazarr (Series) { const task = createTask( serie.title, id, SeriesApi.action.bind(SeriesApi), { action: "scan-disk", seriesid: id, } ); dispatchTask("Scanning disk...", [task], "Scanning..."); }} > Scan Disk { const task = createTask( serie.title, id, SeriesApi.action.bind(SeriesApi), { action: "search-missing", seriesid: id, } ); dispatchTask("Searching subtitles...", [task], "Searching..."); }} disabled={ serie.episodeFileCount === 0 || serie.profileId === null || !available } > Search showModal("tools", episodes.content)} > Tools showModal("upload", serie)} > Upload showModal("edit", serie)} > Edit Series A background task is running for this show, actions are unavailable
SeriesApi.modify(form)} >
); }; export default withRouter(SeriesEpisodesView);