Files
frontend/src/common/string/compare.ts
Paul Bottein 2c0c48106d Add entities filtering and reordering for areas strategy dashboard (#24677)
* Add entities editor

* Save entities per domain and area

* Use hidden and reorder logic in dashboard

* Add overview hidden logic

* Don't use icon for nav

* Remove overview hidden

* Change default text

* Fix icons

* Rename config properties
2025-03-19 21:11:46 +01:00

67 lines
1.2 KiB
TypeScript

import memoizeOne from "memoize-one";
const collator = memoizeOne(
(language: string | undefined) => new Intl.Collator(language)
);
const caseInsensitiveCollator = memoizeOne(
(language: string | undefined) =>
new Intl.Collator(language, { sensitivity: "accent" })
);
const fallbackStringCompare = (a: string, b: string) => {
if (a < b) {
return -1;
}
if (a > b) {
return 1;
}
return 0;
};
export const stringCompare = (
a: string,
b: string,
language: string | undefined = undefined
) => {
// @ts-ignore
if (Intl?.Collator) {
return collator(language).compare(a, b);
}
return fallbackStringCompare(a, b);
};
export const caseInsensitiveStringCompare = (
a: string,
b: string,
language: string | undefined = undefined
) => {
// @ts-ignore
if (Intl?.Collator) {
return caseInsensitiveCollator(language).compare(a, b);
}
return fallbackStringCompare(a.toLowerCase(), b.toLowerCase());
};
export const orderCompare = (order: string[]) => (a: string, b: string) => {
const idxA = order.indexOf(a);
const idxB = order.indexOf(b);
if (idxA === idxB) {
return 0;
}
if (idxA === -1) {
return 1;
}
if (idxB === -1) {
return -1;
}
return idxA - idxB;
};