diff --git a/server/src/util.ts b/server/src/util.ts index 282d4956d..c3a1dc852 100644 --- a/server/src/util.ts +++ b/server/src/util.ts @@ -63,12 +63,13 @@ export function betterSorter(a: string, b: string) { */ export function validateItem(validator: any | Array, value: any): boolean { if (typeof value === 'object') { - return objectLoop(value, (v) => { + // invert signal so that an early exit mean that a match was found! + return !objectLoop(value, (v) => { // early exit to not infinitively loop through objects if (typeof v === 'object') return true - // check for each childs - return validateItem(validator, v) + // check for each childs until one match + return !validateItem(validator, v) }) } @@ -104,10 +105,14 @@ export function validateItem(validator: any | Array, value: any): boolean { * @returns the sorted data */ export function handleSort(data: Array, query: Query) { - const sort: Query['sort'] = query.sort ?? {field: 'id', order: 'ASC'} + // handle when data has no entries + if (data.length === 0) { + return data + } + const firstEntry = data[0] + const sort: Query['sort'] = query.sort ?? {field: 'releaseDate' in firstEntry ? 'releaseDate' : 'id', order: 'ASC'} const field = sort.field const order = sort.order ?? 'ASC' - const firstEntry = data[0] // early exit if the order is not correctly set if (order !== 'ASC' && order !== 'DESC') { @@ -142,7 +147,7 @@ export function handleSort(data: Array, query: Query) { * @returns the data that is in the paginated query */ export function handlePagination(data: Array, query: Query) { - if (!query.pagination) { + if (!query.pagination || data.length === 0) { return data } const itemsPerPage = query.pagination.itemsPerPage ?? 100