context.tsx 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. import { Key, SWRResponse } from 'swr';
  2. import useSWRImmutable from 'swr/immutable';
  3. import { pagePathUtils } from '@growi/core';
  4. import { IUser } from '../interfaces/user';
  5. import { useStaticSWR } from './use-static-swr';
  6. type Nullable<T> = T | null;
  7. export const useCurrentUser = (initialData?: IUser): SWRResponse<Nullable<IUser>, Error> => {
  8. return useStaticSWR<Nullable<IUser>, Error>('currentUser', initialData ?? null);
  9. };
  10. export const useRevisionId = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  11. return useStaticSWR<Nullable<any>, Error>('revisionId', initialData ?? null);
  12. };
  13. export const useCurrentPagePath = (initialData?: Nullable<string>): SWRResponse<Nullable<any>, Error> => {
  14. return useStaticSWR<Nullable<any>, Error>('currentPagePath', initialData ?? null);
  15. };
  16. export const usePageId = (initialData?: Nullable<string>): SWRResponse<Nullable<any>, Error> => {
  17. return useStaticSWR<Nullable<any>, Error>('pageId', initialData ?? null);
  18. };
  19. export const useRevisionCreatedAt = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  20. return useStaticSWR<Nullable<any>, Error>('revisionCreatedAt', initialData ?? null);
  21. };
  22. export const useCreatedAt = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  23. return useStaticSWR<Nullable<any>, Error>('createdAt', initialData ?? null);
  24. };
  25. export const useUpdatedAt = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  26. return useStaticSWR<Nullable<any>, Error>('updatedAt', initialData ?? null);
  27. };
  28. export const useDeletedAt = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  29. return useStaticSWR<Nullable<any>, Error>('deletedAt', initialData ?? null);
  30. };
  31. export const useIsUserPage = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  32. return useStaticSWR<Nullable<any>, Error>('isUserPage', initialData ?? null);
  33. };
  34. export const useIsTrashPage = (initialData?: Nullable<boolean>): SWRResponse<Nullable<boolean>, Error> => {
  35. return useStaticSWR<Nullable<boolean>, Error>('isTrashPage', initialData ?? null);
  36. };
  37. export const useIsDeleted = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  38. return useStaticSWR<Nullable<any>, Error>('isDeleted', initialData ?? null);
  39. };
  40. export const useIsDeletable = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  41. return useStaticSWR<Nullable<any>, Error>('isDeletable', initialData ?? null);
  42. };
  43. export const useIsNotCreatable = (initialData?: Nullable<boolean>): SWRResponse<Nullable<boolean>, Error> => {
  44. return useStaticSWR<Nullable<boolean>, Error>('isNotCreatable', initialData ?? null);
  45. };
  46. export const useIsAbleToDeleteCompletely = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  47. return useStaticSWR<Nullable<any>, Error>('isAbleToDeleteCompletely', initialData ?? null);
  48. };
  49. export const useIsPageExist = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  50. return useStaticSWR<Nullable<any>, Error>('isPageExist', initialData ?? null);
  51. };
  52. export const usePageUser = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  53. return useStaticSWR<Nullable<any>, Error>('pageUser', initialData ?? null);
  54. };
  55. export const useHasChildren = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  56. return useStaticSWR<Nullable<any>, Error>('hasChildren', initialData ?? null);
  57. };
  58. export const useTemplateTagData = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  59. return useStaticSWR<Nullable<any>, Error>('templateTagData', initialData ?? null);
  60. };
  61. export const useShareLinksNumber = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  62. return useStaticSWR<Nullable<any>, Error>('shareLinksNumber', initialData ?? null);
  63. };
  64. export const useShareLinkId = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  65. return useStaticSWR<Nullable<any>, Error>('shareLinkId', initialData ?? null);
  66. };
  67. export const useRevisionIdHackmdSynced = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  68. return useStaticSWR<Nullable<any>, Error>('revisionIdHackmdSynced', initialData ?? null);
  69. };
  70. export const useLastUpdateUsername = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  71. return useStaticSWR<Nullable<any>, Error>('lastUpdateUsername', initialData ?? null);
  72. };
  73. export const useDeleteUsername = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  74. return useStaticSWR<Nullable<any>, Error>('deleteUsername', initialData ?? null);
  75. };
  76. export const usePageIdOnHackmd = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  77. return useStaticSWR<Nullable<any>, Error>('pageIdOnHackmd', initialData ?? null);
  78. };
  79. export const useHasDraftOnHackmd = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  80. return useStaticSWR<Nullable<any>, Error>('hasDraftOnHackmd', initialData ?? null);
  81. };
  82. export const useCreator = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  83. return useStaticSWR<Nullable<any>, Error>('creator', initialData ?? null);
  84. };
  85. export const useRevisionAuthor = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  86. return useStaticSWR<Nullable<any>, Error>('revisionAuthor', initialData ?? null);
  87. };
  88. export const useSlackChannels = (initialData?: Nullable<any>): SWRResponse<Nullable<any>, Error> => {
  89. return useStaticSWR<Nullable<any>, Error>('slackChannels', initialData ?? null);
  90. };
  91. /** **********************************************************
  92. * Computed contexts
  93. *********************************************************** */
  94. export const useIsGuestUser = (): SWRResponse<boolean, Error> => {
  95. const { data: currentUser } = useCurrentUser();
  96. return useSWRImmutable(
  97. ['isGuestUser', currentUser],
  98. (key: Key, currentUser: IUser) => currentUser == null,
  99. );
  100. };
  101. export const useIsEditable = (): SWRResponse<boolean, Error> => {
  102. const { data: isGuestUser } = useIsGuestUser();
  103. const { data: isNotCreatable } = useIsNotCreatable();
  104. const { data: isTrashPage } = useIsTrashPage();
  105. return useSWRImmutable(
  106. ['isEditable', isGuestUser, isTrashPage, isNotCreatable],
  107. (key: Key, isGuestUser: boolean, isTrashPage: boolean, isNotCreatable: boolean) => {
  108. return (!isNotCreatable && !isTrashPage && !isGuestUser);
  109. },
  110. );
  111. };
  112. export const useIsSharedUser = (): SWRResponse<boolean, Error> => {
  113. const { data: isGuestUser } = useIsGuestUser();
  114. const { data: currentPagePath } = useCurrentPagePath();
  115. return useSWRImmutable(
  116. ['isSharedUser', isGuestUser, currentPagePath],
  117. (key: Key, isGuestUser: boolean, currentPagePath: string) => {
  118. return isGuestUser && pagePathUtils.isSharedPage(currentPagePath as string);
  119. },
  120. );
  121. };