lbry-desktop/ui/component/embedTextArea/view.jsx
jessop e3c2919373 rename lbrytv to web
language and API consts

improve customization
custom homepages
get config from .env.default
custom title and logo

small changes

add pinned item to sidebar

rebase?
2020-05-25 17:21:02 -04:00

68 lines
1.8 KiB
JavaScript

// @flow
import * as ICONS from 'constants/icons';
import { FormField } from 'component/common/form';
import Button from 'component/button';
import React, { useRef } from 'react';
import { generateEmbedUrl } from 'util/web';
type Props = {
copyable: string,
snackMessage: ?string,
doToast: ({ message: string }) => void,
label?: string,
claim: Claim,
includeStartTime: boolean,
startTime: number,
};
export default function EmbedTextArea(props: Props) {
const { doToast, snackMessage, label, claim, includeStartTime, startTime } = props;
const { claim_id: claimId, name } = claim;
const input = useRef();
const streamUrl = generateEmbedUrl(name, claimId, includeStartTime, startTime);
let embedText = `<iframe width="560" height="315" src="${streamUrl}" allowfullscreen></iframe>`;
function copyToClipboard() {
const topRef = input.current;
if (topRef && topRef.input && topRef.input.current) {
topRef.input.current.select();
document.execCommand('copy');
doToast({ message: snackMessage || 'Embed link copied' });
}
}
function onFocus() {
// We have to go a layer deep since the input is inside the form component
const topRef = input && input.current;
if (topRef && topRef.input && topRef.input.current) {
topRef.input.current.select();
}
}
return (
<div className="section">
<FormField
type="textarea"
className="form-field--copyable"
label={label}
value={embedText || ''}
ref={input}
onFocus={onFocus}
readOnly
/>
<div className="section__actions">
<Button
icon={ICONS.COPY}
button="secondary"
label={__('Copy')}
onClick={() => {
copyToClipboard();
}}
/>
</div>
</div>
);
}