preview-download-button.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import React from 'react'
  2. import PropTypes from 'prop-types'
  3. import { Dropdown, OverlayTrigger, Tooltip } from 'react-bootstrap'
  4. import { useTranslation } from 'react-i18next'
  5. import PreviewDownloadFileList from './preview-download-file-list'
  6. import Icon from '../../../shared/components/icon'
  7. function PreviewDownloadButton({
  8. isCompiling,
  9. outputFiles,
  10. pdfDownloadUrl,
  11. showText
  12. }) {
  13. const { t } = useTranslation()
  14. let textStyle = {}
  15. if (!showText) {
  16. textStyle = {
  17. position: 'absolute',
  18. right: '-100vw'
  19. }
  20. }
  21. const pdfDownloadDisabled = isCompiling || !pdfDownloadUrl
  22. const buttonElement = (
  23. <a
  24. className="btn btn-xs btn-info"
  25. disabled={pdfDownloadDisabled}
  26. download
  27. href={pdfDownloadUrl || '#'}
  28. style={{ pointerEvents: 'auto' }}
  29. >
  30. <Icon type="download" modifier="fw" />
  31. <span className="toolbar-text" style={textStyle}>
  32. {t('download_pdf')}
  33. </span>
  34. </a>
  35. )
  36. const hideTooltip = showText && pdfDownloadUrl
  37. return (
  38. <Dropdown
  39. id="download-dropdown"
  40. className="toolbar-item"
  41. disabled={isCompiling}
  42. >
  43. {hideTooltip ? (
  44. buttonElement
  45. ) : (
  46. <OverlayTrigger
  47. placement="bottom"
  48. overlay={
  49. <Tooltip id="tooltip-download-pdf">
  50. {pdfDownloadDisabled
  51. ? t('please_compile_pdf_before_download')
  52. : t('download_pdf')}
  53. </Tooltip>
  54. }
  55. >
  56. {buttonElement}
  57. </OverlayTrigger>
  58. )}
  59. <Dropdown.Toggle
  60. className="btn btn-xs btn-info dropdown-toggle"
  61. aria-label={t('toggle_output_files_list')}
  62. bsStyle="info"
  63. />
  64. <Dropdown.Menu id="download-dropdown-list">
  65. <PreviewDownloadFileList fileList={outputFiles} />
  66. </Dropdown.Menu>
  67. </Dropdown>
  68. )
  69. }
  70. PreviewDownloadButton.propTypes = {
  71. isCompiling: PropTypes.bool.isRequired,
  72. outputFiles: PropTypes.array,
  73. pdfDownloadUrl: PropTypes.string,
  74. showText: PropTypes.bool.isRequired
  75. }
  76. export default PreviewDownloadButton