improve table sorting

sort immediately
multiple keys stored
initial order respected
feat/vaults
Tomáš Mládek 2021-12-20 13:22:30 +01:00
parent e1f033572b
commit 8894afa736
No known key found for this signature in database
GPG Key ID: ED21612889E75EC5
1 changed files with 49 additions and 14 deletions

View File

@ -58,24 +58,51 @@
}
// Sorting
let sortKeys: { [key: string]: string } = {};
let sortKeys: { [key: string]: string[] } = {};
function addSortKeys(key: string, vals: string[]) {
if (!sortKeys[key]) {
sortKeys[key] = [];
}
vals.forEach((val) => {
if (!sortKeys[key].includes(val)) {
sortKeys[key].push(val);
}
});
}
entries.forEach((entry) => {
addSortKeys(entry.entity, entry.listing.getObject(entry.entity).identify());
if (entry.value.t === "Address") {
addSortKeys(
String(entry.value.c),
entry.listing.getObject(String(entry.value.c)).identify()
);
}
});
$: sortedAttributes = entries
.concat()
.sort((aEntry, bEntry) => {
if (
sortKeys[aEntry.value.c] === undefined ||
sortKeys[bEntry.value.c] === undefined
!Boolean(sortKeys[aEntry.value.c]?.length) ||
!Boolean(sortKeys[bEntry.value.c]?.length)
) {
if (sortKeys[aEntry.value.c] && !sortKeys[bEntry.value.c]) {
if (
Boolean(sortKeys[aEntry.value.c]?.length) &&
!Boolean(sortKeys[bEntry.value.c]?.length)
) {
return -1;
} else if (!sortKeys[aEntry.value.c] && sortKeys[bEntry.value.c]) {
} else if (
!Boolean(sortKeys[aEntry.value.c]?.length) &&
Boolean(sortKeys[bEntry.value.c]?.length)
) {
return 1;
} else {
return String(aEntry.value.c).localeCompare(String(bEntry.value.c));
}
} else {
return sortKeys[aEntry.value.c].localeCompare(
sortKeys[bEntry.value.c],
return sortKeys[aEntry.value.c][0].localeCompare(
sortKeys[bEntry.value.c][0],
undefined,
{ numeric: true, sensitivity: "base" }
);
@ -89,18 +116,26 @@
})
.sort((aEntry, bEntry) => {
if (
sortKeys[aEntry.entity] === undefined ||
sortKeys[bEntry.entity] === undefined
!Boolean(sortKeys[aEntry.entity]?.length) ||
!Boolean(sortKeys[bEntry.entity]?.length)
) {
if (sortKeys[aEntry.entity] && !sortKeys[bEntry.entity]) {
if (
Boolean(sortKeys[aEntry.entity]?.length) &&
!Boolean(sortKeys[bEntry.entity]?.length)
) {
return -1;
} else if (!sortKeys[aEntry.entity] && sortKeys[bEntry.entity]) {
} else if (
!Boolean(sortKeys[aEntry.entity]?.length) &&
Boolean(sortKeys[bEntry.entity]?.length)
) {
return 1;
} else {
return aEntry.entity.localeCompare(bEntry.entity);
}
} else {
return sortKeys[aEntry.entity].localeCompare(sortKeys[bEntry.entity]);
return sortKeys[aEntry.entity][0].localeCompare(
sortKeys[bEntry.entity][0]
);
}
});
@ -196,7 +231,7 @@
labels={entry.listing.getObject(String(entry.entity)).identify()}
address={entry.entity}
on:resolved={(event) => {
sortKeys[entry.entity] = event.detail[0];
addSortKeys(entry.entity, event.detail);
}}
/>
</td>
@ -226,7 +261,7 @@
.identify()}
resolve={Boolean(resolve[entry.address]) || true}
on:resolved={(event) => {
sortKeys[entry.value.c] = event.detail[0];
addSortKeys(String(entry.value.c), event.detail);
}}
/>
{:else}