|
|
|
@ -1,220 +1,215 @@ |
|
|
|
import { ReactElement, useCallback, useEffect, useState } from "react"; |
|
|
|
// import { ReactElement, useCallback, useEffect, useState } from "react";
|
|
|
|
import { useHistory } from "react-router-dom"; |
|
|
|
// import { useHistory } from "react-router-dom";
|
|
|
|
|
|
|
|
// import { useTranslation } from "react-i18next";
|
|
|
|
|
|
|
|
// import { IconPatch } from "@/components/buttons/IconPatch";
|
|
|
|
|
|
|
|
// import { Icons } from "@/components/Icon";
|
|
|
|
|
|
|
|
// import { Navigation } from "@/components/layout/Navigation";
|
|
|
|
|
|
|
|
// import { Paper } from "@/components/layout/Paper";
|
|
|
|
|
|
|
|
// import { LoadingSeasons, Seasons } from "@/components/layout/Seasons";
|
|
|
|
|
|
|
|
// import { DecoratedVideoPlayer } from "@/components/video/DecoratedVideoPlayer";
|
|
|
|
|
|
|
|
// import { ArrowLink } from "@/components/text/ArrowLink";
|
|
|
|
|
|
|
|
// import { DotList } from "@/components/text/DotList";
|
|
|
|
|
|
|
|
// import { Title } from "@/components/text/Title";
|
|
|
|
|
|
|
|
// import { useLoading } from "@/hooks/useLoading";
|
|
|
|
|
|
|
|
// import { usePortableMedia } from "@/hooks/usePortableMedia";
|
|
|
|
|
|
|
|
// import {
|
|
|
|
|
|
|
|
// getIfBookmarkedFromPortable,
|
|
|
|
|
|
|
|
// useBookmarkContext,
|
|
|
|
|
|
|
|
// } from "@/state/bookmark";
|
|
|
|
|
|
|
|
// import { getWatchedFromPortable, useWatchedContext } from "@/state/watched";
|
|
|
|
|
|
|
|
// import { SourceControl } from "@/components/video/controls/SourceControl";
|
|
|
|
|
|
|
|
// import { ProgressListenerControl } from "@/components/video/controls/ProgressListenerControl";
|
|
|
|
|
|
|
|
// import { Loading } from "@/components/layout/Loading";
|
|
|
|
|
|
|
|
// import { NotFoundChecks } from "./notfound/NotFoundChecks";
|
|
|
|
|
|
|
|
|
|
|
|
import { useTranslation } from "react-i18next"; |
|
|
|
import { useTranslation } from "react-i18next"; |
|
|
|
import { IconPatch } from "@/components/buttons/IconPatch"; |
|
|
|
import { useHistory } from "react-router-dom"; |
|
|
|
import { Icons } from "@/components/Icon"; |
|
|
|
|
|
|
|
import { Navigation } from "@/components/layout/Navigation"; |
|
|
|
import { Navigation } from "@/components/layout/Navigation"; |
|
|
|
import { Paper } from "@/components/layout/Paper"; |
|
|
|
|
|
|
|
import { LoadingSeasons, Seasons } from "@/components/layout/Seasons"; |
|
|
|
|
|
|
|
import { DecoratedVideoPlayer } from "@/components/video/DecoratedVideoPlayer"; |
|
|
|
|
|
|
|
import { ArrowLink } from "@/components/text/ArrowLink"; |
|
|
|
import { ArrowLink } from "@/components/text/ArrowLink"; |
|
|
|
import { DotList } from "@/components/text/DotList"; |
|
|
|
|
|
|
|
import { Title } from "@/components/text/Title"; |
|
|
|
|
|
|
|
import { useLoading } from "@/hooks/useLoading"; |
|
|
|
|
|
|
|
import { usePortableMedia } from "@/hooks/usePortableMedia"; |
|
|
|
|
|
|
|
import { |
|
|
|
|
|
|
|
MWPortableMedia, |
|
|
|
|
|
|
|
getStream, |
|
|
|
|
|
|
|
MWMediaStream, |
|
|
|
|
|
|
|
MWMedia, |
|
|
|
|
|
|
|
convertPortableToMedia, |
|
|
|
|
|
|
|
getProviderFromId, |
|
|
|
|
|
|
|
MWMediaProvider, |
|
|
|
|
|
|
|
MWMediaType, |
|
|
|
|
|
|
|
} from "@/providers"; |
|
|
|
|
|
|
|
import { |
|
|
|
|
|
|
|
getIfBookmarkedFromPortable, |
|
|
|
|
|
|
|
useBookmarkContext, |
|
|
|
|
|
|
|
} from "@/state/bookmark"; |
|
|
|
|
|
|
|
import { getWatchedFromPortable, useWatchedContext } from "@/state/watched"; |
|
|
|
|
|
|
|
import { SourceControl } from "@/components/video/controls/SourceControl"; |
|
|
|
|
|
|
|
import { ProgressListenerControl } from "@/components/video/controls/ProgressListenerControl"; |
|
|
|
|
|
|
|
import { Loading } from "@/components/layout/Loading"; |
|
|
|
|
|
|
|
import { NotFoundChecks } from "./notfound/NotFoundChecks"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface StyledMediaViewProps { |
|
|
|
|
|
|
|
media: MWMedia; |
|
|
|
|
|
|
|
stream: MWMediaStream; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function SkeletonVideoPlayer(props: { error?: boolean }) { |
|
|
|
|
|
|
|
return ( |
|
|
|
|
|
|
|
<div className="flex aspect-video w-full items-center justify-center bg-denim-200 lg:rounded-xl"> |
|
|
|
|
|
|
|
{props.error ? ( |
|
|
|
|
|
|
|
<div className="flex flex-col items-center"> |
|
|
|
|
|
|
|
<IconPatch icon={Icons.WARNING} className="text-red-400" /> |
|
|
|
|
|
|
|
<p className="mt-5 text-white">Couldn't get your stream</p> |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
) : ( |
|
|
|
|
|
|
|
<div className="flex flex-col items-center"> |
|
|
|
|
|
|
|
<Loading /> |
|
|
|
|
|
|
|
<p className="mt-3 text-white">Getting your stream...</p> |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
)} |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function StyledMediaView(props: StyledMediaViewProps) { |
|
|
|
|
|
|
|
const reactHistory = useHistory(); |
|
|
|
|
|
|
|
const watchedStore = useWatchedContext(); |
|
|
|
|
|
|
|
const startAtTime: number | undefined = getWatchedFromPortable( |
|
|
|
|
|
|
|
watchedStore.watched.items, |
|
|
|
|
|
|
|
props.media |
|
|
|
|
|
|
|
)?.progress; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const updateProgress = useCallback( |
|
|
|
|
|
|
|
(time: number, duration: number) => { |
|
|
|
|
|
|
|
// Don't update stored progress if less than 30s into the video
|
|
|
|
|
|
|
|
if (time <= 30) return; |
|
|
|
|
|
|
|
watchedStore.updateProgress(props.media, time, duration); |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
[props, watchedStore] |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const goBack = useCallback(() => { |
|
|
|
|
|
|
|
if (reactHistory.action !== "POP") reactHistory.goBack(); |
|
|
|
|
|
|
|
else reactHistory.push("/"); |
|
|
|
|
|
|
|
}, [reactHistory]); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return ( |
|
|
|
|
|
|
|
<div className="overflow-hidden lg:rounded-xl"> |
|
|
|
|
|
|
|
<DecoratedVideoPlayer title={props.media.title} onGoBack={goBack}> |
|
|
|
|
|
|
|
<SourceControl source={props.stream.url} type={props.stream.type} /> |
|
|
|
|
|
|
|
<ProgressListenerControl |
|
|
|
|
|
|
|
startAt={startAtTime} |
|
|
|
|
|
|
|
onProgress={updateProgress} |
|
|
|
|
|
|
|
/> |
|
|
|
|
|
|
|
</DecoratedVideoPlayer> |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface StyledMediaFooterProps { |
|
|
|
|
|
|
|
media: MWMedia; |
|
|
|
|
|
|
|
provider: MWMediaProvider; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function StyledMediaFooter(props: StyledMediaFooterProps) { |
|
|
|
// interface StyledMediaViewProps {
|
|
|
|
const { setItemBookmark, getFilteredBookmarks } = useBookmarkContext(); |
|
|
|
// media: MWMedia;
|
|
|
|
const isBookmarked = getIfBookmarkedFromPortable( |
|
|
|
// stream: MWMediaStream;
|
|
|
|
getFilteredBookmarks(), |
|
|
|
// }
|
|
|
|
props.media |
|
|
|
|
|
|
|
); |
|
|
|
// export function SkeletonVideoPlayer(props: { error?: boolean }) {
|
|
|
|
|
|
|
|
// return (
|
|
|
|
return ( |
|
|
|
// <div className="flex aspect-video w-full items-center justify-center bg-denim-200 lg:rounded-xl">
|
|
|
|
<Paper className="mt-5"> |
|
|
|
// {props.error ? (
|
|
|
|
<div className="flex"> |
|
|
|
// <div className="flex flex-col items-center">
|
|
|
|
<div className="flex-1"> |
|
|
|
// <IconPatch icon={Icons.WARNING} className="text-red-400" />
|
|
|
|
<Title>{props.media.title}</Title> |
|
|
|
// <p className="mt-5 text-white">Couldn't get your stream</p>
|
|
|
|
<DotList |
|
|
|
// </div>
|
|
|
|
className="mt-3 text-sm" |
|
|
|
// ) : (
|
|
|
|
content={[ |
|
|
|
// <div className="flex flex-col items-center">
|
|
|
|
props.provider.displayName, |
|
|
|
// <Loading />
|
|
|
|
props.media.mediaType, |
|
|
|
// <p className="mt-3 text-white">Getting your stream...</p>
|
|
|
|
props.media.year, |
|
|
|
// </div>
|
|
|
|
]} |
|
|
|
// )}
|
|
|
|
/> |
|
|
|
// </div>
|
|
|
|
</div> |
|
|
|
// );
|
|
|
|
<div> |
|
|
|
// }
|
|
|
|
<IconPatch |
|
|
|
|
|
|
|
icon={Icons.BOOKMARK} |
|
|
|
// function StyledMediaView(props: StyledMediaViewProps) {
|
|
|
|
active={isBookmarked} |
|
|
|
// const reactHistory = useHistory();
|
|
|
|
onClick={() => setItemBookmark(props.media, !isBookmarked)} |
|
|
|
// const watchedStore = useWatchedContext();
|
|
|
|
clickable |
|
|
|
// const startAtTime: number | undefined = getWatchedFromPortable(
|
|
|
|
/> |
|
|
|
// watchedStore.watched.items,
|
|
|
|
</div> |
|
|
|
// props.media
|
|
|
|
</div> |
|
|
|
// )?.progress;
|
|
|
|
{props.media.mediaType !== MWMediaType.MOVIE ? ( |
|
|
|
|
|
|
|
<Seasons media={props.media} /> |
|
|
|
// const updateProgress = useCallback(
|
|
|
|
) : null} |
|
|
|
// (time: number, duration: number) => {
|
|
|
|
</Paper> |
|
|
|
// // Don't update stored progress if less than 30s into the video
|
|
|
|
); |
|
|
|
// if (time <= 30) return;
|
|
|
|
} |
|
|
|
// watchedStore.updateProgress(props.media, time, duration);
|
|
|
|
|
|
|
|
// },
|
|
|
|
function LoadingMediaFooter(props: { error?: boolean }) { |
|
|
|
// [props, watchedStore]
|
|
|
|
const { t } = useTranslation(); |
|
|
|
// );
|
|
|
|
|
|
|
|
|
|
|
|
return ( |
|
|
|
// const goBack = useCallback(() => {
|
|
|
|
<Paper className="mt-5"> |
|
|
|
// if (reactHistory.action !== "POP") reactHistory.goBack();
|
|
|
|
<div className="flex"> |
|
|
|
// else reactHistory.push("/");
|
|
|
|
<div className="flex-1"> |
|
|
|
// }, [reactHistory]);
|
|
|
|
<div className="mb-2 h-4 w-48 rounded-full bg-denim-500" /> |
|
|
|
|
|
|
|
<div> |
|
|
|
// return (
|
|
|
|
<span className="mr-4 inline-block h-2 w-12 rounded-full bg-denim-400" /> |
|
|
|
// <div className="overflow-hidden lg:rounded-xl">
|
|
|
|
<span className="mr-4 inline-block h-2 w-12 rounded-full bg-denim-400" /> |
|
|
|
// <DecoratedVideoPlayer title={props.media.title} onGoBack={goBack}>
|
|
|
|
</div> |
|
|
|
// <SourceControl source={props.stream.url} type={props.stream.type} />
|
|
|
|
{props.error ? ( |
|
|
|
// <ProgressListenerControl
|
|
|
|
<div className="flex items-center space-x-3"> |
|
|
|
// startAt={startAtTime}
|
|
|
|
<IconPatch icon={Icons.WARNING} className="text-red-400" /> |
|
|
|
// onProgress={updateProgress}
|
|
|
|
<p>{t("media.invalidUrl")}</p> |
|
|
|
// />
|
|
|
|
</div> |
|
|
|
// </DecoratedVideoPlayer>
|
|
|
|
) : ( |
|
|
|
// </div>
|
|
|
|
<LoadingSeasons /> |
|
|
|
// );
|
|
|
|
)} |
|
|
|
// }
|
|
|
|
</div> |
|
|
|
|
|
|
|
</div> |
|
|
|
// interface StyledMediaFooterProps {
|
|
|
|
</Paper> |
|
|
|
// media: MWMedia;
|
|
|
|
); |
|
|
|
// provider: MWMediaProvider;
|
|
|
|
} |
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
function MediaViewContent(props: { portable: MWPortableMedia }) { |
|
|
|
// function StyledMediaFooter(props: StyledMediaFooterProps) {
|
|
|
|
const mediaPortable = props.portable; |
|
|
|
// const { setItemBookmark, getFilteredBookmarks } = useBookmarkContext();
|
|
|
|
const [streamUrl, setStreamUrl] = useState<MWMediaStream | undefined>(); |
|
|
|
// const isBookmarked = getIfBookmarkedFromPortable(
|
|
|
|
const [media, setMedia] = useState<MWMedia | undefined>(); |
|
|
|
// getFilteredBookmarks(),
|
|
|
|
const [fetchMedia, loadingPortable, errorPortable] = useLoading( |
|
|
|
// props.media
|
|
|
|
(portable: MWPortableMedia) => convertPortableToMedia(portable) |
|
|
|
// );
|
|
|
|
); |
|
|
|
|
|
|
|
const [fetchStream, loadingStream, errorStream] = useLoading( |
|
|
|
// return (
|
|
|
|
(portable: MWPortableMedia) => getStream(portable) |
|
|
|
// <Paper className="mt-5">
|
|
|
|
); |
|
|
|
// <div className="flex">
|
|
|
|
|
|
|
|
// <div className="flex-1">
|
|
|
|
useEffect(() => { |
|
|
|
// <Title>{props.media.title}</Title>
|
|
|
|
(async () => { |
|
|
|
// <DotList
|
|
|
|
if (mediaPortable) { |
|
|
|
// className="mt-3 text-sm"
|
|
|
|
setMedia(await fetchMedia(mediaPortable)); |
|
|
|
// content={[
|
|
|
|
} |
|
|
|
// props.provider.displayName,
|
|
|
|
})(); |
|
|
|
// props.media.mediaType,
|
|
|
|
}, [mediaPortable, setMedia, fetchMedia]); |
|
|
|
// props.media.year,
|
|
|
|
|
|
|
|
// ]}
|
|
|
|
useEffect(() => { |
|
|
|
// />
|
|
|
|
(async () => { |
|
|
|
// </div>
|
|
|
|
if (mediaPortable) { |
|
|
|
// <div>
|
|
|
|
setStreamUrl(await fetchStream(mediaPortable)); |
|
|
|
// <IconPatch
|
|
|
|
} |
|
|
|
// icon={Icons.BOOKMARK}
|
|
|
|
})(); |
|
|
|
// active={isBookmarked}
|
|
|
|
}, [mediaPortable, setStreamUrl, fetchStream]); |
|
|
|
// onClick={() => setItemBookmark(props.media, !isBookmarked)}
|
|
|
|
|
|
|
|
// clickable
|
|
|
|
let playerContent: ReactElement | null = null; |
|
|
|
// />
|
|
|
|
if (loadingStream) playerContent = <SkeletonVideoPlayer />; |
|
|
|
// </div>
|
|
|
|
else if (errorStream) playerContent = <SkeletonVideoPlayer error />; |
|
|
|
// </div>
|
|
|
|
else if (media && streamUrl) |
|
|
|
// {props.media.mediaType !== MWMediaType.MOVIE ? (
|
|
|
|
playerContent = <StyledMediaView media={media} stream={streamUrl} />; |
|
|
|
// <Seasons media={props.media} />
|
|
|
|
|
|
|
|
// ) : null}
|
|
|
|
let footerContent: ReactElement | null = null; |
|
|
|
// </Paper>
|
|
|
|
if (loadingPortable) footerContent = <LoadingMediaFooter />; |
|
|
|
// );
|
|
|
|
else if (errorPortable) footerContent = <LoadingMediaFooter error />; |
|
|
|
// }
|
|
|
|
else if (mediaPortable && media) |
|
|
|
|
|
|
|
footerContent = ( |
|
|
|
// function LoadingMediaFooter(props: { error?: boolean }) {
|
|
|
|
<StyledMediaFooter |
|
|
|
// const { t } = useTranslation();
|
|
|
|
provider={ |
|
|
|
|
|
|
|
getProviderFromId(mediaPortable.providerId) as MWMediaProvider |
|
|
|
// return (
|
|
|
|
} |
|
|
|
// <Paper className="mt-5">
|
|
|
|
media={media} |
|
|
|
// <div className="flex">
|
|
|
|
/> |
|
|
|
// <div className="flex-1">
|
|
|
|
); |
|
|
|
// <div className="mb-2 h-4 w-48 rounded-full bg-denim-500" />
|
|
|
|
|
|
|
|
// <div>
|
|
|
|
return ( |
|
|
|
// <span className="mr-4 inline-block h-2 w-12 rounded-full bg-denim-400" />
|
|
|
|
<> |
|
|
|
// <span className="mr-4 inline-block h-2 w-12 rounded-full bg-denim-400" />
|
|
|
|
{playerContent} |
|
|
|
// </div>
|
|
|
|
{footerContent} |
|
|
|
// {props.error ? (
|
|
|
|
</> |
|
|
|
// <div className="flex items-center space-x-3">
|
|
|
|
); |
|
|
|
// <IconPatch icon={Icons.WARNING} className="text-red-400" />
|
|
|
|
} |
|
|
|
// <p>{t("media.invalidUrl")}</p>
|
|
|
|
|
|
|
|
// </div>
|
|
|
|
|
|
|
|
// ) : (
|
|
|
|
|
|
|
|
// <LoadingSeasons />
|
|
|
|
|
|
|
|
// )}
|
|
|
|
|
|
|
|
// </div>
|
|
|
|
|
|
|
|
// </div>
|
|
|
|
|
|
|
|
// </Paper>
|
|
|
|
|
|
|
|
// );
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// function MediaViewContent(props: { portable: MWPortableMedia }) {
|
|
|
|
|
|
|
|
// const mediaPortable = props.portable;
|
|
|
|
|
|
|
|
// const [streamUrl, setStreamUrl] = useState<MWMediaStream | undefined>();
|
|
|
|
|
|
|
|
// const [media, setMedia] = useState<MWMedia | undefined>();
|
|
|
|
|
|
|
|
// const [fetchMedia, loadingPortable, errorPortable] = useLoading(
|
|
|
|
|
|
|
|
// (portable: MWPortableMedia) => convertPortableToMedia(portable)
|
|
|
|
|
|
|
|
// );
|
|
|
|
|
|
|
|
// const [fetchStream, loadingStream, errorStream] = useLoading(
|
|
|
|
|
|
|
|
// (portable: MWPortableMedia) => getStream(portable)
|
|
|
|
|
|
|
|
// );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// useEffect(() => {
|
|
|
|
|
|
|
|
// (async () => {
|
|
|
|
|
|
|
|
// if (mediaPortable) {
|
|
|
|
|
|
|
|
// setMedia(await fetchMedia(mediaPortable));
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// })();
|
|
|
|
|
|
|
|
// }, [mediaPortable, setMedia, fetchMedia]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// useEffect(() => {
|
|
|
|
|
|
|
|
// (async () => {
|
|
|
|
|
|
|
|
// if (mediaPortable) {
|
|
|
|
|
|
|
|
// setStreamUrl(await fetchStream(mediaPortable));
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// })();
|
|
|
|
|
|
|
|
// }, [mediaPortable, setStreamUrl, fetchStream]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// let playerContent: ReactElement | null = null;
|
|
|
|
|
|
|
|
// if (loadingStream) playerContent = <SkeletonVideoPlayer />;
|
|
|
|
|
|
|
|
// else if (errorStream) playerContent = <SkeletonVideoPlayer error />;
|
|
|
|
|
|
|
|
// else if (media && streamUrl)
|
|
|
|
|
|
|
|
// playerContent = <StyledMediaView media={media} stream={streamUrl} />;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// let footerContent: ReactElement | null = null;
|
|
|
|
|
|
|
|
// if (loadingPortable) footerContent = <LoadingMediaFooter />;
|
|
|
|
|
|
|
|
// else if (errorPortable) footerContent = <LoadingMediaFooter error />;
|
|
|
|
|
|
|
|
// else if (mediaPortable && media)
|
|
|
|
|
|
|
|
// footerContent = (
|
|
|
|
|
|
|
|
// <StyledMediaFooter
|
|
|
|
|
|
|
|
// provider={
|
|
|
|
|
|
|
|
// getProviderFromId(mediaPortable.providerId) as MWMediaProvider
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// media={media}
|
|
|
|
|
|
|
|
// />
|
|
|
|
|
|
|
|
// );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// return (
|
|
|
|
|
|
|
|
// <>
|
|
|
|
|
|
|
|
// {playerContent}
|
|
|
|
|
|
|
|
// {footerContent}
|
|
|
|
|
|
|
|
// </>
|
|
|
|
|
|
|
|
// );
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
export function MediaView() { |
|
|
|
export function MediaView() { |
|
|
|
const { t } = useTranslation(); |
|
|
|
const { t } = useTranslation(); |
|
|
|
const mediaPortable: MWPortableMedia | undefined = usePortableMedia(); |
|
|
|
// const mediaPortable: MWPortableMedia | undefined = usePortableMedia();
|
|
|
|
const reactHistory = useHistory(); |
|
|
|
const reactHistory = useHistory(); |
|
|
|
|
|
|
|
|
|
|
|
return ( |
|
|
|
return ( |
|
|
|
@ -230,11 +225,11 @@ export function MediaView() { |
|
|
|
linkText={t("media.arrowText")} |
|
|
|
linkText={t("media.arrowText")} |
|
|
|
/> |
|
|
|
/> |
|
|
|
</Navigation> |
|
|
|
</Navigation> |
|
|
|
<NotFoundChecks portable={mediaPortable}> |
|
|
|
{/* <NotFoundChecks portable={mediaPortable}> |
|
|
|
<div className="container mx-auto mt-40 mb-16 max-w-[1100px]"> |
|
|
|
<div className="container mx-auto mt-40 mb-16 max-w-[1100px]"> |
|
|
|
<MediaViewContent portable={mediaPortable as MWPortableMedia} /> |
|
|
|
<MediaViewContent portable={mediaPortable as MWPortableMedia} /> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</NotFoundChecks> |
|
|
|
</NotFoundChecks> */} |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
); |
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
|