Browse Source

allow non-optional tags for multi-tag scopes with ! prefix to restore old behavior.

master
Gisle Aune 12 months ago
parent
commit
9e6bdb5fd4
  1. 11
      frontend/src/lib/components/controls/TagInput.svelte
  2. 2
      frontend/src/lib/modals/SprintCreateUpdateModal.svelte
  3. 33
      ports/mysql/items.go

11
frontend/src/lib/components/controls/TagInput.svelte

@ -1,7 +1,8 @@
<script lang="ts">
import Icon from "../layout/Icon.svelte";
import Icon from "../layout/Icon.svelte";
export let value: string[];
export let exclaimMode = false;
let nextTag = "";
@ -24,6 +25,14 @@
}
$: value = (value||[]).filter((e, i) => !value.slice(0, i).includes(e));
$: if (exclaimMode) {
value = (value||[]).filter((e, i) => (
e.startsWith("!")
? !value.slice(i+1).includes(e.slice(1))
: !value.slice(i+1).includes("!"+e)
));
}
</script>
<div class="tag-input">

2
frontend/src/lib/modals/SprintCreateUpdateModal.svelte

@ -158,7 +158,7 @@
<label for="aggregateName">Aggregate Name</label>
<input name="aggregateName" type="text" bind:value={sprint.aggregateName} />
<label for="tags">Tags</label>
<TagInput bind:value={sprint.tags} />
<TagInput exclaimMode bind:value={sprint.tags} />
{#if sprint.kind != SprintKind.Items}
<label for="aggregateValue">Aggregate Goal</label>
<input name="aggregateValue" type="number" bind:value={sprint.aggregateRequired} />

33
ports/mysql/items.go

@ -215,17 +215,36 @@ func (r *itemRepository) Fetch(ctx context.Context, filter models.ItemFilter) ([
}
res = genutils.RetainInPlace(res, func(item entities.Item) bool {
good := false
for _, tag := range filter.Tags {
if item.HasTag(tag) {
return true
} else if item.RequirementID != nil &&
(genutils.Contains(requirementTagMap[*item.RequirementID], tag) ||
genutils.Contains(projectTagMap[*item.ProjectID], tag)) {
return true
if strings.HasPrefix(tag, "!") {
tag = tag[1:]
if !item.HasTag(tag) {
if item.RequirementID != nil {
if !genutils.Contains(requirementTagMap[*item.RequirementID], tag) &&
!genutils.Contains(projectTagMap[*item.ProjectID], tag) {
return false
}
} else {
return false
}
}
good = true
} else {
if item.HasTag(tag) {
good = true
} else if item.RequirementID != nil &&
(genutils.Contains(requirementTagMap[*item.RequirementID], tag) ||
genutils.Contains(projectTagMap[*item.ProjectID], tag)) {
good = true
}
}
}
return false
return good
})
}

Loading…
Cancel
Save