Entity Sorter
The Nymph Entity Sorter lets you sort entities by their properties, including hierarchically.
Installation
npm install --save @nymphjs/sorter
Usage
Here's an overview:
import { Nymph } from '@nymphjs/nymph';
// or
import { Nymph } from '@nymphjs/client';
import PageClass from 'Page';
import { Sorter } from '@nymphjs/sorter';
const nymphOptions = {
// the options for your Nymph instance.
};
const nymph = new Nymph(nymphOptions);
const Page = nymph.addEntityClass(PageClass);
let pages = await nymph.getEntities({ class: Page });
const sorter = new Sorter(pages);
//
// ## Simple sort by some property.
//
sorter.sort('name');
// Pages are now sorted by name, with locale aware sorting.
console.log(pages);
sorter.sort('cdate');
// Pages are now sorted by creation date.
console.log(pages);
sorter.sort('cdate', { reverse: true });
// Pages are now sorted by creation date, newest first.
console.log(pages);
// Specifying your own comparator.
sorter.sort('name', { comparator: (a, b) => (a < b ? -1 : a > b ? 1 : 0) });
// Pages are now sorted by name, based on UTF-16 code points.
console.log(pages);
// Specifying options to the collator.
sorter.sort('name', {
collatorOptions: {
sensitivity: 'case',
caseFirst: 'upper',
numeric: true,
},
});
// Pages are now sorted by name, with uppercase coming first in case of
// otherwise identical entries, and numbers being sorted logically (2 < 10).
console.log(pages);
//
// ## Hierarchical sorting.
//
sorter.hsort('name', 'parent');
// Pages are now sorted by name, hierarchically. (All child pages come
// immediately after their parent.)
console.log(pages);
// You can specify the same options as before.
sorter.hsort('name', 'parent', {
collatorOptions: {
sensitivity: 'case',
caseFirst: 'upper',
numeric: true,
},
});
// Pages are now sorted by name, hierarchically, with uppercase coming first
// in case of otherwise identical entries, and numbers being sorted
// logically (2 < 10).
console.log(pages);