ソースを参照

create use is able to show

ryoji-s 2 年 前
コミット
0804a5c672
1 ファイル変更27 行追加13 行削除
  1. 27 13
      apps/app/src/stores/ui.tsx

+ 27 - 13
apps/app/src/stores/ui.tsx

@@ -20,12 +20,12 @@ import type { ISidebarConfig } from '~/interfaces/sidebar-config';
 import { SidebarContentsType } from '~/interfaces/ui';
 import type { UpdateDescCountData } from '~/interfaces/websocket';
 import {
-  useIsNotFound, useCurrentPagePath, useIsTrashPage, useCurrentPageId,
+  useIsNotFound, useCurrentPagePath, useIsTrashPage, useCurrentPageId, useIsEditablePage,
 } from '~/stores/page';
 import loggerFactory from '~/utils/logger';
 
 import {
-  useIsEditable, useIsReadOnlyUser,
+  useIsReadOnlyUser, useIsExecutePageCreation,
   useIsSharedUser, useIsIdenticalPath, useCurrentUser, useShareLinkId,
 } from './context';
 import { useStaticSWR } from './use-static-swr';
@@ -131,16 +131,16 @@ type EditorModeUtils = {
 }
 
 export const useEditorMode = (): SWRResponseWithUtils<EditorModeUtils, EditorMode> => {
-  const { data: _isEditable } = useIsEditable();
+  const { data: _isEditablePage } = useIsEditablePage();
 
   const editorModeByHash = determineEditorModeByHash();
 
-  const isLoading = _isEditable === undefined;
-  const isEditable = !isLoading && _isEditable;
-  const initialData = isEditable ? editorModeByHash : EditorMode.View;
+  const isLoading = _isEditablePage === undefined;
+  const isEditablePage = !isLoading && _isEditablePage;
+  const initialData = isEditablePage ? editorModeByHash : EditorMode.View;
 
   const swrResponse = useSWRImmutable(
-    isLoading ? null : ['editorMode', isEditable],
+    isLoading ? null : ['editorMode', isEditablePage],
     null,
     { fallbackData: initialData },
   );
@@ -148,12 +148,12 @@ export const useEditorMode = (): SWRResponseWithUtils<EditorModeUtils, EditorMod
   // construct overriding mutate method
   const mutateOriginal = swrResponse.mutate;
   const mutate = useCallback((editorMode: EditorMode, shouldRevalidate?: boolean) => {
-    if (!isEditable) {
+    if (!isEditablePage) {
       return Promise.resolve(EditorMode.View); // fixed if not editable
     }
     updateHashByEditorMode(editorMode);
     return mutateOriginal(editorMode, shouldRevalidate);
-  }, [isEditable, mutateOriginal]);
+  }, [isEditablePage, mutateOriginal]);
 
   const getClassNames = useCallback(() => {
     return getClassNamesByEditorMode(swrResponse.data);
@@ -451,14 +451,14 @@ export const useIsAbleToShowTagLabel = (): SWRResponse<boolean, Error> => {
 
 export const useIsAbleToChangeEditorMode = (): SWRResponse<boolean, Error> => {
   const key = 'isAbleToChangeEditorMode';
-  const { data: isEditable } = useIsEditable();
+  const { data: isEditablePage } = useIsEditablePage();
   const { data: isSharedUser } = useIsSharedUser();
 
-  const includesUndefined = [isEditable, isSharedUser].some(v => v === undefined);
+  const includesUndefined = [isEditablePage, isSharedUser].some(v => v === undefined);
 
   return useSWRImmutable(
-    includesUndefined ? null : [key, isEditable, isSharedUser],
-    () => !!isEditable && !isSharedUser,
+    includesUndefined ? null : [key, isEditablePage, isSharedUser],
+    () => !!isEditablePage && !isSharedUser,
   );
 };
 
@@ -477,3 +477,17 @@ export const useIsAbleToShowPageAuthors = (): SWRResponse<boolean, Error> => {
     () => isPageExist && !isUsersTopPagePath,
   );
 };
+
+export const useIsAbleToShowCreateButton = (): SWRResponse<boolean, Error> => {
+  const key = 'isAbleToShowCreateButton';
+  const { data: isEditablePage } = useIsEditablePage();
+  const { data: isExecutePageCreation } = useIsExecutePageCreation();
+  const { data: isSharedUser } = useIsSharedUser();
+
+  const includesUndefined = [isEditablePage, isExecutePageCreation, isSharedUser].some(v => v === undefined);
+
+  return useSWRImmutable(
+    includesUndefined ? null : [key, isEditablePage, isExecutePageCreation, isSharedUser],
+    () => !isEditablePage && !!isExecutePageCreation && !isSharedUser,
+  );
+};