diff options
author | nfebe <fenn25.fn@gmail.com> | 2025-01-30 09:29:15 +0100 |
---|---|---|
committer | nfebe <fenn25.fn@gmail.com> | 2025-01-31 12:44:35 +0100 |
commit | 66184addf2359add2b60a46d205dfb4eb82d4ed4 (patch) | |
tree | 1a6f24d6a8d8fb6de1f16873711852c3bda0f643 | |
parent | 405cd7627c24b54a5454bfd7f2774bdc9c38c85e (diff) | |
download | nextcloud-server-backport/50550/stable30.tar.gz nextcloud-server-backport/50550/stable30.zip |
fix: Use `searchFrom` property for client side pluginsbackport/50550/stable30
The client-side plugin `in-folder` uses the `files` provider, this makes it
overlap with the main files provider itself.
This change follows eecda06f1ad2832cc2a7b31d646458f730c8412a after it was discovered
that some apps/providers like `dav` use providers from another app like `contacts`
Signed-off-by: nfebe <fenn25.fn@gmail.com>
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
-rw-r--r-- | apps/files/src/plugins/search/folderSearch.ts | 2 | ||||
-rw-r--r-- | core/src/components/UnifiedSearch/UnifiedSearchModal.vue | 21 | ||||
-rw-r--r-- | core/src/store/unified-search-external-filters.js | 4 | ||||
-rw-r--r-- | core/src/unified-search.ts | 5 |
4 files changed, 19 insertions, 13 deletions
diff --git a/apps/files/src/plugins/search/folderSearch.ts b/apps/files/src/plugins/search/folderSearch.ts index 33dae31995c..626b1daa72b 100644 --- a/apps/files/src/plugins/search/folderSearch.ts +++ b/apps/files/src/plugins/search/folderSearch.ts @@ -23,6 +23,7 @@ function init() { OCA.UnifiedSearch.registerFilterAction({ id: 'in-folder', appId: 'files', + searchFrom: 'files', label: t('files', 'In folder'), icon: imagePath('files', 'app.svg'), callback: (showFilePicker: boolean = true) => { @@ -38,6 +39,7 @@ function init() { emit('nextcloud:unified-search:add-filter', { id: 'in-folder', appId: 'files', + searchFrom: 'files', payload: folder, filterUpdateText: t('files', 'Search in folder: {folder}', { folder: folder.basename }), filterParams: { path: folder.path }, diff --git a/core/src/components/UnifiedSearch/UnifiedSearchModal.vue b/core/src/components/UnifiedSearch/UnifiedSearchModal.vue index bfb7bd03484..08c3657ce78 100644 --- a/core/src/components/UnifiedSearch/UnifiedSearchModal.vue +++ b/core/src/components/UnifiedSearch/UnifiedSearchModal.vue @@ -121,7 +121,7 @@ </h3> <div v-for="providerResult in results" :key="providerResult.id" class="result"> <h4 :id="`unified-search-result-${providerResult.id}`" class="result-title"> - {{ providerResult.provider }} + {{ providerResult.name }} </h4> <ul class="result-items" :aria-labelledby="`unified-search-result-${providerResult.id}`"> <SearchResult v-for="(result, index) in providerResult.results" @@ -129,14 +129,14 @@ v-bind="result" /> </ul> <div class="result-footer"> - <NcButton type="tertiary-no-background" @click="loadMoreResultsForProvider(providerResult.id)"> + <NcButton type="tertiary-no-background" @click="loadMoreResultsForProvider(providerResult)"> {{ t('core', 'Load more results') }} <template #icon> <IconDotsHorizontal :size="20" /> </template> </NcButton> <NcButton v-if="providerResult.inAppSearch" alignment="end-reverse" type="tertiary-no-background"> - {{ t('core', 'Search in') }} {{ providerResult.provider }} + {{ t('core', 'Search in') }} {{ providerResult.name }} <template #icon> <IconArrowRight :size="20" /> </template> @@ -374,7 +374,7 @@ export default defineComponent({ const providersToSearch = this.filteredProviders.length > 0 ? this.filteredProviders : this.providers const searchProvider = (provider, filters) => { const params = { - type: provider.id, + type: provider.searchFrom ?? provider.id, query, cursor: null, extraQueries: provider.extraParams, @@ -406,7 +406,9 @@ export default defineComponent({ newResults.push({ id: provider.id, appId: provider.appId, - provider: provider.name, + searchFrom: provider.searchFrom, + icon: provider.icon, + name: provider.name, inAppSearch: provider.inAppSearch, results: response.data.ocs.data.entries, }) @@ -500,11 +502,11 @@ export default defineComponent({ this.debouncedFind(this.searchQuery) unifiedSearchLogger.debug('Person filter applied', { person }) }, - loadMoreResultsForProvider(providerId) { + async loadMoreResultsForProvider(provider) { this.providerResultLimit += 5 - // If user wants more result for a particular filter remove other filters??? - this.filters = this.filters.filter(filter => filter.id === providerId) - const provider = this.providers.find(provider => provider.id === providerId) + // If load more result for filter, remove other filters + this.filters = this.filters.filter(filter => filter.id === provider.id) + this.filteredProviders = this.filteredProviders.filter(filteredProvider => filteredProvider.id === provider.id) this.addProviderFilter(provider, true) }, addProviderFilter(providerFilter, loadMoreResultsForProvider = false) { @@ -531,6 +533,7 @@ export default defineComponent({ this.filteredProviders.push({ id: providerFilter.id, appId: providerFilter.appId, + searchFrom: providerFilter.searchFrom, name: providerFilter.name, icon: providerFilter.icon, type: providerFilter.type || 'provider', diff --git a/core/src/store/unified-search-external-filters.js b/core/src/store/unified-search-external-filters.js index fdc2ba047ca..55de34b8b2a 100644 --- a/core/src/store/unified-search-external-filters.js +++ b/core/src/store/unified-search-external-filters.js @@ -10,8 +10,8 @@ export const useSearchStore = defineStore('search', { }), actions: { - registerExternalFilter({ id, appId, label, callback, icon }) { - this.externalFilters.push({ id, appId, name: label, callback, icon, isPluginFilter: true }) + registerExternalFilter({ id, appId, searchFrom, label, callback, icon }) { + this.externalFilters.push({ id, appId, searchFrom, name: label, callback, icon, isPluginFilter: true }) }, }, }) diff --git a/core/src/unified-search.ts b/core/src/unified-search.ts index fd5f9cb1fdf..a13b1036da1 100644 --- a/core/src/unified-search.ts +++ b/core/src/unified-search.ts @@ -36,6 +36,7 @@ Vue.mixin({ interface UnifiedSearchAction { id: string; appId: string; + searchFrom: string; label: string; icon: string; callback: () => void; @@ -44,9 +45,9 @@ interface UnifiedSearchAction { // Register the add/register filter action API globally window.OCA = window.OCA || {} window.OCA.UnifiedSearch = { - registerFilterAction: ({ id, appId, label, callback, icon }: UnifiedSearchAction) => { + registerFilterAction: ({ id, appId, searchFrom, label, callback, icon }: UnifiedSearchAction) => { const searchStore = useSearchStore() - searchStore.registerExternalFilter({ id, appId, label, callback, icon }) + searchStore.registerExternalFilter({ id, appId, searchFrom, label, callback, icon }) }, } |