diff options
author | nfebe <fenn25.fn@gmail.com> | 2025-01-10 14:20:55 +0100 |
---|---|---|
committer | nfebe <fenn25.fn@gmail.com> | 2025-01-13 11:21:23 +0100 |
commit | ed59ccea46fc0b21e8ca0fd38822d30f09ceb30f (patch) | |
tree | d852828ee8de4f1f45b4d295d3583a7c333630ae /core | |
parent | 42c021fda262685125f71e2492336fdc503d5b68 (diff) | |
download | nextcloud-server-ed59ccea46fc0b21e8ca0fd38822d30f09ceb30f.tar.gz nextcloud-server-ed59ccea46fc0b21e8ca0fd38822d30f09ceb30f.zip |
feat: Adapt providers `disabled` property to match user applied filters
Some filters are only available for certain providers, the UI should give the user
a hint to what providers such filters are available in.
Currently, if a filter (date or person) is not support by an a provider, the provider is
blurred out in the places dropdown.
Signed-off-by: nfebe <fenn25.fn@gmail.com>
Diffstat (limited to 'core')
-rw-r--r-- | core/src/components/UnifiedSearch/UnifiedSearchModal.vue | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/core/src/components/UnifiedSearch/UnifiedSearchModal.vue b/core/src/components/UnifiedSearch/UnifiedSearchModal.vue index ef0883c5b25..7400956f96b 100644 --- a/core/src/components/UnifiedSearch/UnifiedSearchModal.vue +++ b/core/src/components/UnifiedSearch/UnifiedSearchModal.vue @@ -34,6 +34,7 @@ provider.id concatenated to provider.name is used to create the item id, if same then, there should be an issue. --> <NcActionButton v-for="provider in providers" :key="`${provider.id}-${provider.name.replace(/\s/g, '')}`" + :disabled="provider.disabled" @click="addProviderFilter(provider)"> <template #icon> <img :src="provider.icon" class="filter-button__icon" alt=""> @@ -378,22 +379,18 @@ export default defineComponent({ extraQueries: provider.extraParams, } + // This block of filter checks should be dynamic somehow and should be handled in + // nextcloud/search lib if (filters.dateFilterIsApplied) { if (provider.filters?.since && provider.filters?.until) { params.since = this.dateFilter.startFrom params.until = this.dateFilter.endAt - } else { - // Date filter is applied but provider does not support it, no need to search provider - return } } if (filters.personFilterIsApplied) { if (provider.filters?.person) { params.person = this.personFilter.user - } else { - // Person filter is applied but provider does not support it, no need to search provider - return } } @@ -493,6 +490,10 @@ export default defineComponent({ this.filters[existingPersonFilter].name = person.displayName } + this.providers.forEach(async (provider, index) => { + this.providers[index].disabled = !(await this.providerIsCompatibleWithFilters(provider, ['person'])) + }) + this.debouncedFind(this.searchQuery) unifiedSearchLogger.debug('Person filter applied', { person }) }, @@ -549,6 +550,7 @@ export default defineComponent({ if (filter.type === 'person') { this.personFilterIsApplied = false } + this.enableAllProviders() break } } @@ -587,6 +589,9 @@ export default defineComponent({ this.filters.push(this.dateFilter) } this.dateFilterIsApplied = true + this.providers.forEach(async (provider, index) => { + this.providers[index].disabled = !(await this.providerIsCompatibleWithFilters(provider, ['since', 'until'])) + }) this.debouncedFind(this.searchQuery) }, applyQuickDateRange(range) { @@ -677,6 +682,14 @@ export default defineComponent({ return flattenedArray }, + async providerIsCompatibleWithFilters(provider, filterIds) { + return filterIds.every(filterId => provider.filters?.[filterId] !== undefined) + }, + async enableAllProviders() { + this.providers.forEach(async (_, index) => { + this.providers[index].disabled = false + }) + }, }, }) </script> |