Skip to content

Commit c17d892

Browse files
Merge pull request #50534 from nextcloud/backport/50129/stable31
[stable31] fix(unified-search): load more than 5 items in folder filter
2 parents ceadae2 + e74966a commit c17d892

File tree

7 files changed

+46
-32
lines changed

7 files changed

+46
-32
lines changed

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

+25-20
Original file line numberDiff line numberDiff line change
@@ -21,29 +21,34 @@ 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'),
28-
callback: () => {
29-
const filepicker = getFilePickerBuilder('Pick plain text files')
30-
.addMimeTypeFilter('httpd/unix-directory')
31-
.allowDirectories(true)
32-
.addButton({
33-
label: 'Pick',
34-
callback: (nodes: Node[]) => {
35-
logger.info('Folder picked', { folder: nodes[0] })
36-
const folder = nodes[0]
37-
emit('nextcloud:unified-search:add-filter', {
38-
id: 'files',
39-
payload: folder,
40-
filterUpdateText: t('files', 'Search in folder: {folder}', { folder: folder.basename }),
41-
filterParams: { path: folder.path },
42-
})
43-
},
44-
})
45-
.build()
46-
filepicker.pick()
28+
callback: (showFilePicker: boolean = true) => {
29+
if (showFilePicker) {
30+
const filepicker = getFilePickerBuilder('Pick plain text files')
31+
.addMimeTypeFilter('httpd/unix-directory')
32+
.allowDirectories(true)
33+
.addButton({
34+
label: 'Pick',
35+
callback: (nodes: Node[]) => {
36+
logger.info('Folder picked', { folder: nodes[0] })
37+
const folder = nodes[0]
38+
emit('nextcloud:unified-search:add-filter', {
39+
id: 'in-folder',
40+
appId: 'files',
41+
payload: folder,
42+
filterUpdateText: t('files', 'Search in folder: {folder}', { folder: folder.basename }),
43+
filterParams: { path: folder.path },
44+
})
45+
},
46+
})
47+
.build()
48+
filepicker.pick()
49+
} else {
50+
logger.debug('Folder search callback was handled without showing the file picker, it might already be open')
51+
}
4752
},
4853
})
4954
}

core/src/components/UnifiedSearch/UnifiedSearchModal.vue

+14-3
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,14 +502,21 @@ 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) {
510-
providerFilter.callback()
514+
// There is no way to know what should go into the callback currently
515+
// Here we are passing isProviderFilterApplied (boolean) which is a flag sent to the plugin
516+
// This is sent to the plugin so that depending on whether the filter is applied or not, the plugin can decide what to do
517+
// TODO : In nextcloud/search, this should be a proper interface that the plugin can implement
518+
const isProviderFilterApplied = this.filteredProviders.some(provider => provider.id === providerFilter.id)
519+
providerFilter.callback(!isProviderFilterApplied)
511520
}
512521
this.providerResultLimit = loadMoreResultsForProvider ? this.providerResultLimit : 5
513522
this.providerActionMenuIsOpen = false
@@ -521,6 +530,7 @@ export default defineComponent({
521530
}
522531
this.filteredProviders.push({
523532
id: providerFilter.id,
533+
appId: providerFilter.appId,
524534
name: providerFilter.name,
525535
icon: providerFilter.icon,
526536
type: providerFilter.type || 'provider',
@@ -649,6 +659,7 @@ export default defineComponent({
649659
this.updateDateFilter()
650660
},
651661
handlePluginFilter(addFilterEvent) {
662+
unifiedSearchLogger.debug('Handling plugin filter', { addFilterEvent })
652663
for (let i = 0; i < this.filteredProviders.length; i++) {
653664
const provider = this.filteredProviders[i]
654665
if (provider.id === addFilterEvent.id) {

core/src/store/unified-search-external-filters.js

+1-3
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@
44
*/
55
import { defineStore } from 'pinia'
66

7-
export const useSearchStore = defineStore({
8-
id: 'search',
9-
7+
export const useSearchStore = defineStore('search', {
108
state: () => ({
119
externalFilters: [],
1210
}),

dist/core-unified-search.js

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/core-unified-search.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/files-search.js

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/files-search.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)