PageAccessoriesModalControl.jsx 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. import { UncontrolledTooltip } from 'reactstrap';
  5. import PageAccessoriesContainer from '../services/PageAccessoriesContainer';
  6. import PageListIcon from './Icons/PageListIcon';
  7. import TimeLineIcon from './Icons/TimeLineIcon';
  8. import HistoryIcon from './Icons/HistoryIcon';
  9. import AttachmentIcon from './Icons/AttachmentIcon';
  10. import ShareLinkIcon from './Icons/ShareLinkIcon';
  11. import PageAccessoriesModal from './PageAccessoriesModal';
  12. import { withUnstatedContainers } from './UnstatedUtils';
  13. const PageAccessoriesModalControl = (props) => {
  14. const { t, pageAccessoriesContainer, isGuestUserMode } = props;
  15. function renderModal() {
  16. return (
  17. <PageAccessoriesModal
  18. isGuestUserMode={isGuestUserMode}
  19. isOpen={pageAccessoriesContainer.state.isPageAccessoriesModalShown}
  20. onClose={pageAccessoriesContainer.closePageAccessoriesModal}
  21. />
  22. );
  23. }
  24. return (
  25. <>
  26. <div className="top-of-table-contents d-flex align-items-end pb-1">
  27. <button
  28. type="button"
  29. className="btn btn-link grw-btn-top-of-table"
  30. onClick={() => pageAccessoriesContainer.openPageAccessoriesModal('pagelist')}
  31. >
  32. <PageListIcon />
  33. </button>
  34. <button
  35. type="button"
  36. className="btn btn-link grw-btn-top-of-table"
  37. onClick={() => pageAccessoriesContainer.openPageAccessoriesModal('timeline')}
  38. >
  39. <TimeLineIcon />
  40. </button>
  41. <button
  42. type="button"
  43. className="btn btn-link grw-btn-top-of-table"
  44. onClick={() => pageAccessoriesContainer.openPageAccessoriesModal('pageHistory')}
  45. >
  46. <HistoryIcon />
  47. </button>
  48. <button
  49. type="button"
  50. className="btn btn-link grw-btn-top-of-table"
  51. onClick={() => pageAccessoriesContainer.openPageAccessoriesModal('attachment')}
  52. >
  53. <AttachmentIcon />
  54. </button>
  55. <div id="shareLink-btn-wrapper-for-tooltip">
  56. <button
  57. type="button"
  58. className={`btn btn-link grw-btn-top-of-table ${isGuestUserMode && 'disabled'}`}
  59. onClick={() => pageAccessoriesContainer.openPageAccessoriesModal('shareLink')}
  60. >
  61. <ShareLinkIcon />
  62. </button>
  63. </div>
  64. {isGuestUserMode && (
  65. <UncontrolledTooltip placement="top" target="shareLink-btn-wrapper-for-tooltip" fade={false}>
  66. {t('Not available for guest')}
  67. </UncontrolledTooltip>
  68. )}
  69. <div
  70. id="seen-user-list"
  71. data-user-ids-str="{{ page.seenUsers|slice(-15)|default([])|reverse|join(',') }}"
  72. data-sum-of-seen-users="{{ page.seenUsers.length|default(0) }}"
  73. className="grw-seen-user-list ml-1 pl-1"
  74. >
  75. </div>
  76. </div>
  77. {renderModal()}
  78. </>
  79. );
  80. };
  81. /**
  82. * Wrapper component for using unstated
  83. */
  84. const PageAccessoriesModalControlWrapper = withUnstatedContainers(PageAccessoriesModalControl, [PageAccessoriesContainer]);
  85. PageAccessoriesModalControl.propTypes = {
  86. t: PropTypes.func.isRequired, // i18next
  87. pageAccessoriesContainer: PropTypes.instanceOf(PageAccessoriesContainer).isRequired,
  88. isGuestUserMode: PropTypes.bool.isRequired,
  89. };
  90. export default withTranslation()(PageAccessoriesModalControlWrapper);