|
|
@@ -16,7 +16,7 @@ import dynamic from 'next/dynamic';
|
|
|
import Link from 'next/link';
|
|
|
import { useRouter } from 'next/router';
|
|
|
import Sticky from 'react-stickynode';
|
|
|
-import { DropdownItem, UncontrolledTooltip } from 'reactstrap';
|
|
|
+import { DropdownItem, UncontrolledTooltip, Tooltip } from 'reactstrap';
|
|
|
|
|
|
import { exportAsMarkdown, updateContentWidth, syncLatestRevisionBody } from '~/client/services/page-operation';
|
|
|
import { toastSuccess, toastError, toastWarning } from '~/client/util/toastr';
|
|
|
@@ -26,7 +26,8 @@ import type { OnDuplicatedFunction, OnRenamedFunction, OnDeletedFunction } from
|
|
|
import { useShouldExpandContent } from '~/services/layout/use-should-expand-content';
|
|
|
import {
|
|
|
useCurrentPathname,
|
|
|
- useCurrentUser, useIsGuestUser, useIsReadOnlyUser, useIsBulkExportPagesEnabled, useIsLocalAccountRegistrationEnabled, useIsSharedUser, useShareLinkId,
|
|
|
+ useCurrentUser, useIsGuestUser, useIsReadOnlyUser, useIsBulkExportPagesEnabled,
|
|
|
+ useIsLocalAccountRegistrationEnabled, useIsSharedUser, useShareLinkId, useIsUploadEnabled,
|
|
|
} from '~/stores-universal/context';
|
|
|
import { useEditorMode } from '~/stores-universal/ui';
|
|
|
import {
|
|
|
@@ -79,6 +80,7 @@ const PageOperationMenuItems = (props: PageOperationMenuItemsProps): JSX.Element
|
|
|
const { data: isReadOnlyUser } = useIsReadOnlyUser();
|
|
|
const { data: isSharedUser } = useIsSharedUser();
|
|
|
const { data: isBulkExportPagesEnabled } = useIsBulkExportPagesEnabled();
|
|
|
+ const { data: isUploadEnabled } = useIsUploadEnabled();
|
|
|
|
|
|
const { open: openPresentationModal } = usePagePresentationModal();
|
|
|
const { open: openAccessoriesModal } = usePageAccessoriesModal();
|
|
|
@@ -86,6 +88,8 @@ const PageOperationMenuItems = (props: PageOperationMenuItemsProps): JSX.Element
|
|
|
|
|
|
const { data: codeMirrorEditor } = useCodeMirrorEditorIsolated(GlobalCodeMirrorEditorKey.MAIN);
|
|
|
|
|
|
+ const [isBulkExportTooltipOpen, setIsBulkExportTooltipOpen] = useState(false);
|
|
|
+
|
|
|
const syncLatestRevisionBodyHandler = useCallback(async() => {
|
|
|
// eslint-disable-next-line no-alert
|
|
|
const answer = window.confirm(t('sync-latest-revision-body.confirm'));
|
|
|
@@ -144,15 +148,27 @@ const PageOperationMenuItems = (props: PageOperationMenuItemsProps): JSX.Element
|
|
|
|
|
|
{/* Bulk export */}
|
|
|
{isBulkExportPagesEnabled && (
|
|
|
- <span id="bulkExportDropdownItem">
|
|
|
- <DropdownItem
|
|
|
- onClick={openPageBulkExportSelectModal}
|
|
|
- className="grw-page-control-dropdown-item"
|
|
|
+ <>
|
|
|
+ <span id="bulkExportDropdownItem">
|
|
|
+ <DropdownItem
|
|
|
+ onClick={openPageBulkExportSelectModal}
|
|
|
+ className="grw-page-control-dropdown-item"
|
|
|
+ disabled={!isUploadEnabled ?? true}
|
|
|
+ >
|
|
|
+ <span className="material-symbols-outlined me-1 grw-page-control-dropdown-icon">cloud_download</span>
|
|
|
+ {t('page_export.bulk_export')}
|
|
|
+ </DropdownItem>
|
|
|
+ </span>
|
|
|
+ <Tooltip
|
|
|
+ placement={window.innerWidth < 800 ? 'bottom' : 'left'}
|
|
|
+ isOpen={!isUploadEnabled && isBulkExportTooltipOpen}
|
|
|
+ // Tooltip cannot be activated when target is disabled so set the target to wrapper span
|
|
|
+ target="bulkExportDropdownItem"
|
|
|
+ toggle={() => setIsBulkExportTooltipOpen(!isBulkExportTooltipOpen)}
|
|
|
>
|
|
|
- <span className="material-symbols-outlined me-1 grw-page-control-dropdown-icon">cloud_download</span>
|
|
|
- {t('page_export.bulk_export')}
|
|
|
- </DropdownItem>
|
|
|
- </span>
|
|
|
+ {t('page_export.file_upload_not_configured')}
|
|
|
+ </Tooltip>
|
|
|
+ </>
|
|
|
)}
|
|
|
|
|
|
<DropdownItem divider />
|