panjareh
Version:
Panjareh using aparat and phoenix-video-player to play videos on desktops and tvs.
68 lines (56 loc) • 1.77 kB
JavaScript
import React, { Suspense, useEffect, useState } from "react";
import { isSmartTV } from "react-device-detect";
import Spinner from "./components/spinner";
import useUserContext from "./hooks/useUserContext";
import { getPreInitData } from "./services/app-service";
import { getUser } from "./services/user-service";
import { checkLoginStatus } from "./utils/loginStatus";
const Desktop = React.lazy(() => import("./pages/desktop"));
const Tv = React.lazy(() => import("./pages/tv"));
const MessageInfo = React.lazy(() => import("./components/messageInfo"));
export default function App() {
const [canAccessPlayer, setCanAccessPlayer] = useState(true);
const { state, dispatch } = useUserContext();
const { isLoading } = state;
useEffect(() => {
const { userInfo, token, uuid } = getUser();
// check login status only when user has token
if (token) {
const [isValid, loginStatus] = checkLoginStatus(token);
if (loginStatus === 3) {
setCanAccessPlayer(isValid);
}
}
dispatch({
type: "set-user",
payload: { userInfo, token, isLoading: false, uuid },
});
}, []);
// Sentry.init();
const data = getPreInitData();
if (!data.alias) {
return (
<Suspense fallback={<div />}>
<MessageInfo productStatus={"notFound"} />
</Suspense>
);
}
if (isLoading) {
return <Spinner />;
}
if (!canAccessPlayer) {
return (
<Suspense fallback={<div />}>
<MessageInfo
productStatus={"chooseProfile"}
url={`${process.env.NEXT_PUBLIC_SITE_URL}/profile/browse`}
/>
</Suspense>
);
}
return (
<Suspense fallback={<div />}>
{isSmartTV ? <Tv data={data} /> : <Desktop data={data} />}
</Suspense>
);
}