aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authornfebe <fenn25.fn@gmail.com>2025-01-30 09:29:15 +0100
committernextcloud-command <nextcloud-command@users.noreply.github.com>2025-01-30 17:35:00 +0000
commit8863b854204d71cbc1cf412e5abd6a0b7503bf18 (patch)
tree30b17d8bff59663298c8081a6ecb330e1591b042 /core
parentbf5a54d13268c208c2e0e5ec1e9c29962bd8829a (diff)
downloadnextcloud-server-8863b854204d71cbc1cf412e5abd6a0b7503bf18.tar.gz
nextcloud-server-8863b854204d71cbc1cf412e5abd6a0b7503bf18.zip
fix: Use `searchFrom` property for client side pluginsfix/noid/fix-unified-search-provider-id
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>
Diffstat (limited to 'core')
-rw-r--r--core/src/components/UnifiedSearch/UnifiedSearchModal.vue21
-rw-r--r--core/src/store/unified-search-external-filters.js4
-rw-r--r--core/src/unified-search.ts5
3 files changed, 17 insertions, 13 deletions
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 })
},
}