|
|
@@ -6,6 +6,7 @@ import { useSWRxPageInfo } from '../../stores/page';
|
|
|
import { useSWRBookmarkInfo } from '../../stores/bookmark';
|
|
|
import { useSWRxUsersList } from '../../stores/user';
|
|
|
import { useIsGuestUser } from '~/stores/context';
|
|
|
+import { IPageForPageDeleteModal } from '~/stores/ui';
|
|
|
|
|
|
import SubscribeButton from '../SubscribeButton';
|
|
|
import LikeButtons from '../LikeButtons';
|
|
|
@@ -20,17 +21,19 @@ type CommonProps = {
|
|
|
disableSeenUserInfoPopover?: boolean,
|
|
|
showPageControlDropdown?: boolean,
|
|
|
additionalMenuItemRenderer?: React.FunctionComponent<AdditionalMenuItemsRendererProps>,
|
|
|
+ onClickDeleteMenuItem?: (pageToDelete: IPageForPageDeleteModal | null) => void,
|
|
|
}
|
|
|
|
|
|
type SubNavButtonsSubstanceProps= CommonProps & {
|
|
|
pageId: string,
|
|
|
revisionId: string,
|
|
|
+ path?: string | null,
|
|
|
pageInfo: IPageInfoAll,
|
|
|
}
|
|
|
|
|
|
const SubNavButtonsSubstance = (props: SubNavButtonsSubstanceProps): JSX.Element => {
|
|
|
const {
|
|
|
- pageInfo, pageId, isCompactMode, disableSeenUserInfoPopover, showPageControlDropdown, additionalMenuItemRenderer,
|
|
|
+ pageInfo, pageId, revisionId, path, isCompactMode, disableSeenUserInfoPopover, showPageControlDropdown, additionalMenuItemRenderer, onClickDeleteMenuItem,
|
|
|
} = props;
|
|
|
|
|
|
const { data: isGuestUser } = useIsGuestUser();
|
|
|
@@ -84,10 +87,29 @@ const SubNavButtonsSubstance = (props: SubNavButtonsSubstanceProps): JSX.Element
|
|
|
mutateBookmarkInfo();
|
|
|
}, [isGuestUser, mutateBookmarkInfo, mutatePageInfo, pageId, pageInfo]);
|
|
|
|
|
|
+ const deleteMenuItemClickHandler = useCallback(async(_pageId: string): Promise<void> => {
|
|
|
+ if (onClickDeleteMenuItem == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (pageId == null || revisionId == null || path == null) {
|
|
|
+ throw Error('Any of _id, revision, and path must not be null.');
|
|
|
+ }
|
|
|
+
|
|
|
+ const pageToDelete: IPageForPageDeleteModal = {
|
|
|
+ pageId,
|
|
|
+ revisionId: revisionId as string,
|
|
|
+ path,
|
|
|
+ };
|
|
|
+
|
|
|
+ onClickDeleteMenuItem(pageToDelete);
|
|
|
+ }, [onClickDeleteMenuItem, pageId, path, revisionId]);
|
|
|
+
|
|
|
if (!isIPageInfoForOperation(pageInfo)) {
|
|
|
return <></>;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
const {
|
|
|
sumOfLikers, isLiked, bookmarkCount, isBookmarked,
|
|
|
} = pageInfo;
|
|
|
@@ -121,6 +143,7 @@ const SubNavButtonsSubstance = (props: SubNavButtonsSubstanceProps): JSX.Element
|
|
|
pageInfo={pageInfo}
|
|
|
isEnableActions={!isGuestUser}
|
|
|
additionalMenuItemRenderer={additionalMenuItemRenderer}
|
|
|
+ onClickDeleteMenuItem={deleteMenuItemClickHandler}
|
|
|
/>
|
|
|
)}
|
|
|
</div>
|
|
|
@@ -130,13 +153,24 @@ const SubNavButtonsSubstance = (props: SubNavButtonsSubstanceProps): JSX.Element
|
|
|
type SubNavButtonsProps= CommonProps & {
|
|
|
pageId: string,
|
|
|
revisionId?: string | null,
|
|
|
+ path?: string | null
|
|
|
};
|
|
|
|
|
|
export const SubNavButtons = (props: SubNavButtonsProps): JSX.Element => {
|
|
|
- const { pageId, revisionId } = props;
|
|
|
+ const {
|
|
|
+ pageId, revisionId, path, onClickDeleteMenuItem,
|
|
|
+ } = props;
|
|
|
|
|
|
const { data: pageInfo, error } = useSWRxPageInfo(pageId ?? null);
|
|
|
|
|
|
+
|
|
|
+ const deleteItemClickedHandler = useCallback(async(pageToDelete) => {
|
|
|
+ if (pageInfo == null || onClickDeleteMenuItem == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ await onClickDeleteMenuItem(pageToDelete);
|
|
|
+ }, [onClickDeleteMenuItem, pageInfo]);
|
|
|
+
|
|
|
if (revisionId == null || error != null) {
|
|
|
return <></>;
|
|
|
}
|
|
|
@@ -145,5 +179,15 @@ export const SubNavButtons = (props: SubNavButtonsProps): JSX.Element => {
|
|
|
return <></>;
|
|
|
}
|
|
|
|
|
|
- return <SubNavButtonsSubstance {...props} pageInfo={pageInfo} pageId={pageId} revisionId={revisionId} />;
|
|
|
+
|
|
|
+ return (
|
|
|
+ <SubNavButtonsSubstance
|
|
|
+ {...props}
|
|
|
+ pageInfo={pageInfo}
|
|
|
+ pageId={pageId}
|
|
|
+ revisionId={revisionId}
|
|
|
+ path={path}
|
|
|
+ onClickDeleteMenuItem={deleteItemClickedHandler}
|
|
|
+ />
|
|
|
+ );
|
|
|
};
|