Skip to content

Commit

Permalink
fix: Use searchFrom property for client side plugins
Browse files Browse the repository at this point in the history
The client-side plugin `in-folder` uses the `files` provider, this makes it
overlap with the main files provider itself.

This change follows eecda06 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>
  • Loading branch information
nfebe committed Jan 30, 2025
1 parent bf5a54d commit 32752f0
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 13 deletions.
2 changes: 2 additions & 0 deletions apps/files/src/plugins/search/folderSearch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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) => {
Expand All @@ -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 },
Expand Down
20 changes: 11 additions & 9 deletions core/src/components/UnifiedSearch/UnifiedSearchModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -121,22 +121,22 @@
</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"
:key="index"
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>
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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,
})
Expand Down Expand Up @@ -500,11 +502,10 @@ export default defineComponent({
this.debouncedFind(this.searchQuery)
unifiedSearchLogger.debug('Person filter applied', { person })
},
loadMoreResultsForProvider(providerId) {
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)
//
this.filters = this.filters.filter(filter => filter.id === provider.id)
this.addProviderFilter(provider, true)
},
addProviderFilter(providerFilter, loadMoreResultsForProvider = false) {
Expand All @@ -531,6 +532,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',
Expand Down
4 changes: 2 additions & 2 deletions core/src/store/unified-search-external-filters.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 })
},
},
})
5 changes: 3 additions & 2 deletions core/src/unified-search.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ Vue.mixin({
interface UnifiedSearchAction {
id: string;
appId: string;
searchFrom: string;
label: string;
icon: string;
callback: () => void;
Expand All @@ -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 })
},
}

Expand Down

0 comments on commit 32752f0

Please sign in to comment.