// @flow import * as RENDER_MODES from 'constants/file_render_modes'; import React, { useEffect } from 'react'; import classnames from 'classnames'; import Button from 'component/button'; import FileViewerEmbeddedTitle from 'component/fileViewerEmbeddedTitle'; import { useHistory } from 'react-router-dom'; import { useIsMobile } from 'effects/use-screensize'; import { formatLbryUrlForWeb } from 'util/url'; type Props = { uri: string, thumbnail: string, claim: ?Claim, doResolveUri: (string) => void, doFetchCostInfoForUri: (string) => void, costInfo: ?{ cost: number }, floatingPlayerEnabled: boolean, doPlayUri: (string, ?boolean, ?boolean, (GetResponse) => void) => void, doAnaltyicsPurchaseEvent: (GetResponse) => void, parentCommentId?: string, isMarkdownPost: boolean, doSetPlayingUri: ({}) => void, renderMode: string, allowPreview?: boolean, }; export default function EmbedPlayButton(props: Props) { const { uri, thumbnail = '', claim, doResolveUri, doFetchCostInfoForUri, floatingPlayerEnabled, doPlayUri, doSetPlayingUri, doAnaltyicsPurchaseEvent, costInfo, parentCommentId, isMarkdownPost, renderMode, allowPreview, } = props; const { push, location: { pathname }, } = useHistory(); const isMobile = useIsMobile(); const hasResolvedUri = claim !== undefined; const hasCostInfo = costInfo !== undefined; const disabled = !hasResolvedUri || !costInfo; const canPlayInline = [RENDER_MODES.AUDIO, RENDER_MODES.VIDEO].includes(renderMode) && allowPreview; useEffect(() => { if (!hasResolvedUri) { doResolveUri(uri); } if (!hasCostInfo) { doFetchCostInfoForUri(uri); } }, [uri, doResolveUri, doFetchCostInfoForUri, hasCostInfo, hasResolvedUri]); function handleClick() { if (disabled) { return; } if (isMobile || !floatingPlayerEnabled || !canPlayInline) { const formattedUrl = formatLbryUrlForWeb(uri); push(formattedUrl); } else { doPlayUri(uri, undefined, undefined, (fileInfo) => { let playingOptions: PlayingUri = { uri, pathname }; if (parentCommentId) { playingOptions.source = 'comment'; playingOptions.commentId = parentCommentId; } else if (isMarkdownPost) { playingOptions.source = 'markdown'; } doSetPlayingUri(playingOptions); doAnaltyicsPurchaseEvent(fileInfo); }); } } const backgroundImage = allowPreview ? `url('${thumbnail.replace(/'/g, "\\'")}')` : ''; return (