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

refactor mutate method to throw error

Yuken Tezuka 3 лет назад
Родитель
Сommit
8989c4db41
2 измененных файлов с 58 добавлено и 62 удалено
  1. 50 50
      packages/app/src/stores/context.tsx
  2. 8 12
      packages/app/src/stores/use-context-swr.tsx

+ 50 - 50
packages/app/src/stores/context.tsx

@@ -13,207 +13,207 @@ import InterceptorManager from '~/services/interceptor-manager';
 
 import { TargetAndAncestors } from '../interfaces/page-listing-results';
 
-import { useContextSWR, ContextSWRResponse } from './use-context-swr';
+import { useContextSWR } from './use-context-swr';
 import { useStaticSWR } from './use-static-swr';
 
 
 type Nullable<T> = T | null;
 
 
-export const useInterceptorManager = (): ContextSWRResponse<InterceptorManager, Error> => {
+export const useInterceptorManager = (): SWRResponse<InterceptorManager, Error> => {
   return useContextSWR<InterceptorManager, Error>('interceptorManager', undefined, { fallbackData: new InterceptorManager() });
 };
 
-export const useCsrfToken = (initialData?: string): ContextSWRResponse<string, Error> => {
+export const useCsrfToken = (initialData?: string): SWRResponse<string, Error> => {
   return useContextSWR<string, Error>('csrfToken', initialData);
 };
 
-export const useAppTitle = (initialData?: string): ContextSWRResponse<string, Error> => {
+export const useAppTitle = (initialData?: string): SWRResponse<string, Error> => {
   return useContextSWR('appTitle', initialData);
 };
 
-export const useSiteUrl = (initialData?: string): ContextSWRResponse<string, Error> => {
+export const useSiteUrl = (initialData?: string): SWRResponse<string, Error> => {
   return useContextSWR<string, Error>('siteUrl', initialData);
 };
 
-export const useConfidential = (initialData?: string): ContextSWRResponse<string, Error> => {
+export const useConfidential = (initialData?: string): SWRResponse<string, Error> => {
   return useContextSWR('confidential', initialData);
 };
 
-export const useGrowiTheme = (initialData?: GrowiThemes): ContextSWRResponse<GrowiThemes, Error> => {
+export const useGrowiTheme = (initialData?: GrowiThemes): SWRResponse<GrowiThemes, Error> => {
   return useContextSWR('theme', initialData);
 };
 
-export const useCurrentUser = (initialData?: Nullable<IUser>): ContextSWRResponse<Nullable<IUser>, Error> => {
+export const useCurrentUser = (initialData?: Nullable<IUser>): SWRResponse<Nullable<IUser>, Error> => {
   return useContextSWR<Nullable<IUser>, Error>('currentUser', initialData);
 };
 
-export const useRevisionId = (initialData?: Nullable<any>): ContextSWRResponse<Nullable<any>, Error> => {
+export const useRevisionId = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
   return useContextSWR<Nullable<any>, Error>('revisionId', initialData);
 };
 
-export const useCurrentPagePath = (initialData?: Nullable<string>): ContextSWRResponse<Nullable<string>, Error> => {
+export const useCurrentPagePath = (initialData?: Nullable<string>): SWRResponse<Nullable<string>, Error> => {
   return useContextSWR<Nullable<string>, Error>('currentPagePath', initialData);
 };
 
-export const useCurrentPathname = (initialData?: string): ContextSWRResponse<string, Error> => {
+export const useCurrentPathname = (initialData?: string): SWRResponse<string, Error> => {
   return useContextSWR('currentPathname', initialData);
 };
 
-export const useCurrentPageId = (initialData?: Nullable<string>): ContextSWRResponse<Nullable<string>, Error> => {
+export const useCurrentPageId = (initialData?: Nullable<string>): SWRResponse<Nullable<string>, Error> => {
   return useContextSWR<Nullable<string>, Error>('currentPageId', initialData);
 };
 
-export const useIsIdenticalPath = (initialData?: boolean): ContextSWRResponse<boolean, Error> => {
+export const useIsIdenticalPath = (initialData?: boolean): SWRResponse<boolean, Error> => {
   return useContextSWR<boolean, Error>('isIdenticalPath', initialData, { fallbackData: false });
 };
 
-export const useIsForbidden = (initialData?: boolean): ContextSWRResponse<boolean, Error> => {
+export const useIsForbidden = (initialData?: boolean): SWRResponse<boolean, Error> => {
   return useContextSWR<boolean, Error>('isForbidden', initialData, { fallbackData: false });
 };
 
-export const useIsNotFound = (initialData?: boolean): ContextSWRResponse<boolean, Error> => {
+export const useIsNotFound = (initialData?: boolean): SWRResponse<boolean, Error> => {
   return useContextSWR<boolean, Error>('isNotFound', initialData, { fallbackData: false });
 };
 
-export const useTemplateTagData = (initialData?: Nullable<string>): ContextSWRResponse<Nullable<string>, Error> => {
+export const useTemplateTagData = (initialData?: Nullable<string>): SWRResponse<Nullable<string>, Error> => {
   return useContextSWR<Nullable<string>, Error>('templateTagData', initialData);
 };
 
-export const useIsSharedUser = (initialData?: boolean): ContextSWRResponse<boolean, Error> => {
+export const useIsSharedUser = (initialData?: boolean): SWRResponse<boolean, Error> => {
   return useContextSWR<boolean, Error>('isSharedUser', initialData);
 };
 
-export const useShareLinkId = (initialData?: Nullable<string>): ContextSWRResponse<Nullable<string>, Error> => {
+export const useShareLinkId = (initialData?: Nullable<string>): SWRResponse<Nullable<string>, Error> => {
   return useContextSWR<Nullable<string>, Error>('shareLinkId', initialData);
 };
 
-export const useDisableLinkSharing = (initialData?: Nullable<boolean>): ContextSWRResponse<Nullable<boolean>, Error> => {
+export const useDisableLinkSharing = (initialData?: Nullable<boolean>): SWRResponse<Nullable<boolean>, Error> => {
   return useContextSWR<Nullable<boolean>, Error>('disableLinkSharing', initialData);
 };
 
-export const useRegistrationWhiteList = (initialData?: Nullable<string[]>): ContextSWRResponse<Nullable<string[]>, Error> => {
+export const useRegistrationWhiteList = (initialData?: Nullable<string[]>): SWRResponse<Nullable<string[]>, Error> => {
   return useContextSWR<Nullable<string[]>, Error>('registrationWhiteList', initialData);
 };
 
-export const useDrawioUri = (initialData?: string): ContextSWRResponse<string, Error> => {
+export const useDrawioUri = (initialData?: string): SWRResponse<string, Error> => {
   return useContextSWR('drawioUri', initialData, { fallbackData: 'https://embed.diagrams.net/' });
 };
 
-export const useHackmdUri = (initialData?: Nullable<string>): ContextSWRResponse<Nullable<string>, Error> => {
+export const useHackmdUri = (initialData?: Nullable<string>): SWRResponse<Nullable<string>, Error> => {
   return useContextSWR<Nullable<string>, Error>('hackmdUri', initialData);
 };
 
-export const useIsSearchPage = (initialData?: Nullable<any>) : ContextSWRResponse<Nullable<any>, Error> => {
+export const useIsSearchPage = (initialData?: Nullable<any>) : SWRResponse<Nullable<any>, Error> => {
   return useContextSWR<Nullable<any>, Error>('isSearchPage', initialData);
 };
 
-export const useTargetAndAncestors = (initialData?: TargetAndAncestors): ContextSWRResponse<TargetAndAncestors, Error> => {
+export const useTargetAndAncestors = (initialData?: TargetAndAncestors): SWRResponse<TargetAndAncestors, Error> => {
   return useContextSWR<TargetAndAncestors, Error>('targetAndAncestors', initialData);
 };
 
-export const useIsAclEnabled = (initialData?: boolean) : ContextSWRResponse<boolean, Error> => {
+export const useIsAclEnabled = (initialData?: boolean) : SWRResponse<boolean, Error> => {
   return useContextSWR<boolean, Error>('isAclEnabled', initialData);
 };
 
-export const useIsSearchServiceConfigured = (initialData?: boolean) : ContextSWRResponse<boolean, Error> => {
+export const useIsSearchServiceConfigured = (initialData?: boolean) : SWRResponse<boolean, Error> => {
   return useContextSWR<boolean, Error>('isSearchServiceConfigured', initialData);
 };
 
-export const useIsSearchServiceReachable = (initialData?: boolean) : ContextSWRResponse<boolean, Error> => {
+export const useIsSearchServiceReachable = (initialData?: boolean) : SWRResponse<boolean, Error> => {
   return useContextSWR<boolean, Error>('isSearchServiceReachable', initialData);
 };
 
-export const useIsMailerSetup = (initialData?: boolean): ContextSWRResponse<boolean, any> => {
+export const useIsMailerSetup = (initialData?: boolean): SWRResponse<boolean, any> => {
   return useContextSWR('isMailerSetup', initialData);
 };
 
-export const useIsSearchScopeChildrenAsDefault = (initialData?: boolean) : ContextSWRResponse<boolean, Error> => {
+export const useIsSearchScopeChildrenAsDefault = (initialData?: boolean) : SWRResponse<boolean, Error> => {
   return useContextSWR<boolean, Error>('isSearchScopeChildrenAsDefault', initialData);
 };
 
-export const useIsSlackConfigured = (initialData?: boolean) : ContextSWRResponse<boolean, Error> => {
+export const useIsSlackConfigured = (initialData?: boolean) : SWRResponse<boolean, Error> => {
   return useContextSWR<boolean, Error>('isSlackConfigured', initialData);
 };
 
-export const useIsEnabledAttachTitleHeader = (initialData?: boolean) : ContextSWRResponse<boolean, Error> => {
+export const useIsEnabledAttachTitleHeader = (initialData?: boolean) : SWRResponse<boolean, Error> => {
   return useContextSWR<boolean, Error>('isEnabledAttachTitleHeader', initialData);
 };
 
-export const useIsIndentSizeForced = (initialData?: boolean) : ContextSWRResponse<boolean, Error> => {
+export const useIsIndentSizeForced = (initialData?: boolean) : SWRResponse<boolean, Error> => {
   return useContextSWR<boolean, Error>('isIndentSizeForced', initialData, { fallbackData: false });
 };
 
-export const useDefaultIndentSize = (initialData?: number) : ContextSWRResponse<number, Error> => {
+export const useDefaultIndentSize = (initialData?: number) : SWRResponse<number, Error> => {
   return useContextSWR<number, Error>('defaultIndentSize', initialData, { fallbackData: 4 });
 };
 
-export const useAuditLogEnabled = (initialData?: boolean): ContextSWRResponse<boolean, Error> => {
+export const useAuditLogEnabled = (initialData?: boolean): SWRResponse<boolean, Error> => {
   return useContextSWR<boolean, Error>('auditLogEnabled', initialData, { fallbackData: false });
 };
 
 // TODO: initialize in [[..path]].page.tsx?
-export const useActivityExpirationSeconds = (initialData?: number) : ContextSWRResponse<number, Error> => {
+export const useActivityExpirationSeconds = (initialData?: number) : SWRResponse<number, Error> => {
   return useContextSWR<number, Error>('activityExpirationSeconds', initialData);
 };
 
-export const useAuditLogAvailableActions = (initialData?: Array<SupportedActionType>) : ContextSWRResponse<Array<SupportedActionType>, Error> => {
+export const useAuditLogAvailableActions = (initialData?: Array<SupportedActionType>) : SWRResponse<Array<SupportedActionType>, Error> => {
   return useContextSWR<Array<SupportedActionType>, Error>('auditLogAvailableActions', initialData);
 };
 
-export const useGrowiVersion = (initialData?: string): ContextSWRResponse<string, any> => {
+export const useGrowiVersion = (initialData?: string): SWRResponse<string, any> => {
   return useContextSWR('growiVersion', initialData);
 };
 
-export const useIsEnabledStaleNotification = (initialData?: boolean): ContextSWRResponse<boolean, any> => {
+export const useIsEnabledStaleNotification = (initialData?: boolean): SWRResponse<boolean, any> => {
   return useContextSWR('isEnabledStaleNotification', initialData);
 };
 
-export const useIsLatestRevision = (initialData?: boolean): ContextSWRResponse<boolean, any> => {
+export const useIsLatestRevision = (initialData?: boolean): SWRResponse<boolean, any> => {
   return useContextSWR('isLatestRevision', initialData);
 };
 
-export const useEditorConfig = (initialData?: EditorConfig): ContextSWRResponse<EditorConfig, Error> => {
+export const useEditorConfig = (initialData?: EditorConfig): SWRResponse<EditorConfig, Error> => {
   return useContextSWR<EditorConfig, Error>('editorConfig', initialData);
 };
 
-export const useRendererConfig = (initialData?: RendererConfig): ContextSWRResponse<RendererConfig, any> => {
+export const useRendererConfig = (initialData?: RendererConfig): SWRResponse<RendererConfig, any> => {
   return useContextSWR('growiRendererConfig', initialData);
 };
 
-export const useIsAllReplyShown = (initialData?: boolean): ContextSWRResponse<boolean, Error> => {
+export const useIsAllReplyShown = (initialData?: boolean): SWRResponse<boolean, Error> => {
   return useContextSWR('isAllReplyShown', initialData);
 };
 
-export const useIsBlinkedHeaderAtBoot = (initialData?: boolean): ContextSWRResponse<boolean, Error> => {
+export const useIsBlinkedHeaderAtBoot = (initialData?: boolean): SWRResponse<boolean, Error> => {
   return useContextSWR('isBlinkedAtBoot', initialData, { fallbackData: false });
 };
 
-export const useEditingMarkdown = (initialData?: string): ContextSWRResponse<string, Error> => {
+export const useEditingMarkdown = (initialData?: string): SWRResponse<string, Error> => {
   return useContextSWR('currentMarkdown', initialData);
 };
 
-export const useIsUploadableImage = (initialData?: boolean): ContextSWRResponse<boolean, Error> => {
+export const useIsUploadableImage = (initialData?: boolean): SWRResponse<boolean, Error> => {
   return useContextSWR('isUploadableImage', initialData);
 };
 
-export const useIsUploadableFile = (initialData?: boolean): ContextSWRResponse<boolean, Error> => {
+export const useIsUploadableFile = (initialData?: boolean): SWRResponse<boolean, Error> => {
   return useContextSWR('isUploadableFile', initialData);
 };
 
-export const useShowPageLimitationL = (initialData?: number): ContextSWRResponse<number, Error> => {
+export const useShowPageLimitationL = (initialData?: number): SWRResponse<number, Error> => {
   return useContextSWR('showPageLimitationL', initialData);
 };
 
-export const useShowPageLimitationXL = (initialData?: number): ContextSWRResponse<number, Error> => {
+export const useShowPageLimitationXL = (initialData?: number): SWRResponse<number, Error> => {
   return useContextSWR('showPageLimitationXL', initialData);
 };
 
-export const useCustomizeTitle = (initialData?: string): ContextSWRResponse<string, Error> => {
+export const useCustomizeTitle = (initialData?: string): SWRResponse<string, Error> => {
   return useContextSWR('CustomizeTitle', initialData);
 };
 
-export const useCustomizedLogoSrc = (initialData?: string): ContextSWRResponse<string, Error> => {
+export const useCustomizedLogoSrc = (initialData?: string): SWRResponse<string, Error> => {
   return useContextSWR('customizedLogoSrc', initialData);
 };
 

+ 8 - 12
packages/app/src/stores/use-context-swr.tsx

@@ -4,26 +4,22 @@ import {
 
 import { useStaticSWR } from './use-static-swr';
 
-// omit mutate from swr response because context shouldn't be changed
-export type ContextSWRResponse<Data = any, Error = any> = Omit<SWRResponse<Data, Error>, 'mutate'>
-
-export function useContextSWR<Data, Error>(key: Key): ContextSWRResponse<Data, Error>;
-export function useContextSWR<Data, Error>(key: Key, data: Data | undefined): ContextSWRResponse<Data, Error>;
+export function useContextSWR<Data, Error>(key: Key): SWRResponse<Data, Error>;
+export function useContextSWR<Data, Error>(key: Key, data: Data | undefined): SWRResponse<Data, Error>;
 export function useContextSWR<Data, Error>(key: Key, data: Data | undefined,
-  configuration: SWRConfiguration<Data, Error> | undefined): ContextSWRResponse<Data, Error>;
+  configuration: SWRConfiguration<Data, Error> | undefined): SWRResponse<Data, Error>;
 
 export function useContextSWR<Data, Error>(
     ...args: readonly [Key]
     | readonly [Key, Data | undefined]
     | readonly [Key, Data | undefined, SWRConfiguration<Data, Error> | undefined]
-): ContextSWRResponse<Data, Error> {
+): SWRResponse<Data, Error> {
   const [key, data, configuration] = args;
 
   const swrResponse = useStaticSWR<Data, Error>(key, data, configuration);
-  // const { data: responseData, error, isValidating } = swrResponse;
-
-  // @ts-expect-error: can't use delete only optional property in ts
-  delete swrResponse.mutate;
 
-  return swrResponse;
+  return {
+    ...swrResponse,
+    mutate: () => { throw Error('mutate can not be used in context') },
+  };
 }