Files
developer-roadmap/pages/guides/[guide].tsx

89 lines
2.2 KiB
TypeScript
Raw Permalink Normal View History

2021-08-20 15:49:34 +02:00
import { Box, Container } from '@chakra-ui/react';
2021-08-20 17:06:26 +02:00
import { GlobalHeader } from '../../components/global-header';
2021-08-20 15:49:34 +02:00
import { OpensourceBanner } from '../../components/opensource-banner';
import { UpdatesBanner } from '../../components/updates-banner';
import { Footer } from '../../components/footer';
2021-08-22 15:40:20 +02:00
import { ContentPageHeader } from '../../components/content-page-header';
2021-08-20 17:06:26 +02:00
import MdRenderer from '../../components/md-renderer';
2021-09-03 09:45:46 +02:00
import { getAllGuides, getGuideById, GuideType } from '../../lib/guide';
import siteConfig from '../../content/site.json';
2021-09-04 22:58:58 +02:00
import Helmet from '../../components/helmet';
2021-08-20 15:49:34 +02:00
2021-09-03 09:45:46 +02:00
type GuideProps = {
guide: GuideType;
};
export default function Guide(props: GuideProps) {
const { guide } = props;
2021-09-03 16:27:30 +02:00
const GuideContent = require(`../../content/guides/${guide.id}.md`).default;
2021-08-20 17:06:26 +02:00
2021-08-20 15:49:34 +02:00
return (
<Box bg='white' minH='100vh'>
2021-08-20 17:06:26 +02:00
<GlobalHeader />
2021-09-04 22:58:58 +02:00
<Helmet
title={guide.title}
description={guide.description}
/>
2021-08-20 15:49:34 +02:00
<Box mb='60px'>
2021-08-22 15:40:20 +02:00
<ContentPageHeader
2021-09-03 09:45:46 +02:00
title={guide.title}
subtitle={guide.description}
2021-09-03 12:59:44 +02:00
formattedDate={guide.formattedUpdatedAt!}
2021-09-03 09:45:46 +02:00
author={{
twitter: guide?.author?.twitter!,
picture: guide?.author?.picture!,
name: guide?.author?.name!
}}
subLink={{
text: 'Improve this Guide',
2021-09-03 16:27:30 +02:00
url: `${siteConfig.url.repo}/tree/master/content/guides/${guide.id}.md`
2021-09-03 09:45:46 +02:00
}}
2021-08-20 15:49:34 +02:00
/>
<Container maxW={'container.md'} position='relative'>
2021-08-20 17:06:26 +02:00
<MdRenderer>
<GuideContent />
</MdRenderer>
2021-08-20 15:49:34 +02:00
</Container>
</Box>
<OpensourceBanner />
<UpdatesBanner />
<Footer />
</Box>
);
}
2021-09-03 09:45:46 +02:00
type StaticPathItem = {
params: {
guide: string
}
};
export async function getStaticPaths() {
const guides = getAllGuides();
const paramsList: StaticPathItem[] = guides.map(guide => ({
params: { 'guide': guide.id }
}));
return {
paths: paramsList,
fallback: false
};
}
type ContextType = {
params: {
guide: string
}
};
export async function getStaticProps(context: ContextType) {
const guideId: string = context?.params?.guide;
return {
props: {
guide: getGuideById(guideId)
}
};
}