164 lines
6.0 KiB
TypeScript
164 lines
6.0 KiB
TypeScript
import {
|
|
categorizeRelatedDocuments,
|
|
generateRelatedDocumentsTemplate,
|
|
ProcessedDocument,
|
|
RelatedDocument,
|
|
} from '@nx/nx-dev/models-document';
|
|
import { Breadcrumbs, Footer } from '@nx/nx-dev/ui-common';
|
|
import { renderMarkdown } from '@nx/nx-dev/ui-markdoc';
|
|
import { NextSeo } from 'next-seo';
|
|
import { useRouter } from 'next/router';
|
|
import { cx } from '@nx/nx-dev/ui-primitives';
|
|
import { useRef } from 'react';
|
|
import { collectHeadings, TableOfContents } from './table-of-contents';
|
|
|
|
export function DocViewer({
|
|
document,
|
|
relatedDocuments,
|
|
}: {
|
|
document: ProcessedDocument;
|
|
relatedDocuments: RelatedDocument[];
|
|
}): JSX.Element {
|
|
const router = useRouter();
|
|
const isIntroPage =
|
|
router.asPath.includes('/getting-started/intro') ||
|
|
router.asPath.includes('/plugins/intro/getting-started');
|
|
const ref = useRef<HTMLDivElement | null>(null);
|
|
|
|
const { metadata, node, treeNode } = renderMarkdown(
|
|
document.content.toString(),
|
|
{
|
|
filePath: document.filePath,
|
|
}
|
|
);
|
|
|
|
const vm = {
|
|
title: metadata['title'] ?? document.name,
|
|
description: metadata['description'] ?? document.description,
|
|
content: node,
|
|
relatedContent: renderMarkdown(
|
|
generateRelatedDocumentsTemplate(
|
|
categorizeRelatedDocuments(relatedDocuments)
|
|
),
|
|
{
|
|
filePath: '',
|
|
}
|
|
).node,
|
|
tableOfContent: collectHeadings(treeNode),
|
|
};
|
|
|
|
return (
|
|
<>
|
|
<NextSeo
|
|
title={vm.title + ' | Nx'}
|
|
description={
|
|
vm.description ??
|
|
'Next generation build system with first class monorepo support and powerful integrations.'
|
|
}
|
|
openGraph={{
|
|
url: 'https://nx.dev' + router.asPath,
|
|
title: vm.title,
|
|
description:
|
|
vm.description ??
|
|
'Next generation build system with first class monorepo support and powerful integrations.',
|
|
images: [
|
|
{
|
|
url: router.asPath.includes('turbo-and-nx')
|
|
? 'https://nx.dev/socials/nx-media-monorepo.jpg'
|
|
: `https://nx.dev/images/open-graph/${router.asPath
|
|
.replace('/', '')
|
|
.replace(/\//gi, '-')}.jpg`,
|
|
width: 1600,
|
|
height: 800,
|
|
alt: 'Nx: Smart, Fast and Extensible Build System',
|
|
type: 'image/jpeg',
|
|
},
|
|
],
|
|
siteName: 'Nx',
|
|
type: 'website',
|
|
}}
|
|
/>
|
|
|
|
<div className="mx-auto w-full grow items-stretch px-4 sm:px-6 lg:px-8 2xl:max-w-6xl">
|
|
<div id="content-wrapper" className="w-full flex-auto flex-col">
|
|
<div className="mb-6 pt-8">
|
|
<Breadcrumbs path={router.asPath} />
|
|
</div>
|
|
<div className="min-w-0 flex-auto pb-24 lg:pb-16">
|
|
{/*MAIN CONTENT*/}
|
|
<div className="relative">
|
|
<div
|
|
ref={ref}
|
|
data-document="main"
|
|
className={cx(
|
|
'prose prose-slate dark:prose-invert w-full max-w-none 2xl:max-w-4xl',
|
|
{ 'xl:max-w-2xl': !isIntroPage }
|
|
)}
|
|
>
|
|
{vm.content}
|
|
</div>
|
|
{!isIntroPage && (
|
|
<div
|
|
className={cx(
|
|
'fixed top-36 right-[max(2rem,calc(50%-55rem))] z-20 hidden w-60 overflow-y-auto bg-white py-10 text-sm dark:bg-slate-900 xl:block'
|
|
)}
|
|
>
|
|
<TableOfContents
|
|
elementRef={ref}
|
|
path={router.basePath}
|
|
headings={vm.tableOfContent}
|
|
/>
|
|
</div>
|
|
)}
|
|
</div>
|
|
{/*RELATED CONTENT*/}
|
|
<div
|
|
data-document="related"
|
|
className="prose prose-slate dark:prose-invert max-w-none"
|
|
>
|
|
{vm.relatedContent}
|
|
</div>
|
|
</div>
|
|
<div className="flex w-full items-center space-x-2 pt-24 pb-24 sm:px-6 lg:pb-16 xl:px-8">
|
|
<div className="ml-4 flex h-0.5 w-full flex-grow rounded bg-slate-50 dark:bg-slate-800/60" />
|
|
<div className="relative z-0 inline-flex flex-shrink-0 rounded-md shadow-sm">
|
|
<a
|
|
aria-hidden="true"
|
|
href="https://github.com/nrwl/nx/issues/new?assignees=&labels=type%3A+docs&template=3-documentation.md"
|
|
target="_blank"
|
|
rel="noreferrer"
|
|
title="Report an issue on GitHub"
|
|
className={`relative inline-flex items-center rounded-l-md ${
|
|
// If there is no file path for this page then don't show edit button.
|
|
document.filePath ? '' : 'rounded-r-md '
|
|
}border border-slate-200 bg-white px-4 py-2 text-xs font-medium text-slate-600 focus-within:ring-blue-500 hover:bg-slate-50 focus:z-10 focus:outline-none focus:ring-1 dark:border-slate-700 dark:bg-slate-800/60 dark:text-slate-400 dark:focus-within:ring-sky-500 dark:hover:bg-slate-800`}
|
|
>
|
|
Report an issue
|
|
</a>
|
|
{document.filePath ? (
|
|
<a
|
|
aria-hidden="true"
|
|
href={[
|
|
'https://github.com/nrwl/nx/blob/master',
|
|
document.filePath.replace(
|
|
'nx-dev/nx-dev/public/documentation',
|
|
'docs'
|
|
),
|
|
].join('/')}
|
|
target="_blank"
|
|
rel="noreferrer"
|
|
title="Edit this page on GitHub"
|
|
className="relative -ml-px inline-flex items-center rounded-r-md border border-slate-200 bg-white px-4 py-2 text-xs font-medium text-slate-600 focus-within:ring-blue-500 hover:bg-slate-50 focus:z-10 focus:outline-none focus:ring-1 dark:border-slate-700 dark:bg-slate-800/60 dark:text-slate-400 dark:focus-within:ring-sky-500 dark:hover:bg-slate-800"
|
|
>
|
|
Edit this page
|
|
</a>
|
|
) : null}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<Footer />
|
|
</>
|
|
);
|
|
}
|