import React, { useMemo } from 'react'; import type { IPagePopulatedToShowRevision } from '@growi/core'; import dynamic from 'next/dynamic'; import { useShouldExpandContent } from '~/client/services/layout'; import type { RendererConfig } from '~/interfaces/services/renderer'; import type { IShareLinkHasId } from '~/interfaces/share-link'; import { generateSSRViewOptions } from '~/services/renderer/renderer'; import { useIsNotFound } from '~/stores/page'; import { useViewOptions } from '~/stores/renderer'; import loggerFactory from '~/utils/logger'; import { PagePathNavSticky } from './Common/PagePathNav'; import { PageViewLayout } from './Common/PageViewLayout'; import RevisionRenderer from './Page/RevisionRenderer'; import ShareLinkAlert from './Page/ShareLinkAlert'; import type { PageSideContentsProps } from './PageSideContents'; const logger = loggerFactory('growi:Page'); const PageSideContents = dynamic(() => import('./PageSideContents').then(mod => mod.PageSideContents), { ssr: false }); const ForbiddenPage = dynamic(() => import('./ForbiddenPage'), { ssr: false }); type Props = { pagePath: string, rendererConfig: RendererConfig, page?: IPagePopulatedToShowRevision, shareLink?: IShareLinkHasId, isExpired: boolean, disableLinkSharing: boolean, } export const ShareLinkPageView = (props: Props): JSX.Element => { const { pagePath, rendererConfig, page, shareLink, isExpired, disableLinkSharing, } = props; const { data: isNotFoundMeta } = useIsNotFound(); const { data: viewOptions } = useViewOptions(); const shouldExpandContent = useShouldExpandContent(page); const isNotFound = isNotFoundMeta || page == null || shareLink == null; const specialContents = useMemo(() => { if (disableLinkSharing) { return ; } }, [disableLinkSharing, props.disableLinkSharing]); const headerContents = ( ); const sideContents = !isNotFound ? ( ) : null; const Contents = () => { if (isNotFound || page.revision == null) { return <>; } if (isExpired) { return ( <>

Page is expired

); } const rendererOptions = viewOptions ?? generateSSRViewOptions(rendererConfig, pagePath); const markdown = page.revision.body; return ( <> ); }; return ( { specialContents } { specialContents == null && ( <> { isNotFound && (

Page is not found

) } { !isNotFound && ( <>
) } ) }
); };