ContentLinkButtons.jsx 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import React, { useMemo } from 'react';
  2. import PropTypes from 'prop-types';
  3. import NavigationContainer from '../services/NavigationContainer';
  4. import PageContainer from '../services/PageContainer';
  5. import { withUnstatedContainers } from './UnstatedUtils';
  6. import RecentlyCreatedIcon from './Icons/RecentlyCreatedIcon';
  7. const WIKI_HEADER_LINK = 120;
  8. /**
  9. * @author Yuki Takei <yuki@weseek.co.jp>
  10. *
  11. */
  12. const ContentLinkButtons = (props) => {
  13. const { navigationContainer, pageContainer } = props;
  14. const { pageUser } = pageContainer.state;
  15. const { isPageExist } = pageContainer.state;
  16. // get element for smoothScroll
  17. const getCommentListDom = useMemo(() => { return document.getElementById('page-comments-list') }, []);
  18. const getBookMarkListHeaderDom = useMemo(() => { return document.getElementById('bookmarks-list') }, []);
  19. const getRecentlyCreatedListHeaderDom = useMemo(() => { return document.getElementById('recently-created-list') }, []);
  20. const CommentLinkButton = () => {
  21. return (
  22. <div className="mt-3">
  23. <button
  24. type="button"
  25. className="btn btn-outline-secondary btn-sm btn-block"
  26. onClick={() => navigationContainer.smoothScrollIntoView(getCommentListDom, WIKI_HEADER_LINK)}
  27. >
  28. <i className="mr-2 icon-fw icon-bubbles"></i>
  29. <span>Comments</span>
  30. </button>
  31. </div>
  32. );
  33. };
  34. const BookMarkLinkButton = () => {
  35. return (
  36. <button
  37. type="button"
  38. className="btn btn-outline-secondary btn-sm px-2"
  39. onClick={() => navigationContainer.smoothScrollIntoView(getBookMarkListHeaderDom, WIKI_HEADER_LINK)}
  40. >
  41. <i className="mr-2 icon-star"></i>
  42. <span>Bookmarks</span>
  43. </button>
  44. );
  45. };
  46. const RecentlyCreatedLinkButton = () => {
  47. return (
  48. <button
  49. type="button"
  50. className="btn btn-outline-secondary btn-sm px-3"
  51. onClick={() => navigationContainer.smoothScrollIntoView(getRecentlyCreatedListHeaderDom, WIKI_HEADER_LINK)}
  52. >
  53. <i className="grw-icon-container-recently-created mr-2"><RecentlyCreatedIcon /></i>
  54. <span>Recently Created</span>
  55. </button>
  56. );
  57. };
  58. return (
  59. <>
  60. {isPageExist && <CommentLinkButton />}
  61. <div className="mt-3 d-flex justify-content-between">
  62. {pageUser && <><BookMarkLinkButton /><RecentlyCreatedLinkButton /></>}
  63. </div>
  64. </>
  65. );
  66. };
  67. ContentLinkButtons.propTypes = {
  68. navigationContainer: PropTypes.instanceOf(NavigationContainer).isRequired,
  69. pageContainer: PropTypes.instanceOf(PageContainer).isRequired,
  70. };
  71. export default withUnstatedContainers(ContentLinkButtons, [NavigationContainer, PageContainer]);