|
|
@ -10,6 +10,7 @@ import LoadingSpinner from '@app/components/Common/LoadingSpinner';
|
|
|
|
import PageTitle from '@app/components/Common/PageTitle';
|
|
|
|
import PageTitle from '@app/components/Common/PageTitle';
|
|
|
|
import type { PlayButtonLink } from '@app/components/Common/PlayButton';
|
|
|
|
import type { PlayButtonLink } from '@app/components/Common/PlayButton';
|
|
|
|
import PlayButton from '@app/components/Common/PlayButton';
|
|
|
|
import PlayButton from '@app/components/Common/PlayButton';
|
|
|
|
|
|
|
|
import StatusBadgeMini from '@app/components/Common/StatusBadgeMini';
|
|
|
|
import Tooltip from '@app/components/Common/Tooltip';
|
|
|
|
import Tooltip from '@app/components/Common/Tooltip';
|
|
|
|
import ExternalLinkBlock from '@app/components/ExternalLinkBlock';
|
|
|
|
import ExternalLinkBlock from '@app/components/ExternalLinkBlock';
|
|
|
|
import IssueModal from '@app/components/IssueModal';
|
|
|
|
import IssueModal from '@app/components/IssueModal';
|
|
|
@ -561,35 +562,71 @@ const TvDetails = ({ tv }: TvDetailsProps) => {
|
|
|
|
{((!mSeason &&
|
|
|
|
{((!mSeason &&
|
|
|
|
request?.status === MediaRequestStatus.APPROVED) ||
|
|
|
|
request?.status === MediaRequestStatus.APPROVED) ||
|
|
|
|
mSeason?.status === MediaStatus.PROCESSING) && (
|
|
|
|
mSeason?.status === MediaStatus.PROCESSING) && (
|
|
|
|
|
|
|
|
<>
|
|
|
|
|
|
|
|
<div className="hidden md:flex">
|
|
|
|
<Badge badgeType="primary">
|
|
|
|
<Badge badgeType="primary">
|
|
|
|
{intl.formatMessage(globalMessages.requested)}
|
|
|
|
{intl.formatMessage(globalMessages.requested)}
|
|
|
|
</Badge>
|
|
|
|
</Badge>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className="flex md:hidden">
|
|
|
|
|
|
|
|
<StatusBadgeMini
|
|
|
|
|
|
|
|
status={MediaStatus.PROCESSING}
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</>
|
|
|
|
)}
|
|
|
|
)}
|
|
|
|
{((!mSeason &&
|
|
|
|
{((!mSeason &&
|
|
|
|
request?.status === MediaRequestStatus.PENDING) ||
|
|
|
|
request?.status === MediaRequestStatus.PENDING) ||
|
|
|
|
mSeason?.status === MediaStatus.PENDING) && (
|
|
|
|
mSeason?.status === MediaStatus.PENDING) && (
|
|
|
|
|
|
|
|
<>
|
|
|
|
|
|
|
|
<div className="hidden md:flex">
|
|
|
|
<Badge badgeType="warning">
|
|
|
|
<Badge badgeType="warning">
|
|
|
|
{intl.formatMessage(globalMessages.pending)}
|
|
|
|
{intl.formatMessage(globalMessages.pending)}
|
|
|
|
</Badge>
|
|
|
|
</Badge>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className="flex md:hidden">
|
|
|
|
|
|
|
|
<StatusBadgeMini status={MediaStatus.PENDING} />
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</>
|
|
|
|
)}
|
|
|
|
)}
|
|
|
|
{mSeason?.status ===
|
|
|
|
{mSeason?.status ===
|
|
|
|
MediaStatus.PARTIALLY_AVAILABLE && (
|
|
|
|
MediaStatus.PARTIALLY_AVAILABLE && (
|
|
|
|
|
|
|
|
<>
|
|
|
|
|
|
|
|
<div className="hidden md:flex">
|
|
|
|
<Badge badgeType="success">
|
|
|
|
<Badge badgeType="success">
|
|
|
|
{intl.formatMessage(
|
|
|
|
{intl.formatMessage(
|
|
|
|
globalMessages.partiallyavailable
|
|
|
|
globalMessages.partiallyavailable
|
|
|
|
)}
|
|
|
|
)}
|
|
|
|
</Badge>
|
|
|
|
</Badge>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className="flex md:hidden">
|
|
|
|
|
|
|
|
<StatusBadgeMini
|
|
|
|
|
|
|
|
status={MediaStatus.PARTIALLY_AVAILABLE}
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</>
|
|
|
|
)}
|
|
|
|
)}
|
|
|
|
{mSeason?.status === MediaStatus.AVAILABLE && (
|
|
|
|
{mSeason?.status === MediaStatus.AVAILABLE && (
|
|
|
|
|
|
|
|
<>
|
|
|
|
|
|
|
|
<div className="hidden md:flex">
|
|
|
|
<Badge badgeType="success">
|
|
|
|
<Badge badgeType="success">
|
|
|
|
{intl.formatMessage(globalMessages.available)}
|
|
|
|
{intl.formatMessage(globalMessages.available)}
|
|
|
|
</Badge>
|
|
|
|
</Badge>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className="flex md:hidden">
|
|
|
|
|
|
|
|
<StatusBadgeMini
|
|
|
|
|
|
|
|
status={MediaStatus.AVAILABLE}
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</>
|
|
|
|
)}
|
|
|
|
)}
|
|
|
|
{((!mSeason4k &&
|
|
|
|
{((!mSeason4k &&
|
|
|
|
request4k?.status ===
|
|
|
|
request4k?.status ===
|
|
|
|
MediaRequestStatus.APPROVED) ||
|
|
|
|
MediaRequestStatus.APPROVED) ||
|
|
|
|
mSeason4k?.status4k === MediaStatus.PROCESSING) &&
|
|
|
|
mSeason4k?.status4k === MediaStatus.PROCESSING) &&
|
|
|
|
show4k && (
|
|
|
|
show4k && (
|
|
|
|
|
|
|
|
<>
|
|
|
|
|
|
|
|
<div className="hidden md:flex">
|
|
|
|
<Badge badgeType="primary">
|
|
|
|
<Badge badgeType="primary">
|
|
|
|
{intl.formatMessage(messages.status4k, {
|
|
|
|
{intl.formatMessage(messages.status4k, {
|
|
|
|
status: intl.formatMessage(
|
|
|
|
status: intl.formatMessage(
|
|
|
@ -597,11 +634,21 @@ const TvDetails = ({ tv }: TvDetailsProps) => {
|
|
|
|
),
|
|
|
|
),
|
|
|
|
})}
|
|
|
|
})}
|
|
|
|
</Badge>
|
|
|
|
</Badge>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className="flex md:hidden">
|
|
|
|
|
|
|
|
<StatusBadgeMini
|
|
|
|
|
|
|
|
status={MediaStatus.PROCESSING}
|
|
|
|
|
|
|
|
is4k={true}
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</>
|
|
|
|
)}
|
|
|
|
)}
|
|
|
|
{((!mSeason4k &&
|
|
|
|
{((!mSeason4k &&
|
|
|
|
request4k?.status === MediaRequestStatus.PENDING) ||
|
|
|
|
request4k?.status === MediaRequestStatus.PENDING) ||
|
|
|
|
mSeason?.status4k === MediaStatus.PENDING) &&
|
|
|
|
mSeason?.status4k === MediaStatus.PENDING) &&
|
|
|
|
show4k && (
|
|
|
|
show4k && (
|
|
|
|
|
|
|
|
<>
|
|
|
|
|
|
|
|
<div className="hidden md:flex">
|
|
|
|
<Badge badgeType="warning">
|
|
|
|
<Badge badgeType="warning">
|
|
|
|
{intl.formatMessage(messages.status4k, {
|
|
|
|
{intl.formatMessage(messages.status4k, {
|
|
|
|
status: intl.formatMessage(
|
|
|
|
status: intl.formatMessage(
|
|
|
@ -609,10 +656,20 @@ const TvDetails = ({ tv }: TvDetailsProps) => {
|
|
|
|
),
|
|
|
|
),
|
|
|
|
})}
|
|
|
|
})}
|
|
|
|
</Badge>
|
|
|
|
</Badge>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className="flex md:hidden">
|
|
|
|
|
|
|
|
<StatusBadgeMini
|
|
|
|
|
|
|
|
status={MediaStatus.PENDING}
|
|
|
|
|
|
|
|
is4k={true}
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</>
|
|
|
|
)}
|
|
|
|
)}
|
|
|
|
{mSeason4k?.status4k ===
|
|
|
|
{mSeason4k?.status4k ===
|
|
|
|
MediaStatus.PARTIALLY_AVAILABLE &&
|
|
|
|
MediaStatus.PARTIALLY_AVAILABLE &&
|
|
|
|
show4k && (
|
|
|
|
show4k && (
|
|
|
|
|
|
|
|
<>
|
|
|
|
|
|
|
|
<div className="hidden md:flex">
|
|
|
|
<Badge badgeType="success">
|
|
|
|
<Badge badgeType="success">
|
|
|
|
{intl.formatMessage(messages.status4k, {
|
|
|
|
{intl.formatMessage(messages.status4k, {
|
|
|
|
status: intl.formatMessage(
|
|
|
|
status: intl.formatMessage(
|
|
|
@ -620,9 +677,19 @@ const TvDetails = ({ tv }: TvDetailsProps) => {
|
|
|
|
),
|
|
|
|
),
|
|
|
|
})}
|
|
|
|
})}
|
|
|
|
</Badge>
|
|
|
|
</Badge>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className="flex md:hidden">
|
|
|
|
|
|
|
|
<StatusBadgeMini
|
|
|
|
|
|
|
|
status={MediaStatus.PARTIALLY_AVAILABLE}
|
|
|
|
|
|
|
|
is4k={true}
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</>
|
|
|
|
)}
|
|
|
|
)}
|
|
|
|
{mSeason4k?.status4k === MediaStatus.AVAILABLE &&
|
|
|
|
{mSeason4k?.status4k === MediaStatus.AVAILABLE &&
|
|
|
|
show4k && (
|
|
|
|
show4k && (
|
|
|
|
|
|
|
|
<>
|
|
|
|
|
|
|
|
<div className="hidden md:flex">
|
|
|
|
<Badge badgeType="success">
|
|
|
|
<Badge badgeType="success">
|
|
|
|
{intl.formatMessage(messages.status4k, {
|
|
|
|
{intl.formatMessage(messages.status4k, {
|
|
|
|
status: intl.formatMessage(
|
|
|
|
status: intl.formatMessage(
|
|
|
@ -630,6 +697,14 @@ const TvDetails = ({ tv }: TvDetailsProps) => {
|
|
|
|
),
|
|
|
|
),
|
|
|
|
})}
|
|
|
|
})}
|
|
|
|
</Badge>
|
|
|
|
</Badge>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className="flex md:hidden">
|
|
|
|
|
|
|
|
<StatusBadgeMini
|
|
|
|
|
|
|
|
status={MediaStatus.AVAILABLE}
|
|
|
|
|
|
|
|
is4k={true}
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</>
|
|
|
|
)}
|
|
|
|
)}
|
|
|
|
<ChevronUpIcon
|
|
|
|
<ChevronUpIcon
|
|
|
|
className={`${
|
|
|
|
className={`${
|
|
|
|