import { Box, Button, Center, Flex, HStack, Heading, SkipNavContent, SkipNavLink, Stack, Text, VStack, chakra, } from '@chakra-ui/react' import { SandpackCodeEditor, SandpackLayout, SandpackPreview, SandpackProvider, } from '@codesandbox/sandpack-react' import { nightOwl } from '@codesandbox/sandpack-themes' import EditPageLink from 'components/edit-page-button' import Header from 'components/header' import SEO from 'components/seo' import { useRouter } from 'next/router' import mainPackageJson from 'package.json' import * as React from 'react' import { ErrorBoundary } from 'react-error-boundary' import { Frontmatter } from 'src/types/frontmatter' import { t } from 'utils/i18n' 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: Frontmatter children: React.ReactNode sidebar?: React.ReactElement pagination?: React.ReactElement files: { [x: string]: string } } function TutorialContainer({ frontmatter, children, pagination, sidebar, files, }: PageContainerProps) { useHeadingFocusOnRouteChange() if (!frontmatter) return <> const { title, description, editUrl } = frontmatter const dependenciesNames = [ '@chakra-ui/react', 'typescript', '@emotion/react', '@emotion/styled', 'framer-motion', ] const dependencies = dependenciesNames.reduce((prev, cur) => { return { ...prev, [cur]: mainPackageJson.dependencies[cur] } }, {}) return ( {t('component.page-container.skip-to-content')}
(
{t('tutorialError.heading')} {t('tutorialError.message')} {t('tutorialError.submessage')}
)} > {/* eslint-disable-next-line @typescript-eslint/ban-ts-comment */} {/* @ts-ignore - sandpack has not yet fully provided React 18 support */}
{sidebar} {title} {children} {editUrl && } {pagination || null}
) } export default TutorialContainer