feat(dashboard): add last updated at course sort option (#823)

Co-authored-by: Cursor Agent <[email protected]>
Co-authored-by: Rotimi Best <[email protected]>
This commit is contained in:
Rotimi Best
2026-08-04 18:20:25 +01:00
committed by GitHub
co-authored by Cursor Agent Rotimi Best
parent 753f9b3d7b
commit 9b9dccc07a
13 changed files with 26 additions and 0 deletions
@@ -19,6 +19,7 @@ export const EXERCISE_TEMPLATE_TAGS = {
/** Named sort keys for course lists (URL `sort`, localStorage, filter UI). */
export const CourseSortBy = {
DateCreated: 'date_created',
LastUpdatedAt: 'last_updated_at',
Published: 'published',
Lessons: 'lessons'
} as const;
@@ -68,6 +69,7 @@ export function parseCourseSortOrder(value: string | null | undefined): CourseSo
export const COURSE_SORT_OPTIONS = [
{ value: CourseSortBy.DateCreated, label: 'courses.course_filter.date_created' },
{ value: CourseSortBy.LastUpdatedAt, label: 'courses.course_filter.last_updated_at' },
{ value: CourseSortBy.Published, label: 'courses.course_filter.published' },
{ value: CourseSortBy.Lessons, label: 'courses.course_filter.lessons' }
] as const;
@@ -39,6 +39,13 @@
return coursesFiltered.sort(
(a, b) => new Date(a.createdAt ?? '').getTime() - new Date(b.createdAt ?? '').getTime()
);
} else if (sortKey === CourseSortBy.LastUpdatedAt) {
return coursesFiltered.sort((a, b) => {
const aUpdatedAt = new Date(a.updatedAt ?? a.createdAt ?? '').getTime();
const bUpdatedAt = new Date(b.updatedAt ?? b.createdAt ?? '').getTime();
return bUpdatedAt - aUpdatedAt;
});
} else if (sortKey === CourseSortBy.Published) {
return coursesFiltered.sort((a, b) => Number(b.isPublished) - Number(a.isPublished));
} else if (sortKey === CourseSortBy.Lessons) {
@@ -2613,6 +2613,7 @@
"most_lessons": "Lektioner: Flest først",
"fewest_lessons": "Lektioner: Færrest først",
"date_created": "Dato oprettet",
"last_updated_at": "Sidst opdateret",
"published": "Udgivet",
"lessons": "Lektioner"
},
@@ -2613,6 +2613,7 @@
"most_lessons": "Lektionen: Meiste zuerst",
"fewest_lessons": "Lektionen: Wenigste zuerst",
"date_created": "Erstellungsdatum",
"last_updated_at": "Zuletzt aktualisiert",
"published": "Veröffentlicht",
"lessons": "Lektionen"
},
@@ -1861,6 +1861,7 @@
"most_lessons": "Lessons: Most first",
"fewest_lessons": "Lessons: Fewest first",
"date_created": "Date Created",
"last_updated_at": "Last Updated At",
"published": "Published",
"lessons": "Lessons"
},
@@ -2613,6 +2613,7 @@
"most_lessons": "Lecciones: más primero",
"fewest_lessons": "Lecciones: menos primero",
"date_created": "Fecha de creación",
"last_updated_at": "Última actualización",
"published": "Publicado",
"lessons": "Lecciones"
},
@@ -2613,6 +2613,7 @@
"most_lessons": "Leçons : plus d'abord",
"fewest_lessons": "Leçons : moins d'abord",
"date_created": "Date de création",
"last_updated_at": "Dernière mise à jour",
"published": "Publié",
"lessons": "Leçons"
},
@@ -2613,6 +2613,7 @@
"most_lessons": "पाठ: सबसे अधिक पहले",
"fewest_lessons": "पाठ: सबसे कम पहले",
"date_created": "दिनांक निर्मित",
"last_updated_at": "अंतिम अपडेट",
"published": "प्रकाशित",
"lessons": "सबक"
},
@@ -2613,6 +2613,7 @@
"most_lessons": "Lekcje: od największej liczby",
"fewest_lessons": "Lekcje: od najmniejszej liczby",
"date_created": "Data utworzenia",
"last_updated_at": "Ostatnia aktualizacja",
"published": "Opublikowano",
"lessons": "Lekcje"
},
@@ -2613,6 +2613,7 @@
"most_lessons": "Lições: mais primeiro",
"fewest_lessons": "Lições: menos primeiro",
"date_created": "Data de criação",
"last_updated_at": "Última atualização",
"published": "Publicado",
"lessons": "Lições"
},
@@ -2613,6 +2613,7 @@
"most_lessons": "Уроки: сначала больше",
"fewest_lessons": "Уроки: сначала меньше",
"date_created": "Дата создания",
"last_updated_at": "Последнее обновление",
"published": "Опубликовано",
"lessons": "Уроки"
},
@@ -2613,6 +2613,7 @@
"most_lessons": "Bài học: Nhiều nhất trước",
"fewest_lessons": "Bài học: Ít nhất trước",
"date_created": "Ngày tạo",
"last_updated_at": "Cập nhật lần cuối",
"published": "Đã xuất bản",
"lessons": "Bài học"
},
@@ -156,6 +156,13 @@
? new Date(a.createdAt ?? '').getTime() - new Date(b.createdAt ?? '').getTime()
: new Date(b.createdAt ?? '').getTime() - new Date(a.createdAt ?? '').getTime()
);
} else if (sortKey === CourseSortBy.LastUpdatedAt) {
return sortedCourses.sort((a, b) => {
const aUpdatedAt = new Date(a.updatedAt ?? a.createdAt ?? '').getTime();
const bUpdatedAt = new Date(b.updatedAt ?? b.createdAt ?? '').getTime();
return selectedOrder === CourseSortOrder.Asc ? aUpdatedAt - bUpdatedAt : bUpdatedAt - aUpdatedAt;
});
} else if (sortKey === CourseSortBy.Published) {
return sortedCourses.sort((a, b) =>
selectedOrder === CourseSortOrder.Asc