import { pagePathUtils } from '@growi/core'; import { Key, SWRResponse } from 'swr'; import useSWRImmutable from 'swr/immutable'; import { TargetAndAncestors, IsNotFoundPermalink } from '../interfaces/page-listing-results'; import { IUser } from '../interfaces/user'; import { useStaticSWR } from './use-static-swr'; type Nullable = T | null; export const useCsrfToken = (initialData?: string): SWRResponse => { return useStaticSWR('csrfToken', initialData); }; export const useSiteUrl = (initialData?: string): SWRResponse => { return useStaticSWR('siteUrl', initialData); }; export const useCurrentUser = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('currentUser', initialData); }; export const useRevisionId = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('revisionId', initialData); }; export const useCurrentPagePath = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('currentPagePath', initialData); }; export const useCurrentPageId = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('currentPageId', initialData); }; export const useEmptyPageId = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('emptyPageId', initialData); }; export const useRevisionCreatedAt = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('revisionCreatedAt', initialData); }; export const useCurrentCreatedAt = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('createdAt', initialData); }; export const useCurrentUpdatedAt = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('updatedAt', initialData); }; export const useDeletedAt = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('deletedAt', initialData); }; export const useIsIdenticalPath = (initialData?: boolean): SWRResponse => { return useStaticSWR('isIdenticalPath', initialData, { fallbackData: false }); }; export const useIsUserPage = (initialData?: boolean): SWRResponse => { return useStaticSWR('isUserPage', initialData, { fallbackData: false }); }; export const useIsTrashPage = (initialData?: boolean): SWRResponse => { return useStaticSWR('isTrashPage', initialData, { fallbackData: false }); }; export const useIsDeleted = (initialData?: boolean): SWRResponse => { return useStaticSWR('isDeleted', initialData, { fallbackData: false }); }; export const useIsNotCreatable = (initialData?: boolean): SWRResponse => { return useStaticSWR('isNotCreatable', initialData, { fallbackData: false }); }; export const useIsForbidden = (initialData?: boolean): SWRResponse => { return useStaticSWR('isForbidden', initialData, { fallbackData: false }); }; export const usePageUser = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('pageUser', initialData); }; export const useHasChildren = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('hasChildren', initialData); }; export const useTemplateTagData = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('templateTagData', initialData); }; export const useShareLinksNumber = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('shareLinksNumber', initialData); }; export const useShareLinkId = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('shareLinkId', initialData); }; export const useRevisionIdHackmdSynced = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('revisionIdHackmdSynced', initialData); }; export const useLastUpdateUsername = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('lastUpdateUsername', initialData); }; export const useDeleteUsername = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('deleteUsername', initialData); }; export const usePageIdOnHackmd = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('pageIdOnHackmd', initialData); }; export const useHasDraftOnHackmd = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('hasDraftOnHackmd', initialData); }; export const useCreator = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('creator', initialData); }; export const useRevisionAuthor = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('revisionAuthor', initialData); }; export const useIsSearchPage = (initialData?: Nullable) : SWRResponse, Error> => { return useStaticSWR, Error>('isSearchPage', initialData); }; export const useTargetAndAncestors = (initialData?: TargetAndAncestors): SWRResponse => { return useStaticSWR('targetAndAncestors', initialData); }; export const useNotFoundTargetPathOrId = (initialData?: string): SWRResponse => { return useStaticSWR('notFoundTargetPathOrId', initialData); }; export const useIsNotFoundPermalink = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('isNotFoundPermalink', initialData); }; export const useIsAclEnabled = (initialData?: boolean) : SWRResponse => { return useStaticSWR('isAclEnabled', initialData); }; export const useIsSearchServiceConfigured = (initialData?: boolean) : SWRResponse => { return useStaticSWR('isSearchServiceConfigured', initialData); }; export const useIsSearchServiceReachable = (initialData?: boolean) : SWRResponse => { return useStaticSWR('isSearchServiceReachable', initialData); }; export const useIsEnabledAttachTitleHeader = (initialData?: boolean) : SWRResponse => { return useStaticSWR('isEnabledAttachTitleHeader', initialData); }; export const useIsEmptyPage = (initialData?: boolean) : SWRResponse => { return useStaticSWR('isEmptyPage', initialData); }; export const useHasParent = (initialData?: boolean) : SWRResponse => { return useStaticSWR('hasParent', initialData); }; export const useIsIndentSizeForced = (initialData?: boolean) : SWRResponse => { return useStaticSWR('isIndentSizeForced', initialData); }; export const useDefaultIndentSize = (initialData?: number) : SWRResponse => { return useStaticSWR('defaultIndentSize', initialData, { fallbackData: 4 }); }; export const useGrowiVersion = (initialData?: string): SWRResponse => { return useStaticSWR('growiVersion', initialData); }; /** ********************************************************** * Computed contexts *********************************************************** */ export const useIsGuestUser = (): SWRResponse => { const { data: currentUser } = useCurrentUser(); return useSWRImmutable( ['isGuestUser', currentUser], (key: Key, currentUser: IUser) => currentUser == null, ); }; export const useIsEditable = (): SWRResponse => { const { data: isGuestUser } = useIsGuestUser(); const { data: isNotCreatable } = useIsNotCreatable(); const { data: isTrashPage } = useIsTrashPage(); return useSWRImmutable( ['isEditable', isGuestUser, isTrashPage, isNotCreatable], (key: Key, isGuestUser: boolean, isTrashPage: boolean, isNotCreatable: boolean) => { return (!isNotCreatable && !isTrashPage && !isGuestUser); }, ); }; export const useIsSharedUser = (): SWRResponse => { const { data: isGuestUser } = useIsGuestUser(); const pathname = window.location.pathname; return useSWRImmutable( ['isSharedUser', isGuestUser, pathname], (key: Key, isGuestUser: boolean, pathname: string) => { return isGuestUser && pagePathUtils.isSharedPage(pathname); }, ); };