mirror of
https://github.com/home-assistant/frontend.git
synced 2025-11-06 09:29:40 +00:00
* 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
67 lines
1.2 KiB
TypeScript
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;
|
|
};
|