import { Box, Container, Link, Text } from '@chakra-ui/react'; import { GlobalHeader } from '../../components/global-header'; import { OpensourceBanner } from '../../components/opensource-banner'; import { Footer } from '../../components/footer'; import { ContentPageHeader } from '../../components/content-page-header'; import MdRenderer from '../../components/md-renderer'; import { getAllVideos, getVideoById, VideoType } from '../../lib/video'; import Helmet from '../../components/helmet'; type VideoProps = { video: VideoType; }; export default function Video(props: VideoProps) { const { video } = props; const VideoContent = require(`../../content/videos/${video.id}.md`).default; return ( <Box bg='white' minH='100vh'> <GlobalHeader /> <Helmet title={video.title} description={video.description} /> <Box mb='60px'> <ContentPageHeader title={video.title} subtitle={video.description} formattedDate={video.formattedUpdatedAt!} subLink={video.youtubeLink ? { text: 'Watch on YouTube', url: video.youtubeLink } : undefined} author={{ twitter: video.author?.twitter!, name: video.author?.name!, picture: video.author?.picture! }} /> <Container maxW={'container.md'} position='relative'> {video.youtubeLink && ( <Text mb='18px'>We are working on a better watch page — for now this <Link fontWeight={600} textDecoration={'underline'} href={video.youtubeLink} target='_blank'>video is best viewed on YouTube</Link>.</Text>)} <MdRenderer> <VideoContent /> </MdRenderer> </Container> </Box> <OpensourceBanner /> <Footer /> </Box> ); } type StaticPathItem = { params: { video: string } }; export async function getStaticPaths() { const videos = getAllVideos(); const paramsList: StaticPathItem[] = videos.map(video => ({ params: { 'video': video.id } })); return { paths: paramsList, fallback: false }; } type ContextType = { params: { video: string } }; export async function getStaticProps(context: ContextType) { const videoId: string = context?.params?.video; return { props: { video: getVideoById(videoId) } }; }