overleaf/services/web/frontend/js/features/preview/components/preview-download-button.js

84 lines
2 KiB
JavaScript
Raw Normal View History

import React from 'react'
import PropTypes from 'prop-types'
import { Dropdown, OverlayTrigger, Tooltip } from 'react-bootstrap'
import { useTranslation } from 'react-i18next'
import PreviewDownloadFileList from './preview-download-file-list'
import Icon from '../../../shared/components/icon'
function PreviewDownloadButton({
isCompiling,
outputFiles,
pdfDownloadUrl,
showText,
}) {
const { t } = useTranslation()
let textStyle = {}
if (!showText) {
textStyle = {
position: 'absolute',
right: '-100vw',
}
}
const pdfDownloadDisabled = isCompiling || !pdfDownloadUrl
const buttonElement = (
<a
className="btn btn-xs btn-info"
disabled={pdfDownloadDisabled}
download
href={pdfDownloadUrl || '#'}
style={{ pointerEvents: 'auto' }}
>
<Icon type="download" modifier="fw" />
<span className="toolbar-text" style={textStyle}>
{t('download_pdf')}
</span>
</a>
)
const hideTooltip = showText && pdfDownloadUrl
return (
<Dropdown
id="download-dropdown"
className="toolbar-item"
disabled={isCompiling}
>
{hideTooltip ? (
buttonElement
) : (
<OverlayTrigger
placement="bottom"
overlay={
<Tooltip id="tooltip-download-pdf">
{pdfDownloadDisabled
? t('please_compile_pdf_before_download')
: t('download_pdf')}
</Tooltip>
}
>
{buttonElement}
</OverlayTrigger>
)}
<Dropdown.Toggle
className="btn btn-xs btn-info dropdown-toggle"
aria-label={t('toggle_output_files_list')}
bsStyle="info"
/>
<Dropdown.Menu id="download-dropdown-list">
<PreviewDownloadFileList fileList={outputFiles} />
</Dropdown.Menu>
</Dropdown>
)
}
PreviewDownloadButton.propTypes = {
isCompiling: PropTypes.bool.isRequired,
outputFiles: PropTypes.array,
pdfDownloadUrl: PropTypes.string,
showText: PropTypes.bool.isRequired,
}
export default PreviewDownloadButton