Live video on the AT Protocol
79
fork

Configure Feed

Select the types of activity you want to include in your feed.

at natb/reorg-docs 56 lines 1.6 kB view raw
1import { useRoute } from "@react-navigation/native"; 2import { 3 LivestreamProvider, 4 PlayerProvider, 5 zero, 6} from "@streamplace/components"; 7import BentoGrid from "components/live-dashboard/bento-grid"; 8import Loading from "components/loading/loading"; 9import { VideoElementProvider } from "contexts/VideoElementContext"; 10import { useLiveUser } from "hooks/useLiveUser"; 11import { useCallback, useEffect, useState } from "react"; 12import { useStore } from "store"; 13import { useIsReady, useUserProfile } from "store/hooks"; 14 15const { flex, bg } = zero; 16 17export default function LiveDashboard() { 18 const isReady = useIsReady(); 19 const userProfile = useUserProfile(); 20 const isLive = useLiveUser(); 21 const openLoginModal = useStore((state) => state.openLoginModal); 22 const route = useRoute(); 23 const [videoElement, setVideoElement] = useState<HTMLVideoElement | null>( 24 null, 25 ); 26 27 const videoRef = useCallback((node: HTMLVideoElement | null) => { 28 if (node !== null) { 29 setVideoElement(node); 30 } 31 }, []); 32 33 useEffect(() => { 34 if (isReady && !userProfile) { 35 openLoginModal({ name: route.name, params: route.params }); 36 } 37 }, [isReady, userProfile, openLoginModal, route.name, route.params]); 38 39 if (!isReady) { 40 return <Loading />; 41 } 42 43 if (!userProfile) { 44 return <Loading />; 45 } 46 47 return ( 48 <LivestreamProvider src={userProfile.did}> 49 <VideoElementProvider videoElement={videoElement}> 50 <PlayerProvider> 51 <BentoGrid isLive={isLive} videoRef={videoRef} /> 52 </PlayerProvider> 53 </VideoElementProvider> 54 </LivestreamProvider> 55 ); 56}