From 95b3f4ab5909532ca4bfdd66be7604666c991cec Mon Sep 17 00:00:00 2001 From: Michael Winter Date: Fri, 27 Feb 2026 22:30:30 +0100 Subject: [PATCH] Admin: add reverse chronological sorting and fix cache --- pages/admin.vue | 42 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/pages/admin.vue b/pages/admin.vue index 7d45f1d..1f09317 100644 --- a/pages/admin.vue +++ b/pages/admin.vue @@ -172,12 +172,42 @@ const searchFields = { talks: ['title', 'location', 'date'] } +const dateSortFields = { + works: 'date', + events: 'start_date', + releases: 'year', + talks: 'date' +} + const filteredItems = computed(() => { - if (!searchQuery.value.trim()) return items.value + let result = items.value + + if (selectedCollection.value !== 'publications') { + const dateField = dateSortFields[selectedCollection.value] + if (dateField) { + result = [...result].sort((a, b) => { + const dateA = new Date(a[dateField] || 0) + const dateB = new Date(b[dateField] || 0) + return dateB - dateA + }) + } + } else { + const getYear = (key) => parseInt(key.replace(/\D/g, '')) || 0 + const getSuffix = (key) => key.replace(/^Winter\d+/, '') || '' + + result = [...result].sort((a, b) => { + const yearA = getYear(a.citationKey) + const yearB = getYear(b.citationKey) + if (yearA !== yearB) return yearB - yearA + return getSuffix(b.citationKey).localeCompare(getSuffix(a.citationKey)) + }) + } + + if (!searchQuery.value.trim()) return result const query = searchQuery.value.toLowerCase() const fields = searchFields[selectedCollection.value] || [] - return items.value.filter(item => { + return result.filter(item => { for (const field of fields) { const value = field.split('.').reduce((obj, key) => obj?.[key], item) if (value && String(value).toLowerCase().includes(query)) { @@ -242,13 +272,13 @@ function getTitle(item) { } async function loadItems() { - const { data } = await useFetch(`/api/admin/${selectedCollection.value}`) - items.value = data.value || [] + const data = await $fetch(`/api/admin/${selectedCollection.value}`) + items.value = data || [] } async function loadFiles() { - const { data } = await useFetch(`/api/admin/files?folder=${selectedFolder.value}`) - files.value = data.value || [] + const data = await $fetch(`/api/admin/files?folder=${selectedFolder.value}`) + files.value = data || [] } function createNew() {