| import React from 'react' |
| import cx from 'classnames' |
|
|
| import { HeadingLink } from '@/frame/components/article/HeadingLink' |
| import { BreakingChangesT } from './types' |
| import styles from '@/frame/components/ui/MarkdownContent/MarkdownContent.module.scss' |
|
|
| export type HeadingT = { |
| title: string |
| slug: string |
| } |
| type Props = { |
| schema: BreakingChangesT |
| headings: Record<string, HeadingT> |
| } |
|
|
| export function BreakingChanges({ schema, headings }: Props) { |
| const changes = Object.keys(schema).map((date) => { |
| const items = schema[date] |
| const { title, slug } = headings[date] |
| return ( |
| <div className={cx(styles.markdownBody)} key={date}> |
| <HeadingLink as="h2" slug={slug}> |
| {title} |
| </HeadingLink> |
| {items.map((item) => { |
| const criticalityStyles = |
| item.criticality === 'breaking' |
| ? 'color-border-danger color-bg-danger' |
| : 'color-border-accent-emphasis color-bg-accent' |
| const criticality = item.criticality === 'breaking' ? 'Breaking' : 'Dangerous' |
| |
| return ( |
| <ul key={item.location}> |
| <li> |
| <span className={cx(criticalityStyles, 'border rounded-1 m-1 p-1')}> |
| {criticality} |
| </span>{' '} |
| A change will be made to <code>{item.location}</code>. |
| <div> |
| <b>Description: </b> |
| <span dangerouslySetInnerHTML={{ __html: item.description }} /> |
| </div> |
| <div> |
| <b>Reason: </b> <span dangerouslySetInnerHTML={{ __html: item.reason }} /> |
| </div> |
| </li> |
| </ul> |
| ) |
| })} |
| </div> |
| ) |
| }) |
|
|
| return <div>{changes}</div> |
| } |
|
|