TopOfTableContents.jsx 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. import PageAccessoriesContainer from '../services/PageAccessoriesContainer';
  5. import PageListIcon from './Icons/PageListIcon';
  6. import TimeLineIcon from './Icons/TimeLineIcon';
  7. import RecentChangesIcon from './Icons/RecentChangesIcon';
  8. import AttachmentIcon from './Icons/AttachmentIcon';
  9. import ShareLinkIcon from './Icons/ShareLinkIcon';
  10. import PageAccessoriesModal from './PageAccessoriesModal';
  11. import { withUnstatedContainers } from './UnstatedUtils';
  12. const TopOfTableContents = (props) => {
  13. const { pageAccessoriesContainer } = props;
  14. function renderModal() {
  15. return (
  16. <>
  17. <PageAccessoriesModal
  18. isOpen={pageAccessoriesContainer.state.isPageAccessoriesModalShown}
  19. onClose={pageAccessoriesContainer.closePageAccessoriesModal}
  20. />
  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. <RecentChangesIcon />
  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. <button
  56. type="button"
  57. className="btn btn-link grw-btn-top-of-table"
  58. onClick={() => pageAccessoriesContainer.openPageAccessoriesModal('shareLink')}
  59. >
  60. <ShareLinkIcon />
  61. </button>
  62. <div
  63. id="seen-user-list"
  64. data-user-ids-str="{{ page.seenUsers|slice(-15)|default([])|reverse|join(',') }}"
  65. data-sum-of-seen-users="{{ page.seenUsers.length|default(0) }}"
  66. >
  67. </div>
  68. </div>
  69. {renderModal()}
  70. </>
  71. );
  72. };
  73. /**
  74. * Wrapper component for using unstated
  75. */
  76. const TopOfTableContentsWrapper = withUnstatedContainers(TopOfTableContents, [PageAccessoriesContainer]);
  77. TopOfTableContents.propTypes = {
  78. pageAccessoriesContainer: PropTypes.instanceOf(PageAccessoriesContainer).isRequired,
  79. };
  80. export default withTranslation()(TopOfTableContentsWrapper);