diff --git a/apps/learneth/src/pages/Home/index.tsx b/apps/learneth/src/pages/Home/index.tsx index edb88ab6f59..0b861430acf 100644 --- a/apps/learneth/src/pages/Home/index.tsx +++ b/apps/learneth/src/pages/Home/index.tsx @@ -58,7 +58,7 @@ function HomePage(): JSX.Element { const [search, setSearch] = useState('') const debouncedSearch = useDebounced(search, 250) - const [showFilters, setShowFilters] = useState(false) + const [showFilters, setShowFilters] = useState(true) const [selectedLevels, setSelectedLevels] = useState([]) const [selectedTags, setSelectedTags] = useState([]) const [completedTutorials, setCompletedTutorials] = useState>({}) @@ -86,8 +86,8 @@ function HomePage(): JSX.Element { const rows: Array<{ id: string; levelNum: number; levelText: string; name: string subtitle: string; preview: string; stepsLen?: number; - duration?: number | string; tags: string[]; - }> = [] + duration?: number | string; tags: string[]; priority?: number; + }> = [] Object.keys(selectedRepo.group).forEach((levelKey) => { const levelNum = Number(levelKey) || 1 const levelText = LEVEL_LABEL[levelKey as LevelKey] ?? 'Beginner' @@ -103,10 +103,11 @@ function HomePage(): JSX.Element { levelText, name: entity.name || '', subtitle: tags.join(', '), - preview: mdToPlain(entity.description?.content || '', 280), + preview: mdToPlain(entity.metadata?.data?.summary || '', 280), stepsLen: entity.steps?.length, duration: entity.metadata?.data?.duration, - tags + tags, + priority: entity.metadata?.data?.priority, }) }) }) @@ -130,7 +131,27 @@ function HomePage(): JSX.Element { } list = list.filter(r => r.tags.some(t => filterTags.has(t))) } - return list + return list.sort((a, b) => { + if (a.levelNum !== b.levelNum) { + return a.levelNum - b.levelNum + } + + const aP = a.priority + const bP = b.priority + const aHasP = aP !== undefined && aP !== null + const bHasP = bP !== undefined && bP !== null + + if (aHasP && !bHasP) return -1 + if (!aHasP && bHasP) return 1 + + if (aHasP && bHasP) { + if (aP! !== bP!) { + return aP! - bP! + } + } + + return a.name.localeCompare(b.name) + }) }, [flatItems, debouncedSearch, selectedLevels, selectedTags]) return (