/
ExcerptNode.tsx
66 lines (60 loc) · 1.92 KB
/
ExcerptNode.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import Link from 'next/link';
import { Fragment } from 'react';
import { BuiltinDocumentationLinks } from '~/util/builtinDocumentationLinks';
export async function ExcerptNode({ node, version }: { readonly node?: any; readonly version: string }) {
const createExcerpt = (excerpts: any) => {
const excerpt = Array.isArray(excerpts) ? excerpts : excerpts.excerpts ?? [excerpts];
return (
<span
className={
excerpts?.type === 'Extends' || excerpts?.type === 'Implements'
? 'after:content-[",_"] last-of-type:after:content-none'
: ''
}
>
{excerpt.map((excerpt: any, idx: number) => {
if (excerpt.resolvedItem) {
return (
<Link
key={`${excerpt.resolvedItem.displayName}-${idx}`}
className="text-blurple hover:text-blurple-500 dark:hover:text-blurple-300"
href={`/docs/packages/${excerpt.resolvedItem.packageName}/${excerpt.resolvedItem.version ?? version}/${excerpt.resolvedItem.uri}`}
>
{excerpt.text}
</Link>
);
}
if (excerpt.href) {
return (
<a
key={`${excerpt.text}-${idx}`}
className="text-blurple hover:text-blurple-500 dark:hover:text-blurple-300"
href={excerpt.href}
rel="external noreferrer noopener"
target="_blank"
>
{excerpt.text}
</a>
);
}
if (excerpt.text in BuiltinDocumentationLinks) {
const href = BuiltinDocumentationLinks[excerpt.text as keyof typeof BuiltinDocumentationLinks];
return (
<a
key={`${excerpt.text}-${idx}`}
className="text-blurple hover:text-blurple-500 dark:hover:text-blurple-300"
href={href}
rel="external noreferrer noopener"
target="_blank"
>
{excerpt.text}
</a>
);
}
return <Fragment key={`${excerpt.text}-${idx}`}>{excerpt.text}</Fragment>;
})}
</span>
);
};
return node?.map(createExcerpt) ?? null;
}