SubNavButtons.jsx 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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 { withUnstatedContainers } from '../UnstatedUtils';
  7. import loggerFactory from '~/utils/logger';
  8. import BookmarkButton from '../BookmarkButton';
  9. import LikeButtons from '../LikeButtons';
  10. import PageManagement from '../Page/PageManagement';
  11. const logger = loggerFactory('growi:SubnavButtons');
  12. const SubnavButtons = (props) => {
  13. const {
  14. appContainer, navigationContainer, pageContainer, isCompactMode,
  15. } = props;
  16. /* eslint-enable react/prop-types */
  17. /* eslint-disable react/prop-types */
  18. const PageReactionButtons = ({ pageContainer }) => {
  19. const { pageId, isBookmarked, sumOfBookmarks } = pageContainer.state;
  20. const onChangeInvoked = () => {
  21. if (pageContainer.retrieveBookmarkInfo == null) { logger.error('retrieveBookmarkInfo is null') }
  22. else { pageContainer.retrieveBookmarkInfo() }
  23. };
  24. return (
  25. <>
  26. {pageContainer.isAbleToShowLikeButtons && (
  27. <span>
  28. <LikeButtons />
  29. </span>
  30. )}
  31. <span>
  32. <BookmarkButton
  33. pageId={pageId}
  34. isBookmarked={isBookmarked}
  35. sumOfBookmarks={sumOfBookmarks}
  36. onChangeInvoked={onChangeInvoked}
  37. />
  38. </span>
  39. </>
  40. );
  41. };
  42. /* eslint-enable react/prop-types */
  43. const { editorMode } = navigationContainer.state;
  44. const isViewMode = editorMode === 'view';
  45. return (
  46. <>
  47. {isViewMode && (
  48. <>
  49. {pageContainer.isAbleToShowPageReactionButtons && <PageReactionButtons appContainer={appContainer} pageContainer={pageContainer} />}
  50. {pageContainer.isAbleToShowPageManagement && <PageManagement isCompactMode={isCompactMode} />}
  51. </>
  52. )}
  53. </>
  54. );
  55. };
  56. /**
  57. * Wrapper component for using unstated
  58. */
  59. const SubnavButtonsWrapper = withUnstatedContainers(SubnavButtons, [AppContainer, NavigationContainer, PageContainer]);
  60. SubnavButtons.propTypes = {
  61. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  62. navigationContainer: PropTypes.instanceOf(NavigationContainer).isRequired,
  63. pageContainer: PropTypes.instanceOf(PageContainer).isRequired,
  64. isCompactMode: PropTypes.bool,
  65. };
  66. export default SubnavButtonsWrapper;