1
0
mirror of https://github.com/kamranahmedse/developer-roadmap.git synced 2025-08-11 03:34:00 +02:00

Fix sorting order of roadmaps

This commit is contained in:
Kamran Ahmed
2024-09-12 13:32:33 +01:00
parent ae58fa2a2a
commit 298b137a7d
2 changed files with 51 additions and 16 deletions

View File

@@ -1,6 +1,6 @@
import { useEffect, useMemo, useRef, useState } from 'react'; import { useEffect, useMemo, useRef, useState } from 'react';
import { cn } from '../../lib/classname.ts'; import { cn } from '../../lib/classname.ts';
import {Box, Filter, Group, X} from 'lucide-react'; import { Box, Filter, Group, X } from 'lucide-react';
import { import {
deleteUrlParam, deleteUrlParam,
getUrlParams, getUrlParams,
@@ -81,6 +81,18 @@ export function ProjectsPage(props: ProjectsPageProps) {
(group) => group.id === activeGroup, (group) => group.id === activeGroup,
); );
const requiredSortOrder = [
'Frontend',
'Backend',
'DevOps',
'Full-stack',
'JavaScript',
'Go',
'Python',
'Node.js',
'Java',
];
return ( return (
<div className="border-t bg-gray-100"> <div className="border-t bg-gray-100">
<button <button
@@ -122,20 +134,40 @@ export function ProjectsPage(props: ProjectsPageProps) {
selected={activeGroup === ''} selected={activeGroup === ''}
/> />
{roadmapsProjects.map((group) => ( {roadmapsProjects
<CategoryFilterButton .sort((a, b) => {
key={group.id} const aIndex = requiredSortOrder.indexOf(a.title);
onClick={() => { const bIndex = requiredSortOrder.indexOf(b.title);
setActiveGroup(group.id);
setIsFilterOpen(false); if (aIndex === -1 && bIndex === -1) {
document?.getElementById('filter-button')?.scrollIntoView(); return a.title.localeCompare(b.title);
setVisibleProjects(group.projects); }
setUrlParams({ g: group.id });
}} if (aIndex === -1) {
category={group.title} return 1;
selected={activeGroup === group.id} }
/>
))} if (bIndex === -1) {
return -1;
}
return aIndex - bIndex;
})
.map((group) => (
<CategoryFilterButton
key={group.id}
onClick={() => {
setActiveGroup(group.id);
setIsFilterOpen(false);
document
?.getElementById('filter-button')
?.scrollIntoView();
setVisibleProjects(group.projects);
setUrlParams({ g: group.id });
}}
category={group.title}
selected={activeGroup === group.id}
/>
))}
</div> </div>
</div> </div>
</div> </div>

View File

@@ -11,7 +11,10 @@ const allRoadmapIds = Object.keys(roadmapProjects);
const allRoadmaps = await getRoadmapsByIds(allRoadmapIds); const allRoadmaps = await getRoadmapsByIds(allRoadmapIds);
const enrichedRoadmaps = allRoadmaps.map((roadmap) => { const enrichedRoadmaps = allRoadmaps.map((roadmap) => {
const projects = roadmapProjects[roadmap.id]; const projects = (roadmapProjects[roadmap.id] || []).sort((a, b) => {
return a.frontmatter.sort - b.frontmatter.sort;
});
return { return {
id: roadmap.id, id: roadmap.id,
title: roadmap.frontmatter.briefTitle, title: roadmap.frontmatter.briefTitle,