Bugfix in sorterByMetadataField - reverse order working correctly now
- new unit tests
This commit is contained in:
parent
e811d6d7e4
commit
24b37eb87c
|
@ -2274,3 +2274,38 @@ describe('CustomSortOrder.byMetadataFieldAlphabeticalReverse', () => {
|
|||
expect(result3).toBe(SORT_ITEMS_ARE_EQUAL)
|
||||
})
|
||||
})
|
||||
|
||||
describe('sorterByMetadataField', () => {
|
||||
it.each([
|
||||
[true,'abc','def',-1, 'a', 'a'],
|
||||
[true,'xyz','klm',1, 'b', 'b'],
|
||||
[true,'mmm','mmm',0, 'c', 'c'],
|
||||
[true,'mmm','mmm',-1, 'd', 'e'],
|
||||
[true,'mmm','mmm',1, 'e', 'd'],
|
||||
[true,'abc',undefined,-1, 'a','a'],
|
||||
[true,undefined,'klm',1, 'b','b'],
|
||||
[true,undefined,undefined,0, 'a','a'],
|
||||
[true,undefined,undefined,-1, 'a','b'],
|
||||
[true,undefined,undefined,1, 'd','c'],
|
||||
[false,'abc','def',1, 'a', 'a'],
|
||||
[false,'xyz','klm',-1, 'b', 'b'],
|
||||
[false,'mmm','mmm',0, 'c', 'c'],
|
||||
[false,'mmm','mmm',1, 'd', 'e'],
|
||||
[false,'mmm','mmm',-1, 'e', 'd'],
|
||||
[false,'abc',undefined,1, 'a','a'],
|
||||
[false,undefined,'klm',-1, 'b','b'],
|
||||
[false,undefined,undefined,0, 'a','a'],
|
||||
[false,undefined,undefined,1, 'a','b'],
|
||||
[false,undefined,undefined,-1, 'd','c'],
|
||||
|
||||
])('straight order %s, comparing %s and %s should return %s for sortStrings %s and %s',
|
||||
(straight: boolean, metadataA: string|undefined, metadataB: string|undefined, order: number, sortStringA: string, sortStringB) => {
|
||||
const sorterFn = sorterByMetadataField(!straight, false)
|
||||
const itemA: Partial<FolderItemForSorting> = {metadataFieldValue: metadataA, sortString: sortStringA}
|
||||
const itemB: Partial<FolderItemForSorting> = {metadataFieldValue: metadataB, sortString: sortStringB}
|
||||
const result = sorterFn(itemA as FolderItemForSorting, itemB as FolderItemForSorting)
|
||||
|
||||
// then
|
||||
expect(result).toBe(order)
|
||||
})
|
||||
})
|
||||
|
|
|
@ -71,7 +71,7 @@ const TrueAlphabetical: boolean = true
|
|||
const ReverseOrder: boolean = true
|
||||
const StraightOrder: boolean = false
|
||||
|
||||
const sorterByMetadataField:(reverseOrder?: boolean, trueAlphabetical?: boolean) => SorterFn = (reverseOrder: boolean, trueAlphabetical?: boolean) => {
|
||||
export const sorterByMetadataField:(reverseOrder?: boolean, trueAlphabetical?: boolean) => SorterFn = (reverseOrder: boolean, trueAlphabetical?: boolean) => {
|
||||
const collatorCompareFn: CollatorCompareFn = trueAlphabetical ? CollatorTrueAlphabeticalCompare : CollatorCompare
|
||||
return (a: FolderItemForSorting, b: FolderItemForSorting) => {
|
||||
if (reverseOrder) {
|
||||
|
@ -87,8 +87,8 @@ const sorterByMetadataField:(reverseOrder?: boolean, trueAlphabetical?: boolean)
|
|||
}
|
||||
}
|
||||
// Item with metadata goes before the w/o metadata
|
||||
if (a.metadataFieldValue) return reverseOrder ? 1 : -1
|
||||
if (b.metadataFieldValue) return reverseOrder ? -1 : 1
|
||||
if (a.metadataFieldValue) return -1
|
||||
if (b.metadataFieldValue) return 1
|
||||
// Fallback -> requested sort by metadata, yet none of two items contain it, use alphabetical by name
|
||||
return collatorCompareFn(a.sortString, b.sortString)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue