Skip to content

Commit eecda06

Browse files
committed
fix(unified-search): Use appId for searching
Each provider may search from a particular app so we should use that for searching. Before this commit, we used `provider.id` instead of `provider.appId` the problem with the previous approach is that it forces the provider id to be a valid search provider (an app that supports search) limiting the developers ability to use unique IDs to identify the different providers (especially plugin providers) inside the places filter. For example the Files search plugin "In folder" (search in folder plugin) was required to have id as `files` while the files provider itself already has id as `files`. Signed-off-by: nfebe <[email protected]>
1 parent 78ce667 commit eecda06

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

apps/files/src/plugins/search/folderSearch.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ function init() {
2121

2222
logger.info('Initializing unified search plugin: folder search from files app')
2323
OCA.UnifiedSearch.registerFilterAction({
24-
id: 'files',
24+
id: 'in-folder',
2525
appId: 'files',
2626
label: t('files', 'In folder'),
2727
icon: imagePath('files', 'app.svg'),
@@ -35,7 +35,8 @@ function init() {
3535
logger.info('Folder picked', { folder: nodes[0] })
3636
const folder = nodes[0]
3737
emit('nextcloud:unified-search:add-filter', {
38-
id: 'files',
38+
id: 'in-folder',
39+
appId: 'files',
3940
payload: folder,
4041
filterUpdateText: t('files', 'Search in folder: {folder}', { folder: folder.basename }),
4142
filterParams: { path: folder.path },

core/src/components/UnifiedSearch/UnifiedSearchModal.vue

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@ export default defineComponent({
374374
const providersToSearch = this.filteredProviders.length > 0 ? this.filteredProviders : this.providers
375375
const searchProvider = (provider, filters) => {
376376
const params = {
377-
type: provider.id,
377+
type: provider.appId,
378378
query,
379379
cursor: null,
380380
extraQueries: provider.extraParams,
@@ -397,13 +397,15 @@ export default defineComponent({
397397
398398
if (this.providerResultLimit > 5) {
399399
params.limit = this.providerResultLimit
400+
unifiedSearchLogger.debug('Limiting search to', params.limit)
400401
}
401402
402403
const request = unifiedSearch(params).request
403404
404405
request().then((response) => {
405406
newResults.push({
406407
id: provider.id,
408+
appId: provider.appId,
407409
provider: provider.name,
408410
inAppSearch: provider.inAppSearch,
409411
results: response.data.ocs.data.entries,
@@ -500,11 +502,13 @@ export default defineComponent({
500502
},
501503
loadMoreResultsForProvider(providerId) {
502504
this.providerResultLimit += 5
503-
this.filters = this.filters.filter(filter => filter.type !== 'provider')
505+
// If user wants more result for a particular filter remove other filters???
506+
this.filters = this.filters.filter(filter => filter.id === providerId)
504507
const provider = this.providers.find(provider => provider.id === providerId)
505508
this.addProviderFilter(provider, true)
506509
},
507510
addProviderFilter(providerFilter, loadMoreResultsForProvider = false) {
511+
unifiedSearchLogger.debug('Applying provider filter', { providerFilter, loadMoreResultsForProvider })
508512
if (!providerFilter.id) return
509513
if (providerFilter.isPluginFilter) {
510514
providerFilter.callback()
@@ -521,6 +525,7 @@ export default defineComponent({
521525
}
522526
this.filteredProviders.push({
523527
id: providerFilter.id,
528+
appId: providerFilter.appId,
524529
name: providerFilter.name,
525530
icon: providerFilter.icon,
526531
type: providerFilter.type || 'provider',
@@ -649,6 +654,7 @@ export default defineComponent({
649654
this.updateDateFilter()
650655
},
651656
handlePluginFilter(addFilterEvent) {
657+
unifiedSearchLogger.debug('Handling plugin filter', { addFilterEvent })
652658
for (let i = 0; i < this.filteredProviders.length; i++) {
653659
const provider = this.filteredProviders[i]
654660
if (provider.id === addFilterEvent.id) {

0 commit comments

Comments
 (0)