|
|
@@ -1,54 +1,26 @@
|
|
|
-import React, { useMemo } from 'react';
|
|
|
-import PropTypes from 'prop-types';
|
|
|
-
|
|
|
-import { pagePathUtils } from '@growi/core';
|
|
|
-import AppContainer from '~/client/services/AppContainer';
|
|
|
-import PageContainer from '~/client/services/PageContainer';
|
|
|
-
|
|
|
-import { withUnstatedContainers } from './UnstatedUtils';
|
|
|
+import React, { useCallback, useMemo } from 'react';
|
|
|
|
|
|
import RecentlyCreatedIcon from './Icons/RecentlyCreatedIcon';
|
|
|
import { smoothScrollIntoView } from '~/client/util/smooth-scroll';
|
|
|
-
|
|
|
-const { isTopPage } = pagePathUtils;
|
|
|
+import { usePageUser } from '~/stores/context';
|
|
|
|
|
|
const WIKI_HEADER_LINK = 120;
|
|
|
|
|
|
-/**
|
|
|
- * @author Yuki Takei <yuki@weseek.co.jp>
|
|
|
- *
|
|
|
- */
|
|
|
-const ContentLinkButtons = (props) => {
|
|
|
|
|
|
- const { appContainer, pageContainer } = props;
|
|
|
- const { pageUser, path } = pageContainer.state;
|
|
|
- const { isPageExist } = pageContainer.state;
|
|
|
- const { isSharedUser } = appContainer;
|
|
|
+const ContentLinkButtons = (): JSX.Element => {
|
|
|
|
|
|
- const isTopPagePath = isTopPage(path);
|
|
|
+ const { data: pageUser } = usePageUser();
|
|
|
|
|
|
// get element for smoothScroll
|
|
|
- const getCommentListDom = useMemo(() => { return document.getElementById('page-comments-list') }, []);
|
|
|
const getBookMarkListHeaderDom = useMemo(() => { return document.getElementById('bookmarks-list') }, []);
|
|
|
const getRecentlyCreatedListHeaderDom = useMemo(() => { return document.getElementById('recently-created-list') }, []);
|
|
|
|
|
|
|
|
|
- const CommentLinkButton = () => {
|
|
|
- return (
|
|
|
- <div className="mt-3">
|
|
|
- <button
|
|
|
- type="button"
|
|
|
- className="btn btn-outline-secondary btn-sm btn-block"
|
|
|
- onClick={() => smoothScrollIntoView(getCommentListDom, WIKI_HEADER_LINK)}
|
|
|
- >
|
|
|
- <i className="mr-2 icon-fw icon-bubbles"></i>
|
|
|
- <span>Comments</span>
|
|
|
- </button>
|
|
|
- </div>
|
|
|
- );
|
|
|
- };
|
|
|
+ const BookMarkLinkButton = useCallback((): JSX.Element => {
|
|
|
+ if (getBookMarkListHeaderDom == null) {
|
|
|
+ return <></>;
|
|
|
+ }
|
|
|
|
|
|
- const BookMarkLinkButton = () => {
|
|
|
return (
|
|
|
<button
|
|
|
type="button"
|
|
|
@@ -58,11 +30,14 @@ const ContentLinkButtons = (props) => {
|
|
|
<i className="fa fa-fw fa-bookmark-o"></i>
|
|
|
<span>Bookmarks</span>
|
|
|
</button>
|
|
|
-
|
|
|
);
|
|
|
- };
|
|
|
+ }, [getBookMarkListHeaderDom]);
|
|
|
+
|
|
|
+ const RecentlyCreatedLinkButton = useCallback(() => {
|
|
|
+ if (getRecentlyCreatedListHeaderDom == null) {
|
|
|
+ return <></>;
|
|
|
+ }
|
|
|
|
|
|
- const RecentlyCreatedLinkButton = () => {
|
|
|
return (
|
|
|
<button
|
|
|
type="button"
|
|
|
@@ -72,25 +47,20 @@ const ContentLinkButtons = (props) => {
|
|
|
<i className="grw-icon-container-recently-created mr-2"><RecentlyCreatedIcon /></i>
|
|
|
<span>Recently Created</span>
|
|
|
</button>
|
|
|
-
|
|
|
);
|
|
|
- };
|
|
|
+ }, [getRecentlyCreatedListHeaderDom]);
|
|
|
|
|
|
- return (
|
|
|
- <>
|
|
|
- {isPageExist && !isSharedUser && !isTopPagePath && <CommentLinkButton />}
|
|
|
+ if (pageUser == null) {
|
|
|
+ return <></>;
|
|
|
+ }
|
|
|
|
|
|
- <div className="mt-3 d-flex justify-content-between">
|
|
|
- {pageUser && <><BookMarkLinkButton /><RecentlyCreatedLinkButton /></>}
|
|
|
- </div>
|
|
|
- </>
|
|
|
+ return (
|
|
|
+ <div className="mt-3 d-flex justify-content-between">
|
|
|
+ <BookMarkLinkButton />
|
|
|
+ <RecentlyCreatedLinkButton />
|
|
|
+ </div>
|
|
|
);
|
|
|
|
|
|
};
|
|
|
|
|
|
-ContentLinkButtons.propTypes = {
|
|
|
- appContainer: PropTypes.instanceOf(AppContainer).isRequired,
|
|
|
- pageContainer: PropTypes.instanceOf(PageContainer).isRequired,
|
|
|
-};
|
|
|
-
|
|
|
-export default withUnstatedContainers(ContentLinkButtons, [AppContainer, PageContainer]);
|
|
|
+export default ContentLinkButtons;
|