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)
|
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 ReverseOrder: boolean = true
|
||||||
const StraightOrder: boolean = false
|
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
|
const collatorCompareFn: CollatorCompareFn = trueAlphabetical ? CollatorTrueAlphabeticalCompare : CollatorCompare
|
||||||
return (a: FolderItemForSorting, b: FolderItemForSorting) => {
|
return (a: FolderItemForSorting, b: FolderItemForSorting) => {
|
||||||
if (reverseOrder) {
|
if (reverseOrder) {
|
||||||
|
@ -87,8 +87,8 @@ const sorterByMetadataField:(reverseOrder?: boolean, trueAlphabetical?: boolean)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Item with metadata goes before the w/o metadata
|
// Item with metadata goes before the w/o metadata
|
||||||
if (a.metadataFieldValue) return reverseOrder ? 1 : -1
|
if (a.metadataFieldValue) return -1
|
||||||
if (b.metadataFieldValue) return reverseOrder ? -1 : 1
|
if (b.metadataFieldValue) return 1
|
||||||
// Fallback -> requested sort by metadata, yet none of two items contain it, use alphabetical by name
|
// Fallback -> requested sort by metadata, yet none of two items contain it, use alphabetical by name
|
||||||
return collatorCompareFn(a.sortString, b.sortString)
|
return collatorCompareFn(a.sortString, b.sortString)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue