import { HtmlElementNode } from 'rehype-toc'; import { Key, SWRResponse } from 'swr'; import useSWRImmutable from 'swr/immutable'; import { SupportedActionType } from '~/interfaces/activity'; import { EditorConfig } from '~/interfaces/editor-settings'; // import { CustomWindow } from '~/interfaces/global'; import { RendererConfig } from '~/interfaces/services/renderer'; import { GrowiThemes } from '~/interfaces/theme'; import InterceptorManager from '~/services/interceptor-manager'; import { TargetAndAncestors } from '../interfaces/page-listing-results'; import { IUser, IUserHasId } from '../interfaces/user'; import { useStaticSWR } from './use-static-swr'; type Nullable = T | null; export const useInterceptorManager = (): SWRResponse => { return useStaticSWR('interceptorManager', undefined, { fallbackData: new InterceptorManager() }); }; export const useCsrfToken = (initialData?: string): SWRResponse => { return useStaticSWR('csrfToken', initialData); }; export const useAppTitle = (initialData?: string): SWRResponse => { return useStaticSWR('appTitle', initialData); }; export const useSiteUrl = (initialData?: string): SWRResponse => { return useStaticSWR('siteUrl', initialData); }; export const useConfidential = (initialData?: string): SWRResponse => { return useStaticSWR('confidential', initialData); }; export const useGrowiTheme = (initialData?: GrowiThemes): SWRResponse => { return useStaticSWR('theme', 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 useCurrentPathname = (initialData?: string): SWRResponse => { return useStaticSWR('currentPathname', initialData); }; export const useCurrentPageId = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('currentPageId', initialData); }; export const useRevisionCreatedAt = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('revisionCreatedAt', 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 useIsNotCreatable = (initialData?: boolean): SWRResponse => { // return useStaticSWR('isNotCreatable', initialData, { fallbackData: false }); // }; export const useIsForbidden = (initialData?: boolean): SWRResponse => { return useStaticSWR('isForbidden', initialData, { fallbackData: false }); }; export const useIsNotFound = (initialData?: boolean): SWRResponse => { return useStaticSWR('isNotFound', initialData, { fallbackData: false }); }; export const usePageUser = (initialData?: IUserHasId): SWRResponse => { return useStaticSWR('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 useIsSharedUser = (initialData?: boolean): SWRResponse => { return useStaticSWR('isSharedUser', 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 useDisableLinkSharing = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('disableLinkSharing', initialData); }; export const useRegistrationWhiteList = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('registrationWhiteList', initialData); }; export const useRevisionIdHackmdSynced = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('revisionIdHackmdSynced', initialData); }; export const useHackmdUri = (initialData?: Nullable): SWRResponse, Error> => { return useStaticSWR, Error>('hackmdUri', 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 useIsSearchPage = (initialData?: Nullable) : SWRResponse, Error> => { return useStaticSWR, Error>('isSearchPage', initialData); }; export const useTargetAndAncestors = (initialData?: TargetAndAncestors): SWRResponse => { return useStaticSWR('targetAndAncestors', 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 useIsMailerSetup = (initialData?: boolean): SWRResponse => { return useStaticSWR('isMailerSetup', initialData); }; export const useIsSearchScopeChildrenAsDefault = (initialData?: boolean) : SWRResponse => { return useStaticSWR('isSearchScopeChildrenAsDefault', initialData); }; export const useIsSlackConfigured = (initialData?: boolean) : SWRResponse => { return useStaticSWR('isSlackConfigured', initialData); }; export const useIsEnabledAttachTitleHeader = (initialData?: boolean) : SWRResponse => { return useStaticSWR('isEnabledAttachTitleHeader', 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 useAuditLogEnabled = (initialData?: boolean): SWRResponse => { return useStaticSWR('auditLogEnabled', initialData, { fallbackData: false }); }; export const useActivityExpirationSeconds = (initialData?: number) : SWRResponse => { return useStaticSWR('activityExpirationSeconds', initialData); }; export const useAuditLogAvailableActions = (initialData?: Array) : SWRResponse, Error> => { return useStaticSWR, Error>('auditLogAvailableActions', initialData); }; export const useGrowiVersion = (initialData?: string): SWRResponse => { return useStaticSWR('growiVersion', initialData); }; export const useIsEnabledStaleNotification = (initialData?: boolean): SWRResponse => { return useStaticSWR('isEnabledStaleNotification', initialData); }; export const useIsLatestRevision = (initialData?: boolean): SWRResponse => { return useStaticSWR('isLatestRevision', initialData); }; export const useEditorConfig = (initialData?: EditorConfig): SWRResponse => { return useStaticSWR('editorConfig', initialData); }; export const useRendererConfig = (initialData?: RendererConfig): SWRResponse => { return useStaticSWR('growiRendererConfig', initialData); }; export const useIsAllReplyShown = (initialData?: boolean): SWRResponse => { return useStaticSWR('isAllReplyShown', initialData); }; export const useIsBlinkedHeaderAtBoot = (initialData?: boolean): SWRResponse => { return useStaticSWR('isBlinkedAtBoot', initialData, { fallbackData: false }); }; export const useEditingMarkdown = (initialData?: string): SWRResponse => { return useStaticSWR('currentMarkdown', initialData); }; export const useIsUploadableImage = (initialData?: boolean): SWRResponse => { return useStaticSWR('isUploadableImage', initialData); }; export const useIsUploadableFile = (initialData?: boolean): SWRResponse => { return useStaticSWR('isUploadableFile', initialData); }; export const useShowPageLimitationXL = (initialData?: number): SWRResponse => { return useStaticSWR('showPageLimitationXL', initialData); }; /** ********************************************************** * Computed contexts *********************************************************** */ export const useIsGuestUser = (): SWRResponse => { const { data: currentUser } = useCurrentUser(); return useSWRImmutable( ['isGuestUser', currentUser], (key: Key, currentUser: IUser) => currentUser == null, { fallbackData: currentUser == null }, ); }; export const useIsEditable = (): SWRResponse => { const { data: isGuestUser } = useIsGuestUser(); const { data: isForbidden } = useIsForbidden(); const { data: isIdenticalPath } = useIsIdenticalPath(); const { data: isTrashPage } = useIsTrashPage(); return useSWRImmutable( ['isEditable', isGuestUser, isForbidden, isIdenticalPath, isTrashPage], (key: Key, isGuestUser: boolean, isForbidden: boolean, isIdenticalPath: boolean, isTrashPage: boolean) => { return (!isTrashPage && !isForbidden && !isIdenticalPath && !isGuestUser); }, ); }; export const useCurrentPageTocNode = (): SWRResponse => { const { data: currentPagePath } = useCurrentPagePath(); return useStaticSWR(['currentPageTocNode', currentPagePath]); };