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

relocate AcceptedUploadFileType

Yuki Takei 2 лет назад
Родитель
Сommit
f762022aed

+ 5 - 7
apps/app/src/components/PageComment/CommentEditor.tsx

@@ -17,11 +17,11 @@ import { toastError } from '~/client/util/toastr';
 import type { IEditorMethods } from '~/interfaces/editor-methods';
 import type { IEditorMethods } from '~/interfaces/editor-methods';
 import { useSWRxPageComment, useSWRxEditingCommentsNum } from '~/stores/comment';
 import { useSWRxPageComment, useSWRxEditingCommentsNum } from '~/stores/comment';
 import {
 import {
-  useIsUploadAllFileAllowed, useIsUploadEnabled,
-  // useAcceptedUploadFileType,
   useCurrentUser, useIsSlackConfigured,
   useCurrentUser, useIsSlackConfigured,
 } from '~/stores/context';
 } from '~/stores/context';
-import { useSWRxSlackChannels, useIsSlackEnabled, useIsEnabledUnsavedWarning } from '~/stores/editor';
+import {
+  useSWRxSlackChannels, useIsSlackEnabled, useIsEnabledUnsavedWarning, useAcceptedUploadFileType,
+} from '~/stores/editor';
 import { useCurrentPagePath } from '~/stores/page';
 import { useCurrentPagePath } from '~/stores/page';
 import { useNextThemes } from '~/stores/use-next-themes';
 import { useNextThemes } from '~/stores/use-next-themes';
 
 
