|
@@ -1,4 +1,4 @@
|
|
|
-import React, { useCallback } from 'react';
|
|
|
|
|
|
|
+import React, { useState, useCallback } from 'react';
|
|
|
import PropTypes from 'prop-types';
|
|
import PropTypes from 'prop-types';
|
|
|
|
|
|
|
|
import { useTranslation } from 'react-i18next';
|
|
import { useTranslation } from 'react-i18next';
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
} from '~/stores/ui';
|
|
} from '~/stores/ui';
|
|
|
import {
|
|
import {
|
|
|
useCurrentCreatedAt, useCurrentUpdatedAt, useCurrentPageId, useRevisionId, useCurrentPagePath,
|
|
useCurrentCreatedAt, useCurrentUpdatedAt, useCurrentPageId, useRevisionId, useCurrentPagePath,
|
|
|
- useCreator, useRevisionAuthor, useIsGuestUser, useIsSharedUser, useShareLinkId,
|
|
|
|
|
|
|
+ useCreator, useRevisionAuthor, useCurrentUser, useIsGuestUser, useIsSharedUser, useShareLinkId,
|
|
|
} from '~/stores/context';
|
|
} from '~/stores/context';
|
|
|
import { useSWRTagsInfo } from '~/stores/page';
|
|
import { useSWRTagsInfo } from '~/stores/page';
|
|
|
|
|
|
|
@@ -31,6 +31,7 @@ import { SubNavButtons } from './SubNavButtons';
|
|
|
import PageEditorModeManager from './PageEditorModeManager';
|
|
import PageEditorModeManager from './PageEditorModeManager';
|
|
|
import { GrowiSubNavigation } from './GrowiSubNavigation';
|
|
import { GrowiSubNavigation } from './GrowiSubNavigation';
|
|
|
import PresentationIcon from '../Icons/PresentationIcon';
|
|
import PresentationIcon from '../Icons/PresentationIcon';
|
|
|
|
|
+import CreateTemplateModal from '../CreateTemplateModal';
|
|
|
import { exportAsMarkdown } from '~/client/services/page-operation';
|
|
import { exportAsMarkdown } from '~/client/services/page-operation';
|
|
|
|
|
|
|
|
|
|
|
|
@@ -38,15 +39,21 @@ type AdditionalMenuItemsProps = AdditionalMenuItemsRendererProps & {
|
|
|
pageId: string,
|
|
pageId: string,
|
|
|
revisionId: string,
|
|
revisionId: string,
|
|
|
isLinkSharingDisabled?: boolean,
|
|
isLinkSharingDisabled?: boolean,
|
|
|
|
|
+ onClickTemplateMenuItem: (isPageTemplateModalShown: boolean) => void,
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const AdditionalMenuItems = (props: AdditionalMenuItemsProps): JSX.Element => {
|
|
const AdditionalMenuItems = (props: AdditionalMenuItemsProps): JSX.Element => {
|
|
|
const { t } = useTranslation();
|
|
const { t } = useTranslation();
|
|
|
|
|
|
|
|
const {
|
|
const {
|
|
|
- pageId, revisionId, isLinkSharingDisabled,
|
|
|
|
|
|
|
+ pageId, revisionId, isLinkSharingDisabled, onClickTemplateMenuItem,
|
|
|
} = props;
|
|
} = props;
|
|
|
|
|
|
|
|
|
|
+ const openPageTemplateModalHandler = () => {
|
|
|
|
|
+ onClickTemplateMenuItem(true);
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
const { data: isGuestUser } = useIsGuestUser();
|
|
const { data: isGuestUser } = useIsGuestUser();
|
|
|
const { data: isSharedUser } = useIsSharedUser();
|
|
const { data: isSharedUser } = useIsSharedUser();
|
|
|
const { open: openPresentationModal } = usePagePresentationModalStatus();
|
|
const { open: openPresentationModal } = usePagePresentationModalStatus();
|
|
@@ -101,7 +108,7 @@ const AdditionalMenuItems = (props: AdditionalMenuItemsProps): JSX.Element => {
|
|
|
<DropdownItem divider />
|
|
<DropdownItem divider />
|
|
|
|
|
|
|
|
{/* Create template */}
|
|
{/* Create template */}
|
|
|
- <DropdownItem onClick={() => { /* TODO: implement in https://redmine.weseek.co.jp/issues/87673 */ }}>
|
|
|
|
|
|
|
+ <DropdownItem onClick={openPageTemplateModalHandler}>
|
|
|
<i className="icon-fw icon-magic-wand"></i> { t('template.option_label.create/edit') }
|
|
<i className="icon-fw icon-magic-wand"></i> { t('template.option_label.create/edit') }
|
|
|
</DropdownItem>
|
|
</DropdownItem>
|
|
|
</>
|
|
</>
|
|
@@ -120,6 +127,7 @@ const GrowiContextualSubNavigation = (props) => {
|
|
|
const { data: path } = useCurrentPagePath();
|
|
const { data: path } = useCurrentPagePath();
|
|
|
const { data: creator } = useCreator();
|
|
const { data: creator } = useCreator();
|
|
|
const { data: revisionAuthor } = useRevisionAuthor();
|
|
const { data: revisionAuthor } = useRevisionAuthor();
|
|
|
|
|
+ const { data: currentUser } = useCurrentUser();
|
|
|
const { data: isGuestUser } = useIsGuestUser();
|
|
const { data: isGuestUser } = useIsGuestUser();
|
|
|
const { data: isSharedUser } = useIsSharedUser();
|
|
const { data: isSharedUser } = useIsSharedUser();
|
|
|
const { data: shareLinkId } = useShareLinkId();
|
|
const { data: shareLinkId } = useShareLinkId();
|
|
@@ -135,6 +143,8 @@ const GrowiContextualSubNavigation = (props) => {
|
|
|
const { open: openRenameModal } = usePageRenameModalStatus();
|
|
const { open: openRenameModal } = usePageRenameModalStatus();
|
|
|
const { open: openDeleteModal } = usePageDeleteModal();
|
|
const { open: openDeleteModal } = usePageDeleteModal();
|
|
|
|
|
|
|
|
|
|
+ const [isPageTemplateModalShown, setIsPageTempleteModalShown] = useState(false);
|
|
|
|
|
+
|
|
|
const {
|
|
const {
|
|
|
editorContainer, isCompactMode, isLinkSharingDisabled,
|
|
editorContainer, isCompactMode, isLinkSharingDisabled,
|
|
|
} = props;
|
|
} = props;
|
|
@@ -175,6 +185,11 @@ const GrowiContextualSubNavigation = (props) => {
|
|
|
openDeleteModal([pageToDelete]);
|
|
openDeleteModal([pageToDelete]);
|
|
|
}, [openDeleteModal]);
|
|
}, [openDeleteModal]);
|
|
|
|
|
|
|
|
|
|
+ const templateMenuItemClickHandler = useCallback(() => {
|
|
|
|
|
+ setIsPageTempleteModalShown(true);
|
|
|
|
|
+ }, []);
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
const ControlComponents = useCallback(() => {
|
|
const ControlComponents = useCallback(() => {
|
|
|
function onPageEditorModeButtonClicked(viewType) {
|
|
function onPageEditorModeButtonClicked(viewType) {
|
|
|
mutateEditorMode(viewType);
|
|
mutateEditorMode(viewType);
|
|
@@ -198,6 +213,7 @@ const GrowiContextualSubNavigation = (props) => {
|
|
|
pageId={pageId}
|
|
pageId={pageId}
|
|
|
revisionId={revisionId}
|
|
revisionId={revisionId}
|
|
|
isLinkSharingDisabled={isLinkSharingDisabled}
|
|
isLinkSharingDisabled={isLinkSharingDisabled}
|
|
|
|
|
+ onClickTemplateMenuItem={templateMenuItemClickHandler}
|
|
|
/>
|
|
/>
|
|
|
)}
|
|
)}
|
|
|
onClickDuplicateMenuItem={duplicateItemClickedHandler}
|
|
onClickDuplicateMenuItem={duplicateItemClickedHandler}
|
|
@@ -216,13 +232,21 @@ const GrowiContextualSubNavigation = (props) => {
|
|
|
/>
|
|
/>
|
|
|
)}
|
|
)}
|
|
|
</div>
|
|
</div>
|
|
|
|
|
+ {currentUser != null && (
|
|
|
|
|
+ <CreateTemplateModal
|
|
|
|
|
+ path={path}
|
|
|
|
|
+ isOpen={isPageTemplateModalShown}
|
|
|
|
|
+ onClose={() => setIsPageTempleteModalShown(false)}
|
|
|
|
|
+ />
|
|
|
|
|
+ )}
|
|
|
</>
|
|
</>
|
|
|
);
|
|
);
|
|
|
}, [
|
|
}, [
|
|
|
pageId, revisionId, shareLinkId, editorMode, mutateEditorMode, isCompactMode,
|
|
pageId, revisionId, shareLinkId, editorMode, mutateEditorMode, isCompactMode,
|
|
|
- isLinkSharingDisabled, isDeviceSmallerThanMd, isGuestUser, isSharedUser,
|
|
|
|
|
|
|
+ isLinkSharingDisabled, isDeviceSmallerThanMd, isGuestUser, isSharedUser, currentUser,
|
|
|
isViewMode, isAbleToShowPageEditorModeManager, isAbleToShowPageManagement,
|
|
isViewMode, isAbleToShowPageEditorModeManager, isAbleToShowPageManagement,
|
|
|
- duplicateItemClickedHandler, renameItemClickedHandler, deleteItemClickedHandler, path,
|
|
|
|
|
|
|
+ duplicateItemClickedHandler, renameItemClickedHandler, deleteItemClickedHandler,
|
|
|
|
|
+ path, templateMenuItemClickHandler, isPageTemplateModalShown,
|
|
|
]);
|
|
]);
|
|
|
|
|
|
|
|
|
|
|