Admin: add reverse chronological sorting and fix cache
This commit is contained in:
parent
a62ea09760
commit
95b3f4ab59
|
|
@ -172,12 +172,42 @@ const searchFields = {
|
||||||
talks: ['title', 'location', 'date']
|
talks: ['title', 'location', 'date']
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const dateSortFields = {
|
||||||
|
works: 'date',
|
||||||
|
events: 'start_date',
|
||||||
|
releases: 'year',
|
||||||
|
talks: 'date'
|
||||||
|
}
|
||||||
|
|
||||||
const filteredItems = computed(() => {
|
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 query = searchQuery.value.toLowerCase()
|
||||||
const fields = searchFields[selectedCollection.value] || []
|
const fields = searchFields[selectedCollection.value] || []
|
||||||
|
|
||||||
return items.value.filter(item => {
|
return result.filter(item => {
|
||||||
for (const field of fields) {
|
for (const field of fields) {
|
||||||
const value = field.split('.').reduce((obj, key) => obj?.[key], item)
|
const value = field.split('.').reduce((obj, key) => obj?.[key], item)
|
||||||
if (value && String(value).toLowerCase().includes(query)) {
|
if (value && String(value).toLowerCase().includes(query)) {
|
||||||
|
|
@ -242,13 +272,13 @@ function getTitle(item) {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function loadItems() {
|
async function loadItems() {
|
||||||
const { data } = await useFetch(`/api/admin/${selectedCollection.value}`)
|
const data = await $fetch(`/api/admin/${selectedCollection.value}`)
|
||||||
items.value = data.value || []
|
items.value = data || []
|
||||||
}
|
}
|
||||||
|
|
||||||
async function loadFiles() {
|
async function loadFiles() {
|
||||||
const { data } = await useFetch(`/api/admin/files?folder=${selectedFolder.value}`)
|
const data = await $fetch(`/api/admin/files?folder=${selectedFolder.value}`)
|
||||||
files.value = data.value || []
|
files.value = data || []
|
||||||
}
|
}
|
||||||
|
|
||||||
function createNew() {
|
function createNew() {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue