Skip to content

Commit 2e45899

Browse files
committed
chore: allow empty label value
Signed-off-by: Olivier Vernin <olivier@vernin.me>
1 parent a1cb96f commit 2e45899

1 file changed

Lines changed: 21 additions & 6 deletions

File tree

src/components/scm/_filter.vue

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -411,17 +411,17 @@ export default {
411411
}
412412
413413
// Build labels as map[string]string as expected by the API.
414+
// An empty value means: filter by key regardless of value.
414415
const labels = {};
415416
const seen = new Set();
416417
for (const label of this.selectedLabels) {
417-
if (label.key && label.value) {
418-
const pairKey = `${label.key}::${label.value}`;
419-
if (seen.has(pairKey)) {
418+
if (label.key) {
419+
if (seen.has(label.key)) {
420420
continue;
421421
}
422422
423-
seen.add(pairKey);
424-
labels[label.key] = label.value;
423+
seen.add(label.key);
424+
labels[label.key] = label.value || "";
425425
}
426426
}
427427
if (Object.keys(labels).length > 0) {
@@ -535,6 +535,21 @@ export default {
535535
536536
async onLabelKeyChange(index) {
537537
const labelKey = this.selectedLabels[index].key;
538+
539+
const isDuplicateKey = this.selectedLabels.some((selectedLabel, selectedIndex) => {
540+
if (selectedIndex === index || !labelKey) {
541+
return false;
542+
}
543+
544+
return selectedLabel.key === labelKey;
545+
});
546+
547+
if (isDuplicateKey) {
548+
this.selectedLabels[index].key = null;
549+
this.selectedLabels[index].value = null;
550+
return;
551+
}
552+
538553
if (labelKey) {
539554
await this.getLabelValues(labelKey);
540555
}
@@ -564,7 +579,7 @@ export default {
564579
canAddNewLabelRow() {
565580
// Don't allow adding a new row if the last row is incomplete
566581
const lastLabel = this.selectedLabels[this.selectedLabels.length - 1];
567-
return lastLabel.key && lastLabel.value;
582+
return !!lastLabel.key;
568583
},
569584
570585
addLabelRow() {

0 commit comments

Comments
 (0)