@@ -71,11 +71,9 @@ export const CommentEditor = (props: CommentEditorProps): JSX.Element => {
   const { data: currentPagePath } = useCurrentPagePath();
   const { data: currentPagePath } = useCurrentPagePath();
   const { update: updateComment, post: postComment } = useSWRxPageComment(pageId);
   const { update: updateComment, post: postComment } = useSWRxPageComment(pageId);
   const { data: isSlackEnabled, mutate: mutateIsSlackEnabled } = useIsSlackEnabled();
   const { data: isSlackEnabled, mutate: mutateIsSlackEnabled } = useIsSlackEnabled();
+  const { data: acceptedUploadFileType } = useAcceptedUploadFileType();
   const { data: slackChannelsData } = useSWRxSlackChannels(currentPagePath);
   const { data: slackChannelsData } = useSWRxSlackChannels(currentPagePath);
   const { data: isSlackConfigured } = useIsSlackConfigured();
   const { data: isSlackConfigured } = useIsSlackConfigured();
-  const { data: isUploadAllFileAllowed } = useIsUploadAllFileAllowed();
-  const { data: isUploadEnabled } = useIsUploadEnabled();
-  // const { data: acceptedUploadFileType } = useAcceptedUploadFileType();
   const { mutate: mutateIsEnabledUnsavedWarning } = useIsEnabledUnsavedWarning();
   const { mutate: mutateIsEnabledUnsavedWarning } = useIsEnabledUnsavedWarning();
   const {
   const {
     increment: incrementEditingCommentsNum,
     increment: incrementEditingCommentsNum,
@@ -334,7 +332,7 @@ export const CommentEditor = (props: CommentEditorProps): JSX.Element => {
           <TabContent activeTab={activeTab}>
           <TabContent activeTab={activeTab}>
             <TabPane tabId="comment_editor">
             <TabPane tabId="comment_editor">
               <CodeMirrorEditorComment
               <CodeMirrorEditorComment
-                // acceptedUploadFileType={acceptedUploadFileType}
+                acceptedUploadFileType={acceptedUploadFileType}
                 onChange={onChangeHandler}
                 onChange={onChangeHandler}
               />
               />
               {/* <Editor
               {/* <Editor

+ 3 - 17
apps/app/src/components/PageEditor/PageEditor.tsx

@@ -9,7 +9,7 @@ import type { IPageHasId } from '@growi/core';
 import { useGlobalSocket } from '@growi/core/dist/swr';
 import { useGlobalSocket } from '@growi/core/dist/swr';
 import { pathUtils } from '@growi/core/dist/utils';
 import { pathUtils } from '@growi/core/dist/utils';
 import {
 import {
-  CodeMirrorEditorMain, GlobalCodeMirrorEditorKey, AcceptedUploadFileType,
+  CodeMirrorEditorMain, GlobalCodeMirrorEditorKey,
   useCodeMirrorEditorIsolated, useResolvedThemeForEditor,
   useCodeMirrorEditorIsolated, useResolvedThemeForEditor,
 } from '@growi/editor';
 } from '@growi/editor';
 import detectIndent from 'detect-indent';
 import detectIndent from 'detect-indent';
@@ -27,8 +27,6 @@ import {
   useDefaultIndentSize, useCurrentUser,
   useDefaultIndentSize, useCurrentUser,
   useCurrentPathname, useIsEnabledAttachTitleHeader,
   useCurrentPathname, useIsEnabledAttachTitleHeader,
   useIsEditable, useIsIndentSizeForced,
   useIsEditable, useIsIndentSizeForced,
-  useIsUploadAllFileAllowed, useIsUploadEnabled,
-  // useAcceptedUploadFileType,
 } from '~/stores/context';
 } from '~/stores/context';
 import {
 import {
   useEditorSettings,
   useEditorSettings,
@@ -36,6 +34,7 @@ import {
   useIsConflict,
   useIsConflict,
   useEditingMarkdown,
   useEditingMarkdown,
   useWaitingSaveProcessing,
   useWaitingSaveProcessing,
+  useAcceptedUploadFileType,
 } from '~/stores/editor';
 } from '~/stores/editor';
 import { useConflictDiffModal } from '~/stores/modal';
 import { useConflictDiffModal } from '~/stores/modal';
 import {
 import {
@@ -110,9 +109,7 @@ export const PageEditor = React.memo((props: Props): JSX.Element => {
   const { data: isIndentSizeForced } = useIsIndentSizeForced();
   const { data: isIndentSizeForced } = useIsIndentSizeForced();
   const { data: currentIndentSize, mutate: mutateCurrentIndentSize } = useCurrentIndentSize();
   const { data: currentIndentSize, mutate: mutateCurrentIndentSize } = useCurrentIndentSize();
   const { data: defaultIndentSize } = useDefaultIndentSize();
   const { data: defaultIndentSize } = useDefaultIndentSize();
-  const { data: isUploadAllFileAllowed } = useIsUploadAllFileAllowed();
-  const { data: isUploadEnabled } = useIsUploadEnabled();
-  // const { data: acceptedUploadFileType } = useAcceptedUploadFileType();
+  const { data: acceptedUploadFileType } = useAcceptedUploadFileType();
   const { data: conflictDiffModalStatus, close: closeConflictDiffModal } = useConflictDiffModal();
   const { data: conflictDiffModalStatus, close: closeConflictDiffModal } = useConflictDiffModal();
   const { data: editorSettings } = useEditorSettings();
   const { data: editorSettings } = useEditorSettings();
   const { mutate: mutateIsLatestRevision } = useIsLatestRevision();
   const { mutate: mutateIsLatestRevision } = useIsLatestRevision();
@@ -318,17 +315,6 @@ export const PageEditor = React.memo((props: Props): JSX.Element => {
 
 
   }, [codeMirrorEditor, pageId]);
   }, [codeMirrorEditor, pageId]);
 
 
-  const acceptedUploadFileType = useMemo(() => {
-    if (!isUploadEnabled) {
-      return AcceptedUploadFileType.NONE;
-    }
-    if (isUploadAllFileAllowed) {
-      return AcceptedUploadFileType.ALL;
-    }
-    return AcceptedUploadFileType.IMAGE;
-  }, [isUploadAllFileAllowed, isUploadEnabled]);
-
-
   const scrollEditorHandler = useCallback(() => {
   const scrollEditorHandler = useCallback(() => {
     if (codeMirrorEditor?.view?.scrollDOM == null || previewRef.current == null) {
     if (codeMirrorEditor?.view?.scrollDOM == null || previewRef.current == null) {
       return;
       return;

+ 20 - 2
apps/app/src/stores/editor.tsx

@@ -1,6 +1,6 @@
 import { useCallback } from 'react';
 import { useCallback } from 'react';
 
 
-import type { Nullable } from '@growi/core';
+import { AcceptedUploadFileType, type Nullable } from '@growi/core';
 import { withUtils, type SWRResponseWithUtils } from '@growi/core/dist/swr';
 import { withUtils, type SWRResponseWithUtils } from '@growi/core/dist/swr';
 import useSWR, { type SWRResponse } from 'swr';
 import useSWR, { type SWRResponse } from 'swr';
 import useSWRImmutable from 'swr/immutable';
 import useSWRImmutable from 'swr/immutable';
@@ -11,7 +11,7 @@ import type { IEditorSettings } from '~/interfaces/editor-settings';
 import type { SlackChannels } from '~/interfaces/user-trigger-notification';
 import type { SlackChannels } from '~/interfaces/user-trigger-notification';
 
 
 import {
 import {
-  useCurrentUser, useDefaultIndentSize, useIsGuestUser, useIsReadOnlyUser,
+  useCurrentUser, useDefaultIndentSize, useIsGuestUser, useIsReadOnlyUser, useIsUploadAllFileAllowed, useIsUploadEnabled,
 } from './context';
 } from './context';
 // import { localStorageMiddleware } from './middlewares/sync-to-storage';
 // import { localStorageMiddleware } from './middlewares/sync-to-storage';
 import { useSWRxTagsInfo } from './page';
 import { useSWRxTagsInfo } from './page';
@@ -76,6 +76,24 @@ export const useCurrentIndentSize = (): SWRResponse<number, Error> => {
   );
   );
 };
 };
 
 
+export const useAcceptedUploadFileType = (): SWRResponse<AcceptedUploadFileType, Error> => {
+  const { data: isUploadEnabled } = useIsUploadEnabled();
+  const { data: isUploadAllFileAllowed } = useIsUploadAllFileAllowed();
+
+  return useSWRImmutable(
+    ['acceptedUploadFileType', isUploadEnabled, isUploadAllFileAllowed],
+    ([, isUploadEnabled, isUploadAllFileAllowed]) => {
+      if (!isUploadEnabled) {
+        return AcceptedUploadFileType.NONE;
+      }
+      if (isUploadAllFileAllowed) {
+        return AcceptedUploadFileType.ALL;
+      }
+      return AcceptedUploadFileType.IMAGE;
+    },
+  );
+};
+
 /*
 /*
 * Slack Notification
 * Slack Notification
 */
 */

+ 0 - 0
packages/editor/src/consts/accepted-upload-file-type.ts → packages/core/src/consts/accepted-upload-file-type.ts


+ 1 - 0
packages/core/src/consts/index.ts

@@ -1 +1,2 @@
+export * from './accepted-upload-file-type';
 export * from './growi-plugin';
 export * from './growi-plugin';

+ 2 - 1
packages/editor/src/components/CodeMirrorEditor/CodeMirrorEditor.tsx

@@ -5,9 +5,10 @@ import {
 import { indentUnit } from '@codemirror/language';
 import { indentUnit } from '@codemirror/language';
 import { Prec, Extension } from '@codemirror/state';
 import { Prec, Extension } from '@codemirror/state';
 import { EditorView } from '@codemirror/view';
 import { EditorView } from '@codemirror/view';
+import { AcceptedUploadFileType } from '@growi/core';
 import type { ReactCodeMirrorProps } from '@uiw/react-codemirror';
 import type { ReactCodeMirrorProps } from '@uiw/react-codemirror';
 
 
-import { GlobalCodeMirrorEditorKey, AcceptedUploadFileType } from '../../consts';
+import { GlobalCodeMirrorEditorKey } from '../../consts';
 import {
 import {
   useFileDropzone, FileDropzoneOverlay, getEditorTheme, type EditorTheme, getKeyMap, type KeyMapMode,
   useFileDropzone, FileDropzoneOverlay, getEditorTheme, type EditorTheme, getKeyMap, type KeyMapMode,
 } from '../../services';
 } from '../../services';

+ 1 - 2
packages/editor/src/components/CodeMirrorEditor/Toolbar/AttachmentsButton.tsx

@@ -1,9 +1,8 @@
+import { AcceptedUploadFileType } from '@growi/core';
 import {
 import {
   DropdownItem,
   DropdownItem,
 } from 'reactstrap';
 } from 'reactstrap';
 
 
-import { AcceptedUploadFileType } from '../../../consts/accepted-upload-file-type';
-
 type Props = {
 type Props = {
   onFileOpen: () => void,
   onFileOpen: () => void,
   acceptedUploadFileType: AcceptedUploadFileType,
   acceptedUploadFileType: AcceptedUploadFileType,

+ 1 - 1
packages/editor/src/components/CodeMirrorEditor/Toolbar/AttachmentsDropup.tsx

@@ -1,3 +1,4 @@
+import { AcceptedUploadFileType } from '@growi/core';
 import {
 import {
   UncontrolledDropdown,
   UncontrolledDropdown,
   DropdownToggle,
   DropdownToggle,
@@ -6,7 +7,6 @@ import {
 } from 'reactstrap';
 } from 'reactstrap';
 
 
 import type { GlobalCodeMirrorEditorKey } from '../../../consts';
 import type { GlobalCodeMirrorEditorKey } from '../../../consts';
-import { AcceptedUploadFileType } from '../../../consts/accepted-upload-file-type';
 
 
 import { AttachmentsButton } from './AttachmentsButton';
 import { AttachmentsButton } from './AttachmentsButton';
 import { LinkEditButton } from './LinkEditButton';
 import { LinkEditButton } from './LinkEditButton';

+ 4 - 2
packages/editor/src/components/CodeMirrorEditor/Toolbar/Toolbar.tsx

@@ -1,6 +1,8 @@
 import { memo } from 'react';
 import { memo } from 'react';
 
 
-import type { GlobalCodeMirrorEditorKey, AcceptedUploadFileType } from '../../../consts';
+import { AcceptedUploadFileType } from '@growi/core';
+
+import type { GlobalCodeMirrorEditorKey } from '../../../consts';
 
 
 import { AttachmentsDropup } from './AttachmentsDropup';
 import { AttachmentsDropup } from './AttachmentsDropup';
 import { DiagramButton } from './DiagramButton';
 import { DiagramButton } from './DiagramButton';
@@ -14,7 +16,7 @@ import styles from './Toolbar.module.scss';
 type Props = {
 type Props = {
   editorKey: string | GlobalCodeMirrorEditorKey,
   editorKey: string | GlobalCodeMirrorEditorKey,
   onFileOpen: () => void,
   onFileOpen: () => void,
-  acceptedUploadFileType: AcceptedUploadFileType
+  acceptedUploadFileType: AcceptedUploadFileType,
 }
 }
 
 
 export const Toolbar = memo((props: Props): JSX.Element => {
 export const Toolbar = memo((props: Props): JSX.Element => {

+ 2 - 1
packages/editor/src/components/CodeMirrorEditorComment.tsx

@@ -2,8 +2,9 @@ import { useEffect } from 'react';
 
 
 import type { Extension } from '@codemirror/state';
 import type { Extension } from '@codemirror/state';
 import { keymap, scrollPastEnd } from '@codemirror/view';
 import { keymap, scrollPastEnd } from '@codemirror/view';
+import { AcceptedUploadFileType } from '@growi/core';
 
 
-import { GlobalCodeMirrorEditorKey, AcceptedUploadFileType } from '../consts';
+import { GlobalCodeMirrorEditorKey } from '../consts';
 import { useCodeMirrorEditorIsolated } from '../stores';
 import { useCodeMirrorEditorIsolated } from '../stores';
 
 
 import { CodeMirrorEditor } from '.';
 import { CodeMirrorEditor } from '.';

+ 0 - 1
packages/editor/src/consts/index.ts

@@ -1,3 +1,2 @@
 export * from './global-code-mirror-editor-key';
 export * from './global-code-mirror-editor-key';
 export * from './ydoc-awareness-user-color';
 export * from './ydoc-awareness-user-color';
-export * from './accepted-upload-file-type';

+ 1 - 1
packages/editor/src/services/file-dropzone/use-file-dropzone/use-file-dropzone.ts

@@ -1,9 +1,9 @@
 import { useCallback, useState } from 'react';
 import { useCallback, useState } from 'react';
 
 
+import { AcceptedUploadFileType, getMimeType } from '@growi/core';
 import { useDropzone, Accept } from 'react-dropzone';
 import { useDropzone, Accept } from 'react-dropzone';
 import type { DropzoneState } from 'react-dropzone';
 import type { DropzoneState } from 'react-dropzone';
 
 
-import { AcceptedUploadFileType, getMimeType } from '../../../consts';
 
 
 type FileDropzoneState = DropzoneState & {
 type FileDropzoneState = DropzoneState & {
   isUploading: boolean,
   isUploading: boolean,