forked from github/docs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPatchNotes.tsx
56 lines (52 loc) · 1.68 KB
/
PatchNotes.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
import { slug } from 'github-slugger'
import { ReleaseNotePatch } from './types'
import { HeadingLink } from 'components/article/HeadingLink'
const SectionToLabelMap: Record<string, string> = {
features: 'Features',
bugs: 'Bug fixes',
known_issues: 'Known issues',
security_fixes: 'Security fixes',
changes: 'Changes',
deprecations: 'Deprecations',
backups: 'Backups',
errata: 'Errata',
}
type Props = {
patch: ReleaseNotePatch
}
export function PatchNotes({ patch }: Props) {
return (
<>
{Object.entries(patch.sections).map(([key, sectionItems]) => {
const sectionSlug = `${patch.version}-${key.replaceAll('_', '-')}`
return (
<div key={key}>
<HeadingLink as="h3" slug={sectionSlug}>
{`${patch.version}: ${SectionToLabelMap[key]}` || 'INVALID SECTION'}
</HeadingLink>
<ul>
{sectionItems.map((item, i) => {
if (typeof item === 'string') {
return <li key={item} dangerouslySetInnerHTML={{ __html: item }} />
}
const headingSlug = item.heading ? slug(item.heading) : `heading${i}`
return (
<li key={headingSlug}>
<h4 id={headingSlug}>
<a href={`#${headingSlug}`}>{item.heading}</a>
</h4>
<ul>
{item.notes.map((note) => {
return <li key={note} dangerouslySetInnerHTML={{ __html: note }} />
})}
</ul>
</li>
)
})}
</ul>
</div>
)
})}
</>
)
}