SubNavButtons.jsx 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import AppContainer from '~/client/services/AppContainer';
  4. import PageContainer from '~/client/services/PageContainer';
  5. import { EditorMode, useEditorMode } from '~/stores/ui';
  6. import { withUnstatedContainers } from '../UnstatedUtils';
  7. import BookmarkButton from '../BookmarkButton';
  8. import LikeButtons from '../LikeButtons';
  9. import PageManagement from '../Page/PageManagement';
  10. const SubnavButtons = (props) => {
  11. const {
  12. appContainer, pageContainer, isCompactMode,
  13. } = props;
  14. const { data: editorMode } = useEditorMode();
  15. /* eslint-disable react/prop-types */
  16. const PageReactionButtons = ({ pageContainer }) => {
  17. return (
  18. <>
  19. {pageContainer.isAbleToShowLikeButtons && (
  20. <span>
  21. <LikeButtons />
  22. </span>
  23. )}
  24. <span>
  25. <BookmarkButton />
  26. </span>
  27. </>
  28. );
  29. };
  30. /* eslint-enable react/prop-types */
  31. const isViewMode = editorMode === EditorMode.View;
  32. return (
  33. <>
  34. {isViewMode && (
  35. <>
  36. {pageContainer.isAbleToShowPageReactionButtons && <PageReactionButtons appContainer={appContainer} pageContainer={pageContainer} />}
  37. {pageContainer.isAbleToShowPageManagement && <PageManagement isCompactMode={isCompactMode} />}
  38. </>
  39. )}
  40. </>
  41. );
  42. };
  43. /**
  44. * Wrapper component for using unstated
  45. */
  46. const SubnavButtonsWrapper = withUnstatedContainers(SubnavButtons, [AppContainer, PageContainer]);
  47. SubnavButtons.propTypes = {
  48. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  49. pageContainer: PropTypes.instanceOf(PageContainer).isRequired,
  50. isCompactMode: PropTypes.bool,
  51. };
  52. export default SubnavButtonsWrapper;