TopOfTableContents.jsx 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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 PageAccessoriesModal from './PageAccessoriesModal';
  10. import { withUnstatedContainers } from './UnstatedUtils';
  11. const TopOfTableContents = (props) => {
  12. const { pageAccessoriesContainer } = props;
  13. function renderModal() {
  14. return (
  15. <>
  16. <PageAccessoriesModal
  17. isOpen={pageAccessoriesContainer.state.isPageAccessoriesModalShown}
  18. onClose={pageAccessoriesContainer.closePageAccessoriesModal}
  19. />
  20. </>
  21. );
  22. }
  23. return (
  24. <>
  25. <div className="top-of-table-contents d-flex align-items-end pb-1">
  26. <button
  27. type="button"
  28. className="btn btn-link grw-btn-top-of-table"
  29. onClick={() => pageAccessoriesContainer.openPageAccessoriesModal('pagelist')}
  30. >
  31. <PageListIcon />
  32. </button>
  33. <button
  34. type="button"
  35. className="btn btn-link grw-btn-top-of-table"
  36. onClick={() => pageAccessoriesContainer.openPageAccessoriesModal('timeline')}
  37. >
  38. <TimeLineIcon />
  39. </button>
  40. <button
  41. type="button"
  42. className="btn btn-link grw-btn-top-of-table"
  43. onClick={() => pageAccessoriesContainer.openPageAccessoriesModal('page-history')}
  44. >
  45. <RecentChangesIcon />
  46. </button>
  47. <button
  48. type="button"
  49. className="btn btn-link grw-btn-top-of-table"
  50. onClick={() => pageAccessoriesContainer.openPageAccessoriesModal('attachment')}
  51. >
  52. <AttachmentIcon />
  53. </button>
  54. <div
  55. id="seen-user-list"
  56. data-user-ids-str="{{ page.seenUsers|slice(-15)|default([])|reverse|join(',') }}"
  57. data-sum-of-seen-users="{{ page.seenUsers.length|default(0) }}"
  58. >
  59. </div>
  60. </div>
  61. {renderModal()}
  62. </>
  63. );
  64. };
  65. /**
  66. * Wrapper component for using unstated
  67. */
  68. const TopOfTableContentsWrapper = withUnstatedContainers(TopOfTableContents, [PageAccessoriesContainer]);
  69. TopOfTableContents.propTypes = {
  70. pageAccessoriesContainer: PropTypes.instanceOf(PageAccessoriesContainer).isRequired,
  71. };
  72. export default withTranslation()(TopOfTableContentsWrapper);