Просмотр исходного кода

Merge pull request #9900 from weseek/imprv/165044-165289-disable-bulk-export-for-no-upload-settings

imprv: Disable page bulk export when file upload settings are not configured
Yuki Takei 11 месяцев назад
Родитель
Сommit
73158a01aa

+ 2 - 1
apps/app/public/static/locales/en_US/translation.json

@@ -784,7 +784,8 @@
     "export_cancel_warning": "The following export in progress will be canceled",
     "restart": "Restart",
     "format": "Format",
-    "started_on": "Started on"
+    "started_on": "Started on",
+    "file_upload_not_configured": "File upload settings are not configured"
   },
   "message": {
     "successfully_connected": "Successfully Connected!",

+ 2 - 1
apps/app/public/static/locales/fr_FR/translation.json

@@ -778,7 +778,8 @@
     "export_cancel_warning": "Les exportations suivantes en cours seront annulées",
     "restart": "Redémarrage",
     "format": "Format",
-    "started_on": "Commencé le"
+    "started_on": "Commencé le",
+    "file_upload_not_configured": "Les paramètres de téléchargement de fichiers ne sont pas configurés"
   },
   "message": {
     "successfully_connected": "Connecté!",

+ 2 - 1
apps/app/public/static/locales/ja_JP/translation.json

@@ -816,7 +816,8 @@
     "export_cancel_warning": "進行中の以下のエクスポートはキャンセルされます",
     "restart": "やり直す",
     "format": "形式",
-    "started_on": "開始日時"
+    "started_on": "開始日時",
+    "file_upload_not_configured": "ファイルアップロード設定が完了していません"
   },
   "message": {
     "successfully_connected": "接続に成功しました!",

+ 2 - 1
apps/app/public/static/locales/zh_CN/translation.json

@@ -787,7 +787,8 @@
     "export_cancel_warning": "以下正在进行的导出将被取消",
     "restart": "重新开始",
     "format": "格式",
-    "started_on": "开始于"
+    "started_on": "开始于",
+    "file_upload_not_configured": "未配置文件上传设置"
   },
   "message": {
     "successfully_connected": "连接成功!",

+ 26 - 10
apps/app/src/client/components/Navbar/GrowiContextualSubNavigation.tsx

@@ -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 />