context.tsx 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. import { pagePathUtils } from '@growi/core';
  2. import { Key, SWRResponse } from 'swr';
  3. import useSWRImmutable from 'swr/immutable';
  4. import { SupportedActionType } from '~/interfaces/activity';
  5. import { GrowiRendererConfig } from '~/interfaces/services/renderer';
  6. import { TargetAndAncestors } from '../interfaces/page-listing-results';
  7. import { IUser } from '../interfaces/user';
  8. import { useStaticSWR } from './use-static-swr';
  9. type Nullable<T> = T | null;
  10. export const useCsrfToken = (initialData?: string): SWRResponse<string, Error> => {
  11. return useStaticSWR<string, Error>('csrfToken', initialData);
  12. };
  13. export const useSiteUrl = (initialData?: string): SWRResponse<string, Error> => {
  14. return useStaticSWR<string, Error>('siteUrl', initialData);
  15. };
  16. export const useCurrentUser = (initialData?: Nullable<IUser>): SWRResponse<Nullable<IUser>, Error> => {
  17. return useStaticSWR<Nullable<IUser>, Error>('currentUser', initialData);
  18. };
  19. export const useRevisionId = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  20. return useStaticSWR<Nullable<any>, Error>('revisionId', initialData);
  21. };
  22. export const useCurrentPagePath = (initialData?: Nullable<string>): SWRResponse<Nullable<string>, Error> => {
  23. return useStaticSWR<Nullable<string>, Error>('currentPagePath', initialData);
  24. };
  25. export const useCurrentPageId = (initialData?: Nullable<string>): SWRResponse<Nullable<string>, Error> => {
  26. return useStaticSWR<Nullable<string>, Error>('currentPageId', initialData);
  27. };
  28. export const useEmptyPageId = (initialData?: Nullable<string>): SWRResponse<Nullable<string>, Error> => {
  29. return useStaticSWR<Nullable<string>, Error>('emptyPageId', initialData);
  30. };
  31. export const useRevisionCreatedAt = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  32. return useStaticSWR<Nullable<any>, Error>('revisionCreatedAt', initialData);
  33. };
  34. export const useCurrentCreatedAt = (initialData?: Nullable<Date>): SWRResponse<Nullable<Date>, Error> => {
  35. return useStaticSWR<Nullable<Date>, Error>('createdAt', initialData);
  36. };
  37. export const useCurrentUpdatedAt = (initialData?: Nullable<Date>): SWRResponse<Nullable<Date>, Error> => {
  38. return useStaticSWR<Nullable<Date>, Error>('updatedAt', initialData);
  39. };
  40. export const useDeletedAt = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  41. return useStaticSWR<Nullable<any>, Error>('deletedAt', initialData);
  42. };
  43. export const useIsIdenticalPath = (initialData?: boolean): SWRResponse<boolean, Error> => {
  44. return useStaticSWR<boolean, Error>('isIdenticalPath', initialData, { fallbackData: false });
  45. };
  46. export const useIsUserPage = (initialData?: boolean): SWRResponse<boolean, Error> => {
  47. return useStaticSWR<boolean, Error>('isUserPage', initialData, { fallbackData: false });
  48. };
  49. export const useIsTrashPage = (initialData?: boolean): SWRResponse<boolean, Error> => {
  50. return useStaticSWR<boolean, Error>('isTrashPage', initialData, { fallbackData: false });
  51. };
  52. export const useIsNotCreatable = (initialData?: boolean): SWRResponse<boolean, Error> => {
  53. return useStaticSWR<boolean, Error>('isNotCreatable', initialData, { fallbackData: false });
  54. };
  55. export const useIsForbidden = (initialData?: boolean): SWRResponse<boolean, Error> => {
  56. return useStaticSWR<boolean, Error>('isForbidden', initialData, { fallbackData: false });
  57. };
  58. export const usePageUser = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  59. return useStaticSWR<Nullable<any>, Error>('pageUser', initialData);
  60. };
  61. export const useHasChildren = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  62. return useStaticSWR<Nullable<any>, Error>('hasChildren', initialData);
  63. };
  64. export const useTemplateTagData = (initialData?: Nullable<string>): SWRResponse<Nullable<string>, Error> => {
  65. return useStaticSWR<Nullable<string>, Error>('templateTagData', initialData);
  66. };
  67. export const useShareLinksNumber = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  68. return useStaticSWR<Nullable<any>, Error>('shareLinksNumber', initialData);
  69. };
  70. export const useShareLinkId = (initialData?: Nullable<string>): SWRResponse<Nullable<string>, Error> => {
  71. return useStaticSWR<Nullable<string>, Error>('shareLinkId', initialData);
  72. };
  73. export const useRevisionIdHackmdSynced = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  74. return useStaticSWR<Nullable<any>, Error>('revisionIdHackmdSynced', initialData);
  75. };
  76. export const useLastUpdateUsername = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  77. return useStaticSWR<Nullable<any>, Error>('lastUpdateUsername', initialData);
  78. };
  79. export const useDeleteUsername = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  80. return useStaticSWR<Nullable<any>, Error>('deleteUsername', initialData);
  81. };
  82. export const usePageIdOnHackmd = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  83. return useStaticSWR<Nullable<any>, Error>('pageIdOnHackmd', initialData);
  84. };
  85. export const useHasDraftOnHackmd = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  86. return useStaticSWR<Nullable<any>, Error>('hasDraftOnHackmd', initialData);
  87. };
  88. export const useCreator = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  89. return useStaticSWR<Nullable<any>, Error>('creator', initialData);
  90. };
  91. export const useRevisionAuthor = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  92. return useStaticSWR<Nullable<any>, Error>('revisionAuthor', initialData);
  93. };
  94. export const useIsSearchPage = (initialData?: Nullable<any>) : SWRResponse<Nullable<any>, Error> => {
  95. return useStaticSWR<Nullable<any>, Error>('isSearchPage', initialData);
  96. };
  97. export const useTargetAndAncestors = (initialData?: TargetAndAncestors): SWRResponse<TargetAndAncestors, Error> => {
  98. return useStaticSWR<TargetAndAncestors, Error>('targetAndAncestors', initialData);
  99. };
  100. export const useNotFoundTargetPathOrId = (initialData?: string): SWRResponse<string, Error> => {
  101. return useStaticSWR<string, Error>('notFoundTargetPathOrId', initialData);
  102. };
  103. export const useIsAclEnabled = (initialData?: boolean) : SWRResponse<boolean, Error> => {
  104. return useStaticSWR<boolean, Error>('isAclEnabled', initialData);
  105. };
  106. export const useIsSearchServiceConfigured = (initialData?: boolean) : SWRResponse<boolean, Error> => {
  107. return useStaticSWR<boolean, Error>('isSearchServiceConfigured', initialData);
  108. };
  109. export const useIsSearchServiceReachable = (initialData?: boolean) : SWRResponse<boolean, Error> => {
  110. return useStaticSWR<boolean, Error>('isSearchServiceReachable', initialData);
  111. };
  112. export const useIsEnabledAttachTitleHeader = (initialData?: boolean) : SWRResponse<boolean, Error> => {
  113. return useStaticSWR<boolean, Error>('isEnabledAttachTitleHeader', initialData);
  114. };
  115. export const useIsEmptyPage = (initialData?: boolean) : SWRResponse<boolean, Error> => {
  116. return useStaticSWR<boolean, Error>('isEmptyPage', initialData);
  117. };
  118. export const useHasParent = (initialData?: boolean) : SWRResponse<boolean, Error> => {
  119. return useStaticSWR<boolean, Error>('hasParent', initialData);
  120. };
  121. export const useIsIndentSizeForced = (initialData?: boolean) : SWRResponse<boolean, Error> => {
  122. return useStaticSWR<boolean, Error>('isIndentSizeForced', initialData);
  123. };
  124. export const useDefaultIndentSize = (initialData?: number) : SWRResponse<number, Error> => {
  125. return useStaticSWR<number, Error>('defaultIndentSize', initialData, { fallbackData: 4 });
  126. };
  127. export const useAuditLogEnabled = (initialData?: boolean): SWRResponse<boolean, Error> => {
  128. return useStaticSWR<boolean, Error>('auditLogEnabled', initialData, { fallbackData: false });
  129. };
  130. export const useActivityExpirationSeconds = (initialData?: number) : SWRResponse<number, Error> => {
  131. return useStaticSWR<number, Error>('activityExpirationSeconds', initialData);
  132. };
  133. export const useAuditLogAvailableActions = (initialData?: Array<SupportedActionType>) : SWRResponse<Array<SupportedActionType>, Error> => {
  134. return useStaticSWR<Array<SupportedActionType>, Error>('auditLogAvailableActions', initialData);
  135. };
  136. export const useGrowiVersion = (initialData?: string): SWRResponse<string, any> => {
  137. return useStaticSWR('growiVersion', initialData);
  138. };
  139. export const useGrowiRendererConfig = (initialData?: GrowiRendererConfig): SWRResponse<GrowiRendererConfig, any> => {
  140. return useStaticSWR('growiRendererConfig', initialData);
  141. };
  142. export const useIsBlinkedHeaderAtBoot = (): SWRResponse<boolean, Error> => {
  143. return useStaticSWR('isBlinkedAtBoot', undefined, { fallbackData: false });
  144. };
  145. /** **********************************************************
  146. * Computed contexts
  147. *********************************************************** */
  148. export const useIsGuestUser = (): SWRResponse<boolean, Error> => {
  149. const { data: currentUser } = useCurrentUser();
  150. return useSWRImmutable(
  151. ['isGuestUser', currentUser],
  152. (key: Key, currentUser: IUser) => currentUser == null,
  153. );
  154. };
  155. export const useIsEditable = (): SWRResponse<boolean, Error> => {
  156. const { data: isGuestUser } = useIsGuestUser();
  157. const { data: isNotCreatable } = useIsNotCreatable();
  158. const { data: isTrashPage } = useIsTrashPage();
  159. return useSWRImmutable(
  160. ['isEditable', isGuestUser, isTrashPage, isNotCreatable],
  161. (key: Key, isGuestUser: boolean, isTrashPage: boolean, isNotCreatable: boolean) => {
  162. return (!isNotCreatable && !isTrashPage && !isGuestUser);
  163. },
  164. );
  165. };
  166. export const useIsSharedUser = (): SWRResponse<boolean, Error> => {
  167. const { data: isGuestUser } = useIsGuestUser();
  168. const pathname = window.location.pathname;
  169. return useSWRImmutable(
  170. ['isSharedUser', isGuestUser, pathname],
  171. (key: Key, isGuestUser: boolean, pathname: string) => {
  172. return isGuestUser && pagePathUtils.isSharedPage(pathname);
  173. },
  174. );
  175. };