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