mirror of https://github.com/rancher/ui.git
68 lines
1.4 KiB
JavaScript
68 lines
1.4 KiB
JavaScript
import { isArray } from '@ember/array';
|
|
import { get } from '@ember/object';
|
|
import { compare as compareVersion } from 'shared/utils/parse-version';
|
|
|
|
const LOCALE_SAFE = /^[\w-.\s,]*$/;
|
|
|
|
function lcStr(x) {
|
|
if ( typeof x === 'string' ) {
|
|
return x.toLowerCase();
|
|
} else {
|
|
return String(x).toLowerCase();
|
|
}
|
|
}
|
|
|
|
export function insensitiveCompare(a, b) {
|
|
if ( typeof a === 'string' || typeof b === 'string' ) {
|
|
a = lcStr(a);
|
|
b = lcStr(b);
|
|
} else {
|
|
return (a > b ? 1 : (a < b ? -1 : 0));
|
|
}
|
|
|
|
if ( LOCALE_SAFE.test(a + b) ) {
|
|
return (a > b ? 1 : (a < b ? -1 : 0));
|
|
} else {
|
|
return a.localeCompare(b, { sensitivity: 'base' });
|
|
}
|
|
}
|
|
|
|
export function sortInsensitiveBy(ary, ...fields) {
|
|
// sortInsensitiveBy(ary, field1, field2) or sortInsensitiveBy(ary, [field1, field2])
|
|
if ( fields.length === 1 && isArray(fields[0]) ) {
|
|
fields = fields[0];
|
|
}
|
|
|
|
return ary.sort((a, b) => {
|
|
let out = 0;
|
|
|
|
for ( var i = 0 ; i < fields.length ; i++ ) {
|
|
let aa = get(a, fields[i]);
|
|
let bb = get(b, fields[i]);
|
|
|
|
out = insensitiveCompare(aa, bb);
|
|
if ( out !== 0 ) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return out;
|
|
});
|
|
}
|
|
|
|
export function sortVersions(ary, key) {
|
|
let aa, bb;
|
|
|
|
return ary.sort((a, b) => {
|
|
if ( key ) {
|
|
aa = get(a, key);
|
|
bb = get(b, key);
|
|
} else {
|
|
aa = a;
|
|
bb = b;
|
|
}
|
|
|
|
return compareVersion(aa, bb);
|
|
});
|
|
}
|