improve table sorting
sort immediately multiple keys stored initial order respectedfeat/vaults
parent
e1f033572b
commit
8894afa736
|
@ -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}
|
||||
|
|
Loading…
Reference in New Issue