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]);
};