1
0
mirror of https://github.com/kamranahmedse/developer-roadmap.git synced 2025-08-13 20:54:16 +02:00

Add roadmaps listing page

This commit is contained in:
Kamran Ahmed
2023-01-02 18:14:45 +04:00
parent b176d2c23e
commit 726b9e6d66
3 changed files with 46 additions and 3 deletions

View File

@@ -0,0 +1,30 @@
---
import type { RoadmapFrontmatter } from '../lib/roadmap';
export interface Props {
roadmap: RoadmapFrontmatter;
}
const { roadmap } = Astro.props;
---
<a
href={`/${roadmap.id}`}
class="bg-gradient-to-r from-slate-900 to-amber-900 hover:from-stone-900 hover:to-stone-900 hover:bg-gray-100 flex flex-col p-2.5 sm:p-5 rounded-md sm:rounded-lg border border-gray-200 relative h-full"
>
<span
class="font-regular sm:font-medium text-md sm:text-xl hover:text-gray-50 text-gray-200 sm:text-gray-100 mb-0 sm:mb-1.5"
>{roadmap.title}</span
>
<span class="text-sm leading-normal text-gray-400 hidden sm:block"
>{roadmap.description}</span
>
{
roadmap.isNew && (
<span class="absolute bottom-1 right-1 bg-yellow-300 text-yellow-900 text-xs font-medium px-1 sm:px-1.5 py-0.5 rounded-sm uppercase">
New
</span>
)
}
</a>

View File

@@ -12,6 +12,7 @@ export interface RoadmapFrontmatter {
title: string;
description: string;
hasTopics: boolean;
isNew: boolean;
dimensions: {
width: number;
height: number;
@@ -63,5 +64,7 @@ export async function getRoadmapsByTag(tag: string): Promise<RoadmapFileType[]>
const roadmapFiles: MarkdownFileType<RoadmapFrontmatter>[] = Object.values(roadmapFilesMap);
const filteredRoadmaps = roadmapFiles.filter(roadmapFile => roadmapFile.frontmatter.tags.includes(tag));
return filteredRoadmaps;
return filteredRoadmaps.sort(
(a, b) => a.frontmatter.order - b.frontmatter.order
);
}

View File

@@ -1,4 +1,5 @@
---
import GridRoadmapItem from '../components/GridRoadmapItem.astro';
import SimplePageHeader from '../components/SimplePageHeader.astro';
import BaseLayout from '../layouts/BaseLayout.astro';
import { getRoadmapsByTag } from '../lib/roadmap';
@@ -17,8 +18,17 @@ const skillRoadmaps = await getRoadmapsByTag('skill-roadmap');
<div class="bg-gray-100 pt-4 pb-14 sm:pt-8 sm:pb-16">
<div class="container">
<div class="grid grid-cols-1 sm:grid-cols-2 gap-0.5 sm:gap-3">
<h1>{ roleRoadmaps.length }</h1>
<h1>{ skillRoadmaps.length }</h1>
{
roleRoadmaps.map((roleRoadmap) => (
<GridRoadmapItem roadmap={roleRoadmap.frontmatter} />
))
}
{
skillRoadmaps.map((skillRoadmap) => (
<GridRoadmapItem roadmap={skillRoadmap.frontmatter} />
))
}
</div>
</div>
</div>