import {
Badge,
Box,
Flex,
SkipNavContent,
SkipNavLink,
chakra,
} from '@chakra-ui/react'
import EditPageLink from 'components/edit-page-button'
import Footer from 'components/footer'
import Header from 'components/header'
import SEO from 'components/seo'
import TableOfContent from 'components/table-of-content'
import { useRouter } from 'next/router'
import * as React from 'react'
import { FrontmatterHeading } from 'src/types/frontmatter'
import { convertBackticksToInlineCode } from 'utils/convert-backticks-to-inline-code'
import { t } from 'utils/i18n'
import { AdBanner } from './chakra-pro/ad-banner'
function useHeadingFocusOnRouteChange() {
const router = useRouter()
React.useEffect(() => {
const onRouteChange = () => {
const [heading] = Array.from(document.getElementsByTagName('h1'))
heading?.focus()
}
router.events.on('routeChangeComplete', onRouteChange)
return () => {
router.events.off('routeChangeComplete', onRouteChange)
}
}, [router.events])
}
interface PageContainerProps {
frontmatter: {
slug?: string
title: string
description?: string
editUrl?: string
version?: string
headings?: FrontmatterHeading[]
}
hideToc?: boolean
maxWidth?: string
children: React.ReactNode
leftSidebar?: React.ReactElement
rightSidebar?: React.ReactElement
pagination?: React.ReactElement
}
function PageContainer(props: PageContainerProps) {
const {
frontmatter,
children,
leftSidebar,
rightSidebar,
pagination,
hideToc,
maxWidth = '48rem',
} = props
useHeadingFocusOnRouteChange()
if (!frontmatter) return <>>
const { title, description, editUrl, version, headings = [] } = frontmatter
return (
<>
{t('component.page-container.skip-to-content')}
{leftSidebar || null}
{convertBackticksToInlineCode(title)}
{version && (
v{version}
)}
{children}
{editUrl && }
{pagination || null}
{!hideToc && (
)}
{rightSidebar}
>
)
}
export default PageContainer