lbry-desktop/ui/component/embedPlayButton/view.jsx
2020-04-30 10:13:01 -04:00

60 lines
1.6 KiB
JavaScript

// @flow
import React, { useEffect } from 'react';
import Button from 'component/button';
import FileViewerEmbeddedTitle from 'component/fileViewerEmbeddedTitle';
import { useHistory } from 'react-router-dom';
import useIsMobile from 'effects/use-is-mobile';
import { formatLbryUrlForWeb } from 'util/url';
type Props = {
uri: string,
thumbnail: string,
claim: ?Claim,
doResolveUri: string => void,
doFetchCostInfoForUri: string => void,
doSetFloatingUri: string => void,
floatingPlayerEnabled: boolean,
};
export default function FileRenderFloating(props: Props) {
const {
uri,
thumbnail = '',
claim,
doResolveUri,
doFetchCostInfoForUri,
doSetFloatingUri,
floatingPlayerEnabled,
} = props;
const { push } = useHistory();
const isMobile = useIsMobile();
const hasResolvedUri = claim !== undefined;
useEffect(() => {
if (!hasResolvedUri) {
doResolveUri(uri);
doFetchCostInfoForUri(uri);
}
}, [uri, hasResolvedUri, doResolveUri, doFetchCostInfoForUri]);
function handleClick() {
if (isMobile || !floatingPlayerEnabled) {
const formattedUrl = formatLbryUrlForWeb(uri);
push(formattedUrl);
} else {
doSetFloatingUri(uri);
}
}
return (
<div
role="button"
className="embed__inline-button"
onClick={handleClick}
style={{ backgroundImage: `url('${thumbnail.replace(/'/g, "\\'")}')` }}
>
<FileViewerEmbeddedTitle uri={uri} isInApp />
<Button onClick={handleClick} iconSize={30} title={__('Play')} className={'button--icon button--play'} />
</div>
);
}