diff --git a/web/server/vue-cli/src/components/Report/ReportFilter/Filters/FilePathFilter.vue b/web/server/vue-cli/src/components/Report/ReportFilter/Filters/FilePathFilter.vue index bcbd0d38e8..c2d9768b11 100644 --- a/web/server/vue-cli/src/components/Report/ReportFilter/Filters/FilePathFilter.vue +++ b/web/server/vue-cli/src/components/Report/ReportFilter/Filters/FilePathFilter.vue @@ -30,6 +30,22 @@ /> + + + + Filter by wildcard pattern: {{ treeFilter }} + + + @@ -79,7 +95,8 @@ variant="text" class="apply-btn" color="primary" - :disabled="treeSelection.length === 0" + :disabled="treeSelection.length === 0 && + !(patternSelected && treeFilter)" @click="applyTreeSelection(onApplyFinished)" > @@ -126,8 +143,13 @@ const anywhereId = "anywhere-filepath"; const allFileCounts = ref({}); const treeSelection = ref([]); const treeFilter = ref(""); +const patternSelected = ref(false); const route = useRoute(); +watch(treeFilter, () => { + patternSelected.value = false; +}); + const filteredFileCounts = computed(() => { if (!treeFilter.value) return allFileCounts.value; const pattern = treeFilter.value @@ -258,17 +280,27 @@ function fetchAllFileCounts() { function clearAll(onApplyFinished) { treeSelection.value = []; + patternSelected.value = false; baseSelectOptionFilter.clear(true); if (onApplyFinished) onApplyFinished(); } function applyTreeSelection(onApplyFinished) { - if (!treeSelection.value.length) return; const items = treeSelection.value.map(fp => { const filterId = isDirectory(fp) ? fp + "/*" : fp; return { id: filterId, title: filterId, count: "N/A" }; }); + + if (patternSelected.value && treeFilter.value) { + items.push({ + id: treeFilter.value, title: treeFilter.value, count: "N/A" + }); + } + + if (!items.length) return; + baseSelectOptionFilter.setSelectedItems(items); + patternSelected.value = false; if (onApplyFinished) onApplyFinished(); }