Skip to content

Commit

Permalink
docs(nxdev): add empty state for schema lists (nrwl#11268)
Browse files Browse the repository at this point in the history
  • Loading branch information
bcabanes committed Jul 22, 2022
1 parent f285446 commit 13354e5
Show file tree
Hide file tree
Showing 2 changed files with 140 additions and 84 deletions.
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import { ChipIcon, CogIcon } from '@heroicons/react/solid';
import { PackageMetadata } from '@nrwl/nx-dev/models-package';
import { renderMarkdown } from '@nrwl/nx-dev/ui-markdoc';
import cx from 'classnames';
import { NextSeo } from 'next-seo';
import Link from 'next/link';
import { useRouter } from 'next/router';
import React, { ReactComponentElement, ReactNode } from 'react';
import { Breadcrumbs } from '@nrwl/nx-dev/ui-common';
import { getPublicPackageName } from './get-public-package-name';
import { Heading1, Heading2 } from './ui/headings';
import { Heading1 } from './ui/headings';
import { PackageReference } from './ui/package-reference';

export function PackageSchemaList({
pkg,
Expand Down Expand Up @@ -129,87 +128,11 @@ export function PackageSchemaList({

<div className="prose mb-16 max-w-none">{vm.markdown}</div>

<Heading2 title="Package reference" />

<p className="mb-16">
Here is a list of all the executors and generators available
from this package.
</p>

<Heading2 title={'Executors'} />
<ul role="list" className="divide-y divide-gray-200">
{pkg.executors.map((executors) => (
<li
key={executors.name}
className="focus-within:ring-blue-nx-base relative flex px-2 py-4 transition focus-within:ring-2 focus-within:ring-offset-2 hover:bg-gray-50"
>
<ChipIcon
className="h-8 w-8 flex-shrink-0 rounded-full text-gray-300"
role="img"
/>
<div className="ml-3">
<p className="text-sm font-medium text-gray-900">
<Link
href={`/packages/${pkg.name}/executors/${executors.name}`}
>
<a className="focus:outline-none">
<span
className="absolute inset-0"
aria-hidden="true"
></span>
{executors.name}
</a>
</Link>
</p>
<div className="prose-sm">
{renderMarkdown({
content: executors.description,
data: {},
filePath: '',
})}
</div>
</div>
</li>
))}
</ul>

<div className="h-12">{/* SPACER */}</div>
<Heading2 title={'Generators'} />
<ul role="list" className="divide-y divide-gray-200">
{pkg.generators.map((generators) => (
<li
key={generators.name}
className="focus-within:ring-blue-nx-base relative flex px-2 py-4 transition focus-within:ring-2 focus-within:ring-offset-2 hover:bg-gray-50"
>
<CogIcon
className="h-8 w-8 flex-shrink-0 rounded-full text-gray-300"
role="img"
/>
<div className="ml-3">
<p className="text-sm font-medium text-gray-900">
<Link
href={`/packages/${pkg.name}/generators/${generators.name}`}
>
<a className="focus:outline-none">
<span
className="absolute inset-0"
aria-hidden="true"
></span>
{generators.name}
</a>
</Link>
</p>
<div className="prose-sm">
{renderMarkdown({
content: generators.description,
data: {},
filePath: '',
})}
</div>
</div>
</li>
))}
</ul>
<PackageReference
name={vm.pkg.name}
executors={pkg.executors}
generators={pkg.generators}
></PackageReference>
</div>
</div>
</div>
Expand Down
133 changes: 133 additions & 0 deletions nx-dev/feature-package-schema-viewer/src/lib/ui/package-reference.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
import {
ChipIcon,
CogIcon,
InformationCircleIcon,
} from '@heroicons/react/solid';
import { SchemaMetadata } from '@nrwl/nx-dev/models-package';
import { renderMarkdown } from '@nrwl/nx-dev/ui-markdoc';
import Link from 'next/link';
import React from 'react';
import { Heading2 } from './headings';

export function PackageReference({
executors,
generators,
name,
}: {
executors: SchemaMetadata[];
generators: SchemaMetadata[];
name: string;
}): JSX.Element {
return (
<>
<Heading2 title="Package reference" />

<p className="mb-16">
Here is a list of all the executors and generators available from this
package.
</p>

<Heading2 title={'Executors'} />
<ul className="divide-y divide-gray-200">
{executors.map((executor) => (
<SchemaListItem
schema={executor}
packageName={name}
type="generator"
/>
))}
{executors.length === 0 && <EmptyList type="executor" />}
</ul>

<div className="h-12">{/* SPACER */}</div>
<Heading2 title={'Generators'} />
<ul className="divide-y divide-gray-200">
{generators.map((generator) => (
<SchemaListItem
schema={generator}
packageName={name}
type="generator"
/>
))}
{generators.length === 0 && <EmptyList type="generator" />}
</ul>
</>
);
}

function SchemaListItem({
schema,
type,
packageName,
}: {
schema: SchemaMetadata;
type: 'executor' | 'generator';
packageName: string;
}): JSX.Element {
return (
<li
key={schema.name}
className="focus-within:ring-blue-nx-base relative flex px-2 py-4 transition focus-within:ring-2 focus-within:ring-offset-2 hover:bg-gray-50"
>
{type === 'executor' ? (
<ChipIcon
className="h-8 w-8 flex-shrink-0 rounded-full text-gray-300"
role="img"
/>
) : (
<CogIcon
className="h-8 w-8 flex-shrink-0 rounded-full text-gray-300"
role="img"
/>
)}
<div className="ml-3">
<p className="text-sm font-medium text-gray-900">
<Link href={`/packages/${packageName}/${type}/${schema.name}`}>
<a className="focus:outline-none">
<span className="absolute inset-0" aria-hidden="true"></span>
{schema.name}
</a>
</Link>
</p>
<div className="prose-sm">
{renderMarkdown({
content: schema.description,
data: {},
filePath: '',
})}
</div>
</div>
</li>
);
}

function EmptyList({ type }: { type: 'executor' | 'generator' }): JSX.Element {
return (
<li className="focus-within:ring-blue-nx-base relative flex px-2 py-4 transition focus-within:ring-2 focus-within:ring-offset-2 hover:bg-gray-50">
<InformationCircleIcon
className="h-8 w-8 flex-shrink-0 rounded-full text-gray-300"
role="img"
/>
<div className="ml-3">
<p className="text-sm font-medium text-gray-900">
<Link href="https://github.com/nrwl/nx/discussions">
<a className="focus:outline-none" rel="noreferrer" target="_blank">
<span className="absolute inset-0" aria-hidden="true"></span>
No {type} available for this package yet!
</a>
</Link>
</p>
<div className="prose-sm">
<a
href="https://github.com/nrwl/nx/discussions"
target="_blank"
rel="noreferrer"
>
Please be sure to check the Nx roadmap on Github, we are probably
working on what you are looking for.
</a>
</div>
</div>
</li>
);
}

0 comments on commit 13354e5

Please sign in to comment.