feat(webui): proper set operations

feat/vault-scan-modes
Tomáš Mládek 2023-10-23 12:28:12 +02:00
parent 5cc013a42c
commit d0903de812
1 changed files with 32 additions and 4 deletions

View File

@ -12,15 +12,22 @@
export let spec: string;
const individualSpecs = spec.split(/(?=[+-])/);
const individualSpecs = spec.split(/(?=[+=-])/);
let includedGroups = individualSpecs
.filter((s) => s.startsWith("+"))
.map((s) => s.slice(1));
let requiredGroups = individualSpecs
.filter((s) => s.startsWith("="))
.map((s) => s.slice(1));
let excludedGroups = individualSpecs
.filter((s) => s.startsWith("-"))
.map((s) => s.slice(1));
$: if (includedGroups.length == 0 && excludedGroups.length == 0) {
$: if (
includedGroups.length === 0 &&
requiredGroups.length === 0 &&
excludedGroups.length === 0
) {
dispatch("close");
}
@ -56,6 +63,7 @@
let resultEntities = [];
async function updateResultEntities(
includedGroups: string[],
requiredGroups: string[],
excludedGroups: string[],
) {
const included = includedGroups.length
@ -69,6 +77,17 @@
)
).objects
: [];
const required = requiredGroups.length
? (
await api.query(
new Query().matches(
undefined,
ATTR_IN,
requiredGroups.map((g) => `@${g}`),
),
)
).objects
: [];
const excluded = excludedGroups.length
? (
await api.query(
@ -80,9 +99,11 @@
)
).objects
: [];
resultEntities = Object.keys(included).filter((e) => !(e in excluded));
resultEntities = Object.keys(included)
.filter((e) => !requiredGroups.length || Object.keys(required).includes(e))
.filter((e) => !Object.keys(excluded).includes(e));
}
$: updateResultEntities(includedGroups, excludedGroups);
$: updateResultEntities(includedGroups, requiredGroups, excludedGroups);
</script>
<div class="view" data-address-multi={resultEntities}>
@ -98,6 +119,13 @@
on:remove={(ev) =>
(includedGroups = includedGroups.filter((e) => e !== ev.detail))}
/>
<EntitySetEditor
entities={requiredGroups}
header={$i18n.t("Require")}
on:add={(ev) => (requiredGroups = [...requiredGroups, ev.detail])}
on:remove={(ev) =>
(requiredGroups = requiredGroups.filter((e) => e !== ev.detail))}
/>
<EntitySetEditor
entities={excludedGroups}
header={$i18n.t("Exclude")}