import React, { useState } from 'react'; import PropTypes from 'prop-types'; import { UncontrolledTooltip } from 'reactstrap'; import { withTranslation } from 'react-i18next'; import urljoin from 'url-join'; import { pagePathUtils } from '@growi/core'; import { withUnstatedContainers } from '../UnstatedUtils'; import AppContainer from '~/client/services/AppContainer'; import PageDeleteModal from '../PageDeleteModal'; import PageRenameModal from '../PageRenameModal'; import PageDuplicateModal from '../PageDuplicateModal'; import CreateTemplateModal from '../CreateTemplateModal'; import PagePresentationModal from '../PagePresentationModal'; import PresentationIcon from '../Icons/PresentationIcon'; const { isTopPage } = pagePathUtils; const LegacyPageManagemenet = (props) => { const { t, appContainer, isCompactMode, pageId, revisionId, path, isDeletable, isAbleToDeleteCompletely, } = props; const { currentUser } = appContainer; const isTopPagePath = isTopPage(path); const [isPageRenameModalShown, setIsPageRenameModalShown] = useState(false); const [isPageDuplicateModalShown, setIsPageDuplicateModalShown] = useState(false); const [isPageTemplateModalShown, setIsPageTempleteModalShown] = useState(false); const [isPageDeleteModalShown, setIsPageDeleteModalShown] = useState(false); const [isPagePresentationModalShown, setIsPagePresentationModalShown] = useState(false); const presentationHref = urljoin(window.location.origin, path, '?presentation=1'); function openPageRenameModalHandler() { setIsPageRenameModalShown(true); } function closePageRenameModalHandler() { setIsPageRenameModalShown(false); } function openPageDuplicateModalHandler() { setIsPageDuplicateModalShown(true); } function closePageDuplicateModalHandler() { setIsPageDuplicateModalShown(false); } function openPageTemplateModalHandler() { setIsPageTempleteModalShown(true); } function closePageTemplateModalHandler() { setIsPageTempleteModalShown(false); } function openPageDeleteModalHandler() { setIsPageDeleteModalShown(true); } function closePageDeleteModalHandler() { setIsPageDeleteModalShown(false); } function openPagePresentationModalHandler() { setIsPagePresentationModalShown(true); } function closePagePresentationModalHandler() { setIsPagePresentationModalShown(false); } // TODO GW-2746 bulk export pages // async function getArchivePageData() { // try { // const res = await appContainer.apiv3Get('page/count-children-pages', { pageId }); // setTotalPages(res.data.dummy); // } // catch (err) { // setErrorMessage(t('export_bulk.failed_to_count_pages')); // } // } async function exportPageHandler(format) { const url = new URL(urljoin(window.location.origin, '_api/v3/page/export', pageId)); url.searchParams.append('format', format); url.searchParams.append('revisionId', revisionId); window.location.href = url.href; } // TODO GW-2746 create api to bulk export pages // function openArchiveModalHandler() { // setIsArchiveCreateModalShown(true); // getArchivePageData(); // } // TODO GW-2746 create api to bulk export pages // function closeArchiveCreateModalHandler() { // setIsArchiveCreateModalShown(false); // } function renderDropdownItemForTopPage() { return ( <> {/* TODO Presentation Mode is not function. So if it is really necessary, survey this cause and implement Presentation Mode in top page */} {/* */}
); } function renderDropdownItemForNotTopPage() { return ( <> {/* TODO GW-2746 create api to bulk export pages */} {/* */}
); } function renderDropdownItemForDeletablePage() { return ( <>
); } function renderModals() { if (currentUser == null) { return null; } return ( <> ); } function renderDotsIconForCurrentUser() { return ( <> ); } function renderDotsIconForGuestUser() { return ( <> {t('Not available for guest')} ); } return ( <> {currentUser == null ? renderDotsIconForGuestUser() : renderDotsIconForCurrentUser()}
{isTopPagePath ? renderDropdownItemForTopPage() : renderDropdownItemForNotTopPage()} {(!isTopPagePath && isDeletable) && renderDropdownItemForDeletablePage()}
{renderModals()} ); }; /** * Wrapper component for using unstated */ const LegacyPageManagemenetWrapper = withUnstatedContainers(LegacyPageManagemenet, [AppContainer]); LegacyPageManagemenet.propTypes = { t: PropTypes.func.isRequired, // i18next appContainer: PropTypes.instanceOf(AppContainer).isRequired, pageId: PropTypes.string.isRequired, revisionId: PropTypes.string.isRequired, path: PropTypes.string.isRequired, isDeletable: PropTypes.bool.isRequired, isAbleToDeleteCompletely: PropTypes.bool.isRequired, isCompactMode: PropTypes.bool, }; LegacyPageManagemenet.defaultProps = { isCompactMode: false, }; const PageManagement = (props) => { return ; }; export default withTranslation()(PageManagement);