// @flow import * as ICONS from 'constants/icons'; import * as MODALS from 'constants/modal_types'; import React, { useState } from 'react'; import Button from 'component/button'; import { webDownloadClaim } from 'util/downloadClaim'; type Props = { uri: string, claim: StreamClaim, claimIsMine: boolean, downloading: boolean, loading: boolean, focusable: boolean, fileInfo: ?FileListItem, openModal: (id: string, { path: string }) => void, pause: () => void, download: (string) => void, costInfo: ?{ cost: string }, buttonType: ?string, showLabel: ?boolean, hideOpenButton: boolean, hideDownloadStatus: boolean, streamingUrl: ?string, }; function FileDownloadLink(props: Props) { const { fileInfo, downloading, loading, openModal, pause, claimIsMine, download, uri, claim, buttonType, focusable = true, showLabel = false, hideOpenButton = false, hideDownloadStatus = false, streamingUrl, } = props; const [didClickDownloadButton, setDidClickDownloadButton] = useState(false); const fileName = claim && claim.value && claim.value.source && claim.value.source.name; // @if TARGET='web' React.useEffect(() => { if (didClickDownloadButton && streamingUrl) { webDownloadClaim(streamingUrl, fileName); setDidClickDownloadButton(false); } }, [streamingUrl, didClickDownloadButton, fileName]); // @endif function handleDownload(e) { setDidClickDownloadButton(true); e.preventDefault(); download(uri); } if (!claim) { return null; } // @if TARGET='app' if (downloading || loading) { if (hideDownloadStatus) { return null; } if (fileInfo && fileInfo.written_bytes > 0) { const progress = (fileInfo.written_bytes / fileInfo.total_bytes) * 100; return ( {__('%percent%% downloaded', { percent: progress.toFixed(0) })} ); } else { return ( {__('Connecting...')} ); } } // @endif if (fileInfo && fileInfo.download_path && fileInfo.completed) { const openLabel = __('Open file'); return hideOpenButton ? null : (