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:
@@ -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>
|
||||||
|
@@ -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,
|
||||||
|
Reference in New Issue
Block a user