[ui] fix & optimize sort (wow)

feat/vaults
Tomáš Mládek 2022-02-19 18:38:36 +01:00
parent 5cef2b8960
commit 9ce4c21b93
No known key found for this signature in database
GPG Key ID: 65E225C8B3E2ED8A
2 changed files with 55 additions and 59 deletions

View File

@ -113,7 +113,8 @@
entries.forEach((entry) => { entries.forEach((entry) => {
addSortKeys( addSortKeys(
entry.entity, entry.entity,
$labelListing.getObject(entry.entity).identify() $labelListing.getObject(entry.entity).identify(),
false
); );
if (entry.value.t === "Address") { if (entry.value.t === "Address") {

View File

@ -3,44 +3,43 @@ import type { UpEntry } from "upend";
export type SortKeys = { [key: string]: string[] }; export type SortKeys = { [key: string]: string[] };
export function sortByValue(entries: UpEntry[], sortKeys: SortKeys): void { export function sortByValue(entries: UpEntry[], sortKeys: SortKeys): void {
entries entries.sort((aEntry, bEntry) => {
.sort((aEntry, bEntry) => { return String(aEntry.value.c).length - String(bEntry.value.c).length;
return String(aEntry.value.c).length - String(bEntry.value.c).length; });
}) entries.sort((aEntry, bEntry) => {
.sort((aEntry, bEntry) => { if (aEntry.value.t === "Number" && bEntry.value.t === "Number") {
if (aEntry.value.t === "Number" && bEntry.value.t === "Number") { return bEntry.value.c - aEntry.value.c;
return bEntry.value.c - aEntry.value.c; }
}
if (
!sortKeys[aEntry.value.c]?.length ||
!sortKeys[bEntry.value.c]?.length
) {
if ( if (
!sortKeys[aEntry.value.c]?.length || Boolean(sortKeys[aEntry.value.c]?.length) &&
!sortKeys[bEntry.value.c]?.length !sortKeys[bEntry.value.c]?.length
) { ) {
if ( return -1;
Boolean(sortKeys[aEntry.value.c]?.length) && } else if (
!sortKeys[bEntry.value.c]?.length !sortKeys[aEntry.value.c]?.length &&
) { Boolean(sortKeys[bEntry.value.c]?.length)
return -1; ) {
} else if ( return 1;
!sortKeys[aEntry.value.c]?.length &&
Boolean(sortKeys[bEntry.value.c]?.length)
) {
return 1;
} else {
return String(aEntry.value.c).localeCompare(
String(bEntry.value.c),
undefined,
{ numeric: true, sensitivity: "base" }
);
}
} else { } else {
return sortKeys[aEntry.value.c][0].localeCompare( return String(aEntry.value.c).localeCompare(
sortKeys[bEntry.value.c][0], String(bEntry.value.c),
undefined, undefined,
{ numeric: true, sensitivity: "base" } { numeric: true, sensitivity: "base" }
); );
} }
}); } else {
return sortKeys[aEntry.value.c][0].localeCompare(
sortKeys[bEntry.value.c][0],
undefined,
{ numeric: true, sensitivity: "base" }
);
}
});
} }
export function sortByAttribute(entries: UpEntry[]): void { export function sortByAttribute(entries: UpEntry[]): void {
@ -50,34 +49,30 @@ export function sortByAttribute(entries: UpEntry[]): void {
} }
export function sortByEntity(entries: UpEntry[], sortKeys: SortKeys): void { export function sortByEntity(entries: UpEntry[], sortKeys: SortKeys): void {
entries entries.sort((aEntry, bEntry) => {
.sort((aEntry, bEntry) => { return aEntry.attribute.localeCompare(bEntry.attribute);
return aEntry.attribute.localeCompare(bEntry.attribute); });
}) entries.sort((aEntry, bEntry) => {
.sort((aEntry, bEntry) => { if (!sortKeys[aEntry.entity]?.length || !sortKeys[bEntry.entity]?.length) {
if ( if (
!sortKeys[aEntry.entity]?.length || Boolean(sortKeys[aEntry.entity]?.length) &&
!sortKeys[bEntry.entity]?.length !sortKeys[bEntry.entity]?.length
) { ) {
if ( return -1;
Boolean(sortKeys[aEntry.entity]?.length) && } else if (
!sortKeys[bEntry.entity]?.length !sortKeys[aEntry.entity]?.length &&
) { Boolean(sortKeys[bEntry.entity]?.length)
return -1; ) {
} else if ( return 1;
!sortKeys[aEntry.entity]?.length &&
Boolean(sortKeys[bEntry.entity]?.length)
) {
return 1;
} else {
return aEntry.entity.localeCompare(bEntry.entity);
}
} else { } else {
return sortKeys[aEntry.entity][0].localeCompare( return aEntry.entity.localeCompare(bEntry.entity);
sortKeys[bEntry.entity][0]
);
} }
}); } else {
return sortKeys[aEntry.entity][0].localeCompare(
sortKeys[bEntry.entity][0]
);
}
});
} }
export function defaultEntitySort( export function defaultEntitySort(
@ -85,9 +80,9 @@ export function defaultEntitySort(
sortKeys: SortKeys sortKeys: SortKeys
): UpEntry[] { ): UpEntry[] {
const result = entries.concat(); const result = entries.concat();
sortByValue(entries, sortKeys); sortByValue(result, sortKeys);
sortByAttribute(entries); sortByAttribute(result);
sortByEntity(entries, sortKeys); sortByEntity(result, sortKeys);
return result; return result;
} }
@ -96,8 +91,8 @@ export function entityValueSort(
sortKeys: SortKeys sortKeys: SortKeys
): UpEntry[] { ): UpEntry[] {
const result = entries.concat(); const result = entries.concat();
sortByEntity(entries, sortKeys); sortByEntity(result, sortKeys);
sortByAttribute(entries); sortByAttribute(result);
sortByValue(entries, sortKeys); sortByValue(result, sortKeys);
return result; return result;
} }