// @flow import * as ICONS from 'constants/icons'; import { BITWAVE_LIVE_API } from 'constants/livestream'; import React from 'react'; import Icon from 'component/common/icon'; import Spinner from 'component/spinner'; import ClaimTilesDiscover from 'component/claimTilesDiscover'; const LIVESTREAM_POLL_IN_MS = 10 * 1000; export default function LivestreamList() { const [loading, setLoading] = React.useState(true); const [livestreamMap, setLivestreamMap] = React.useState(); React.useEffect(() => { function checkCurrentLivestreams() { fetch(BITWAVE_LIVE_API) .then((res) => res.json()) .then((res) => { setLoading(false); if (!res.data) { setLivestreamMap({}); return; } const livestreamMap = res.data.reduce((acc, curr) => { return { ...acc, [curr.claimId]: curr, }; }, {}); setLivestreamMap(livestreamMap); }) .catch((err) => { setLoading(false); }); } checkCurrentLivestreams(); let fetchInterval = setInterval(checkCurrentLivestreams, LIVESTREAM_POLL_IN_MS); return () => { if (fetchInterval) { clearInterval(fetchInterval); } }; }, []); return ( <> {loading && (
)} {livestreamMap && Object.keys(livestreamMap).length > 0 && ( { const livestream = livestreamMap[claim.signing_channel.claim_id]; return ( {livestream.viewCount} ); }} /> )} ); }