11import React from 'react'
22import cx from 'classnames'
3+ import GithubSlugger from 'github-slugger'
34
45import { HeadingLink } from '@/frame/components/article/HeadingLink'
56import { ChangelogItemT } from './types'
@@ -10,14 +11,19 @@ type Props = {
1011}
1112
1213export function Changelog ( { changelogItems } : Props ) {
13- const changes = changelogItems . map ( ( item ) => {
14+ const slugger = new GithubSlugger ( )
15+
16+ const changes = changelogItems . map ( ( item , index ) => {
1417 const heading = `Schema changes for ${ item . date } `
18+ const slug = slugger . slug ( heading )
1519
1620 return (
17- < div key = { item . date } >
18- < HeadingLink as = "h2" > { heading } </ HeadingLink >
19- { ( item . schemaChanges || [ ] ) . map ( ( change , index ) => (
20- < React . Fragment key = { index } >
21+ < div key = { `${ item . date } -${ index } ` } >
22+ < HeadingLink as = "h2" slug = { slug } >
23+ { heading }
24+ </ HeadingLink >
25+ { ( item . schemaChanges || [ ] ) . map ( ( change , changeIndex ) => (
26+ < React . Fragment key = { changeIndex } >
2127 < p > { change . title } </ p >
2228 < ul >
2329 { change . changes . map ( ( changeItem ) => (
@@ -26,8 +32,8 @@ export function Changelog({ changelogItems }: Props) {
2632 </ ul >
2733 </ React . Fragment >
2834 ) ) }
29- { ( item . previewChanges || [ ] ) . map ( ( change , index ) => (
30- < React . Fragment key = { index } >
35+ { ( item . previewChanges || [ ] ) . map ( ( change , changeIndex ) => (
36+ < React . Fragment key = { changeIndex } >
3137 < p > { change . title } </ p >
3238 < ul >
3339 { change . changes . map ( ( changeItem ) => (
@@ -36,8 +42,8 @@ export function Changelog({ changelogItems }: Props) {
3642 </ ul >
3743 </ React . Fragment >
3844 ) ) }
39- { ( item . upcomingChanges || [ ] ) . map ( ( change , index ) => (
40- < React . Fragment key = { index } >
45+ { ( item . upcomingChanges || [ ] ) . map ( ( change , changeIndex ) => (
46+ < React . Fragment key = { changeIndex } >
4147 < p > { change . title } </ p >
4248 { change . changes . map ( ( changeItem ) => (
4349 < li key = { changeItem } dangerouslySetInnerHTML = { { __html : changeItem } } />
0 commit comments