// @flow import * as REACTION_TYPES from 'constants/reactions'; import * as ICONS from 'constants/icons'; import React from 'react'; import classnames from 'classnames'; import Button from 'component/button'; import { formatNumberWithCommas } from 'util/number'; import NudgeFloating from 'component/nudgeFloating'; import Tooltip from 'component/common/tooltip'; const LIVE_REACTION_FETCH_MS = 1000 * 45; type Props = { uri: string, // redux claimId?: string, channelName?: string, isCollection?: boolean, likeCount: number, dislikeCount: number, myReaction: ?string, isLivestreamClaim?: boolean, doFetchReactions: (claimId: ?string) => void, doReactionLike: (uri: string) => void, doReactionDislike: (uri: string) => void, }; export default function FileReactions(props: Props) { const { uri, claimId, channelName, isCollection, myReaction, likeCount, dislikeCount, isLivestreamClaim, doFetchReactions, doReactionLike, doReactionDislike, } = props; const likeIcon = myReaction === REACTION_TYPES.LIKE ? ICONS.FIRE_ACTIVE : ICONS.FIRE; const dislikeIcon = myReaction === REACTION_TYPES.DISLIKE ? ICONS.SLIME_ACTIVE : ICONS.SLIME; const likeLabel = ( <> {myReaction === REACTION_TYPES.LIKE && ( <>
> )} {formatNumberWithCommas(likeCount, 0)} > ); const dislikeLabel = ( <> {myReaction === REACTION_TYPES.DISLIKE && ( <> > )} {formatNumberWithCommas(dislikeCount, 0)} > ); React.useEffect(() => { function fetchReactions() { doFetchReactions(claimId); } let fetchInterval; if (claimId) { fetchReactions(); if (isLivestreamClaim) { fetchInterval = setInterval(fetchReactions, LIVE_REACTION_FETCH_MS); } } return () => { if (fetchInterval) { clearInterval(fetchInterval); } }; }, [claimId, doFetchReactions, isLivestreamClaim]); return ( <> {channelName && !isCollection && (