import { useMemo } from 'react'; import type { IPagePopulatedToShowRevision } from '@growi/core'; import { useSlidesByFrontmatter } from '@growi/presentation/dist/services'; import dynamic from 'next/dynamic'; import { PagePathNavTitle } from '~/components-universal/Common/PagePathNavTitle'; import type { RendererConfig } from '~/interfaces/services/renderer'; import type { IShareLinkHasId } from '~/interfaces/share-link'; import { useShouldExpandContent } from '~/services/layout/use-should-expand-content'; import { generateSSRViewOptions } from '~/services/renderer/renderer'; import { useIsNotFound } from '~/stores/page'; import { useViewOptions } from '~/stores/renderer'; import loggerFactory from '~/utils/logger'; import { PageContentFooter } from '../PageView/PageContentFooter'; import { PageViewLayout } from '../PageView/PageViewLayout'; import RevisionRenderer from '../PageView/RevisionRenderer'; import ShareLinkAlert from './ShareLinkAlert'; const logger = loggerFactory('growi:Page'); const PageSideContents = dynamic(() => import('../../components/PageSideContents').then(mod => mod.PageSideContents), { ssr: false }); const ForbiddenPage = dynamic(() => import('../../components/ForbiddenPage'), { ssr: false }); const SlideRenderer = dynamic(() => import('../../components/Page/SlideRenderer').then(mod => mod.SlideRenderer), { 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 markdown = page?.revision?.body; const isSlide = useSlidesByFrontmatter(markdown, rendererConfig.isEnabledMarp); const isNotFound = isNotFoundMeta || page == null || shareLink == null; const specialContents = useMemo(() => { if (disableLinkSharing) { return ; } }, [disableLinkSharing, props.disableLinkSharing]); const headerContents = ; const sideContents = !isNotFound ? ( ) : null; const footerContents = !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 isSlide != null ? : ; }; return ( { specialContents } { specialContents == null && ( <> { isNotFound && (

Page is not found

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