2023-09-11 10:31:30 -04:00
|
|
|
const sortby = (properties) => (a, b) => {
|
|
|
|
// if items is {prop1:value1, prop2:value2}
|
|
|
|
// then sort(['prop1', 'desc', 'prop2'])
|
|
|
|
// will sort by prop1 desc and prop2
|
2023-09-28 22:51:48 -04:00
|
|
|
for (let i = 0; i < properties.length; i++) {
|
|
|
|
const property = properties[i]
|
2023-09-11 10:31:30 -04:00
|
|
|
|
|
|
|
let order = -1
|
|
|
|
if (i + 1 < properties.length && properties[i + 1] === 'desc') {
|
|
|
|
order = 1
|
|
|
|
i++
|
|
|
|
}
|
|
|
|
|
2023-09-19 11:47:05 -04:00
|
|
|
const collator = new Intl.Collator('en', { numeric: true, sensitivity: 'base' })
|
|
|
|
const compare = collator.compare(a[property], b[property])
|
2023-09-19 12:10:17 -04:00
|
|
|
if (compare < 0) return order
|
2023-09-19 16:26:37 -04:00
|
|
|
if (compare > 0) return -order
|
2023-09-19 11:47:05 -04:00
|
|
|
|
2023-09-11 10:31:30 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
export { sortby }
|