|
@@ -8,6 +8,7 @@ import { withUnstatedContainers } from '../UnstatedUtils';
|
|
|
import PageReactionButtons from '../PageReactionButtons';
|
|
import PageReactionButtons from '../PageReactionButtons';
|
|
|
import PageManagement from '../Page/PageManagement';
|
|
import PageManagement from '../Page/PageManagement';
|
|
|
import { useSWRPageInfo } from '../../stores/page';
|
|
import { useSWRPageInfo } from '../../stores/page';
|
|
|
|
|
+import { useSWRBookmarkInfo } from '../../stores/bookmark';
|
|
|
import { toastError } from '../../client/util/apiNotification';
|
|
import { toastError } from '../../client/util/apiNotification';
|
|
|
import { apiv3Put } from '../../client/util/apiv3-client';
|
|
import { apiv3Put } from '../../client/util/apiv3-client';
|
|
|
|
|
|
|
@@ -24,11 +25,12 @@ const SubNavButtons: FC<SubNavButtonsProps> = (props: SubNavButtonsProps) => {
|
|
|
} = props;
|
|
} = props;
|
|
|
const { editorMode } = navigationContainer.state;
|
|
const { editorMode } = navigationContainer.state;
|
|
|
const isViewMode = editorMode === 'view';
|
|
const isViewMode = editorMode === 'view';
|
|
|
|
|
+ const { isGuestUser } = appContainer;
|
|
|
|
|
+
|
|
|
const { data: pageInfo, error: pageInfoError, mutate: mutatePageInfo } = useSWRPageInfo(pageId);
|
|
const { data: pageInfo, error: pageInfoError, mutate: mutatePageInfo } = useSWRPageInfo(pageId);
|
|
|
|
|
+ const { data: bookmarkInfo, error: bookmarkInfoError, mutate: mutateBookmarkInfo } = useSWRBookmarkInfo(pageId);
|
|
|
|
|
|
|
|
const likeClickhandler = useCallback(async() => {
|
|
const likeClickhandler = useCallback(async() => {
|
|
|
- const { isGuestUser } = appContainer;
|
|
|
|
|
-
|
|
|
|
|
if (isGuestUser) {
|
|
if (isGuestUser) {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
@@ -43,11 +45,30 @@ const SubNavButtons: FC<SubNavButtonsProps> = (props: SubNavButtonsProps) => {
|
|
|
}
|
|
}
|
|
|
}, [pageInfo]);
|
|
}, [pageInfo]);
|
|
|
|
|
|
|
|
|
|
+ const bookmarkClickHandler = useCallback(async() => {
|
|
|
|
|
+ if (isGuestUser) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ try {
|
|
|
|
|
+ await apiv3Put('/bookmarks', { pageId, bool: !bookmarkInfo.isBookmarked });
|
|
|
|
|
+ mutateBookmarkInfo();
|
|
|
|
|
+ }
|
|
|
|
|
+ catch (err) {
|
|
|
|
|
+ toastError(err);
|
|
|
|
|
+ }
|
|
|
|
|
+ }, [bookmarkInfo]);
|
|
|
|
|
+
|
|
|
|
|
|
|
|
if (pageInfoError != null || pageInfo == null) {
|
|
if (pageInfoError != null || pageInfo == null) {
|
|
|
return <></>;
|
|
return <></>;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ if (bookmarkInfoError != null || bookmarkInfo == null) {
|
|
|
|
|
+ return <></>;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
const { sumOfLikers, likerIds, isLiked } = pageInfo;
|
|
const { sumOfLikers, likerIds, isLiked } = pageInfo;
|
|
|
|
|
+ const { sumOfBookmarks, isBookmarked } = bookmarkInfo;
|
|
|
|
|
|
|
|
return (
|
|
return (
|
|
|
<>
|
|
<>
|
|
@@ -58,6 +79,9 @@ const SubNavButtons: FC<SubNavButtonsProps> = (props: SubNavButtonsProps) => {
|
|
|
likerIds={likerIds}
|
|
likerIds={likerIds}
|
|
|
isLiked={isLiked}
|
|
isLiked={isLiked}
|
|
|
onLikeClicked={likeClickhandler}
|
|
onLikeClicked={likeClickhandler}
|
|
|
|
|
+ sumOfBookmarks={sumOfBookmarks}
|
|
|
|
|
+ isBookmarked={isBookmarked}
|
|
|
|
|
+ onBookMarkClicked={bookmarkClickHandler}
|
|
|
>
|
|
>
|
|
|
</PageReactionButtons>
|
|
</PageReactionButtons>
|
|
|
)}
|
|
)}
|