SubNavButtons.jsx 1.9 KB

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