Skip to content

Commit d90b918

Browse files
authored
Merge pull request #50154 from nextcloud/backport/50128/stable30
[stable30] feat: Adapt providers `disabled` property to match user applied filters
2 parents 8bdaf80 + b582de5 commit d90b918

File tree

3 files changed

+22
-9
lines changed

3 files changed

+22
-9
lines changed

core/src/components/UnifiedSearch/UnifiedSearchModal.vue

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
provider.id concatenated to provider.name is used to create the item id, if same then, there should be an issue. -->
3535
<NcActionButton v-for="provider in providers"
3636
:key="`${provider.id}-${provider.name.replace(/\s/g, '')}`"
37+
:disabled="provider.disabled"
3738
@click="addProviderFilter(provider)">
3839
<template #icon>
3940
<img :src="provider.icon" class="filter-button__icon" alt="">
@@ -378,22 +379,18 @@ export default defineComponent({
378379
extraQueries: provider.extraParams,
379380
}
380381
382+
// This block of filter checks should be dynamic somehow and should be handled in
383+
// nextcloud/search lib
381384
if (filters.dateFilterIsApplied) {
382385
if (provider.filters?.since && provider.filters?.until) {
383386
params.since = this.dateFilter.startFrom
384387
params.until = this.dateFilter.endAt
385-
} else {
386-
// Date filter is applied but provider does not support it, no need to search provider
387-
return
388388
}
389389
}
390390
391391
if (filters.personFilterIsApplied) {
392392
if (provider.filters?.person) {
393393
params.person = this.personFilter.user
394-
} else {
395-
// Person filter is applied but provider does not support it, no need to search provider
396-
return
397394
}
398395
}
399396
@@ -493,6 +490,10 @@ export default defineComponent({
493490
this.filters[existingPersonFilter].name = person.displayName
494491
}
495492
493+
this.providers.forEach(async (provider, index) => {
494+
this.providers[index].disabled = !(await this.providerIsCompatibleWithFilters(provider, ['person']))
495+
})
496+
496497
this.debouncedFind(this.searchQuery)
497498
unifiedSearchLogger.debug('Person filter applied', { person })
498499
},
@@ -549,6 +550,7 @@ export default defineComponent({
549550
if (filter.type === 'person') {
550551
this.personFilterIsApplied = false
551552
}
553+
this.enableAllProviders()
552554
break
553555
}
554556
}
@@ -587,6 +589,9 @@ export default defineComponent({
587589
this.filters.push(this.dateFilter)
588590
}
589591
this.dateFilterIsApplied = true
592+
this.providers.forEach(async (provider, index) => {
593+
this.providers[index].disabled = !(await this.providerIsCompatibleWithFilters(provider, ['since', 'until']))
594+
})
590595
this.debouncedFind(this.searchQuery)
591596
},
592597
applyQuickDateRange(range) {
@@ -677,6 +682,14 @@ export default defineComponent({
677682
678683
return flattenedArray
679684
},
685+
async providerIsCompatibleWithFilters(provider, filterIds) {
686+
return filterIds.every(filterId => provider.filters?.[filterId] !== undefined)
687+
},
688+
async enableAllProviders() {
689+
this.providers.forEach(async (_, index) => {
690+
this.providers[index].disabled = false
691+
})
692+
},
680693
},
681694
})
682695
</script>

dist/core-unified-search.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/core-unified-search.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)