layout-dropdown-button.js 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import PropTypes from 'prop-types'
  2. import { Dropdown, MenuItem } from 'react-bootstrap'
  3. import { Trans, useTranslation } from 'react-i18next'
  4. import Icon from '../../../shared/components/icon'
  5. import IconChecked from '../../../shared/components/icon-checked'
  6. import ControlledDropdown from '../../../shared/components/controlled-dropdown'
  7. import IconEditorOnly from './icon-editor-only'
  8. import IconPdfOnly from './icon-pdf-only'
  9. function IconCheckmark({ iconFor, pdfLayout, view }) {
  10. if (iconFor === 'editorOnly' && pdfLayout === 'flat' && view === 'editor') {
  11. return <IconChecked />
  12. } else if (iconFor === 'pdfOnly' && pdfLayout === 'flat' && view === 'pdf') {
  13. return <IconChecked />
  14. } else if (iconFor === 'sideBySide' && pdfLayout === 'sideBySide') {
  15. return <IconChecked />
  16. }
  17. // return empty icon for placeholder
  18. return <Icon type="" modifier="fw" />
  19. }
  20. function LayoutDropdownButton({ handleChangeLayout, pdfLayout, view }) {
  21. const { t } = useTranslation()
  22. // bsStyle is required for Dropdown.Toggle, but we will override style
  23. return (
  24. <ControlledDropdown id="layout-dropdown" className="toolbar-item">
  25. <Dropdown.Toggle className="btn-full-height" bsStyle="link">
  26. <Icon type="columns" modifier="fw" />
  27. <span className="toolbar-label">{t('layout')}</span>
  28. </Dropdown.Toggle>
  29. <Dropdown.Menu id="layout-dropdown-list">
  30. <MenuItem header>{t('layout')}</MenuItem>
  31. <MenuItem onSelect={() => handleChangeLayout('sideBySide')}>
  32. <IconCheckmark
  33. iconFor="sideBySide"
  34. pdfLayout={pdfLayout}
  35. view={view}
  36. />
  37. <Icon type="columns" />
  38. {t('editor_and_pdf')}
  39. </MenuItem>
  40. <MenuItem
  41. onSelect={() => handleChangeLayout('flat', 'editor')}
  42. className="menu-item-with-svg"
  43. >
  44. <IconCheckmark
  45. iconFor="editorOnly"
  46. pdfLayout={pdfLayout}
  47. view={view}
  48. />
  49. <IconEditorOnly />
  50. <Trans
  51. i18nKey="editor_only_hide_pdf"
  52. components={[
  53. <span key="editor_only_hide_pdf" className="subdued" />,
  54. ]}
  55. />
  56. </MenuItem>
  57. <MenuItem
  58. onSelect={() => handleChangeLayout('flat', 'pdf')}
  59. className="menu-item-with-svg"
  60. >
  61. <IconCheckmark iconFor="pdfOnly" pdfLayout={pdfLayout} view={view} />
  62. <IconPdfOnly />
  63. <Trans
  64. i18nKey="pdf_only_hide_editor"
  65. components={[
  66. <span key="pdf_only_hide_editor" className="subdued" />,
  67. ]}
  68. />
  69. </MenuItem>
  70. </Dropdown.Menu>
  71. </ControlledDropdown>
  72. )
  73. }
  74. export default LayoutDropdownButton
  75. IconCheckmark.propTypes = {
  76. iconFor: PropTypes.string.isRequired,
  77. pdfLayout: PropTypes.string.isRequired,
  78. view: PropTypes.string,
  79. }
  80. LayoutDropdownButton.propTypes = {
  81. handleChangeLayout: PropTypes.func.isRequired,
  82. pdfLayout: PropTypes.string.isRequired,
  83. view: PropTypes.string,
  84. }