import { SyntheticEvent, useState } from 'react'
import cx from 'classnames'
import {
ChevronDownIcon,
ChevronLeftIcon,
ChevronRightIcon,
LinkExternalIcon,
} from '@primer/octicons-react'
import { useMainContext } from 'components/context/MainContext'
import dayjs from 'dayjs'
import { useRouter } from 'next/router'
import { Link } from 'components/Link'
import { MarkdownContent } from 'components/ui/MarkdownContent'
import { GHESReleaseNotesContextT } from './types'
import { GHESReleaseNotePatch } from './GHESReleaseNotePatch'
type Props = {
context: GHESReleaseNotesContextT
}
export function GHESReleaseNotes({ context }: Props) {
const router = useRouter()
const { currentProduct } = useMainContext()
const [focusedPatch, setFocusedPatch] = useState('')
const {
prevRelease,
nextRelease,
latestPatch,
latestRelease,
currentVersion,
releaseNotes,
releases,
message,
} = context
return (
{prevRelease ? (
{prevRelease}
) : (
)}
{currentVersion.planTitle} {currentVersion.currentRelease} release notes
{nextRelease ? (
{nextRelease}
) : (
)}
{releaseNotes.map((patch) => {
return (
{
setFocusedPatch(patch.version)
}}
/>
)
})}
)
}
const CollapsibleReleaseSection = ({
release,
releaseLink,
focusedPatch,
}: {
release: GHESReleaseNotesContextT['releases'][0]
releaseLink: string
focusedPatch: string
}) => {
const defaultIsOpen = true
const [isOpen, setIsOpen] = useState(defaultIsOpen)
const onToggle = (e: SyntheticEvent) => {
const newIsOpen = (e.target as HTMLDetailsElement).open
setIsOpen(newIsOpen)
}
return (
{release.version}
{release.patches.length} releases
{release.patches.map((patch) => {
const isActive = patch.version === focusedPatch
return (
-
{patch.version}
{dayjs(patch.date).format('MMMM DD, YYYY')}
)
})}
)
}