preview-download-button.js 2.1 KB

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