SubNavButtons.jsx 1.9 KB

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