computer-scienceangular-roadmapbackend-roadmapblockchain-roadmapdba-roadmapdeveloper-roadmapdevops-roadmapfrontend-roadmapgo-roadmaphactoberfestjava-roadmapjavascript-roadmapnodejs-roadmappython-roadmapqa-roadmapreact-roadmaproadmapstudy-planvue-roadmapweb3-roadmap
61 lines
1.7 KiB
61 lines
1.7 KiB
--- |
|
import CaptchaScripts from '../../components/Captcha/CaptchaScripts.astro'; |
|
import InteractiveRoadamp from '../../components/InteractiveRoadmap/InteractiveRoadmap.astro'; |
|
import MarkdownRoadmap from '../../components/MarkdownRoadmap.astro'; |
|
import RoadmapHeader from '../../components/RoadmapHeader.astro'; |
|
import BaseLayout from '../../layouts/BaseLayout.astro'; |
|
import { getRoadmapIds, RoadmapFrontmatter } from '../../lib/roadmap'; |
|
|
|
export async function getStaticPaths() { |
|
const roadmapIds = await getRoadmapIds(); |
|
|
|
return roadmapIds.map((roadmapId) => ({ |
|
params: { roadmapId }, |
|
})); |
|
} |
|
|
|
interface Params extends Record<string, string | undefined> { |
|
roadmapId: string; |
|
} |
|
|
|
const { roadmapId } = Astro.params as Params; |
|
const roadmapFile = await import(`../../roadmaps/${roadmapId}/${roadmapId}.md`); |
|
const roadmapData = roadmapFile.frontmatter as RoadmapFrontmatter; |
|
--- |
|
|
|
<BaseLayout |
|
title={roadmapData?.seo?.title} |
|
description={roadmapData.seo.description} |
|
keywords={roadmapData.seo.keywords} |
|
sponsor={roadmapData.sponsor} |
|
noIndex={roadmapData.isUpcoming} |
|
> |
|
<RoadmapHeader |
|
description={roadmapData.description} |
|
title={roadmapData.title} |
|
roadmapPermalink={`/${roadmapId}`} |
|
hasTopics={roadmapData.hasTopics} |
|
/> |
|
|
|
{ |
|
roadmapData.jsonUrl && ( |
|
<InteractiveRoadamp |
|
roadmapId={roadmapId} |
|
description={roadmapData.description} |
|
roadmapPermalink={`/${roadmapId}`} |
|
jsonUrl={roadmapData.jsonUrl} |
|
dimensions={roadmapData.dimensions} |
|
/> |
|
) |
|
} |
|
|
|
{ |
|
!roadmapData.jsonUrl && ( |
|
<MarkdownRoadmap> |
|
<roadmapFile.Content /> |
|
</MarkdownRoadmap> |
|
) |
|
} |
|
|
|
<CaptchaScripts slot="after-footer" /> |
|
</BaseLayout>
|
|
|