Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 33 additions & 34 deletions core/src/components/UnifiedSearch/UnifiedSearchModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -252,11 +252,10 @@ export default defineComponent({
providerResultLimit: 5,
dateFilter: { id: 'date', type: 'date', text: '', startFrom: null, endAt: null },
personFilter: { id: 'person', type: 'person', name: '' },
dateFilterIsApplied: false,
personFilterIsApplied: false,
filteredProviders: [],
searching: false,
searchQuery: '',
lastSearchQuery: '',
placessearchTerm: '',
dateTimeFilter: null,
filters: [],
Expand Down Expand Up @@ -369,10 +368,16 @@ export default defineComponent({
return
}

// Reset the provider result limit when performing a new search
if (query !== this.lastSearchQuery) {
this.providerResultLimit = 5
}
this.lastSearchQuery = query

this.searching = true
const newResults = []
const providersToSearch = this.filteredProviders.length > 0 ? this.filteredProviders : this.providers
const searchProvider = (provider, filters) => {
const searchProvider = (provider) => {
const params = {
type: provider.searchFrom ?? provider.id,
query,
Expand All @@ -382,18 +387,25 @@ export default defineComponent({

// This block of filter checks should be dynamic somehow and should be handled in
// nextcloud/search lib
if (filters.dateFilterIsApplied) {
if (provider.filters?.since && provider.filters?.until) {
params.since = this.dateFilter.startFrom
params.until = this.dateFilter.endAt
}
}
const activeFilters = this.filters.filter(filter => {
return filter.type !== 'provider' && this.providerIsCompatibleWithFilters(provider, [filter.type])
})

if (filters.personFilterIsApplied) {
if (provider.filters?.person) {
params.person = this.personFilter.user
activeFilters.forEach(filter => {
switch (filter.type) {
case 'date':
if (provider.filters?.since && provider.filters?.until) {
params.since = this.dateFilter.startFrom
params.until = this.dateFilter.endAt
}
break
case 'person':
if (provider.filters?.person) {
params.person = this.personFilter.user
}
break
}
}
})

if (this.providerResultLimit > 5) {
params.limit = this.providerResultLimit
Expand All @@ -404,12 +416,7 @@ export default defineComponent({

request().then((response) => {
newResults.push({
id: provider.id,
appId: provider.appId,
searchFrom: provider.searchFrom,
icon: provider.icon,
name: provider.name,
inAppSearch: provider.inAppSearch,
...provider,
results: response.data.ocs.data.entries,
})

Expand All @@ -419,12 +426,8 @@ export default defineComponent({
this.searching = false
})
}
providersToSearch.forEach(provider => {
const dateFilterIsApplied = this.dateFilterIsApplied
const personFilterIsApplied = this.personFilterIsApplied
searchProvider(provider, { dateFilterIsApplied, personFilterIsApplied })
})

providersToSearch.forEach(searchProvider)
},
updateResults(newResults) {
let updatedResults = [...this.results]
Expand Down Expand Up @@ -482,7 +485,7 @@ export default defineComponent({
})
},
applyPersonFilter(person) {
this.personFilterIsApplied = true

const existingPersonFilter = this.filters.findIndex(filter => filter.id === person.id)
if (existingPersonFilter === -1) {
this.personFilter.id = person.id
Expand All @@ -504,15 +507,15 @@ export default defineComponent({
},
async loadMoreResultsForProvider(provider) {
this.providerResultLimit += 5
// If load more result for filter, remove other filters
this.filters = this.filters.filter(filter => filter.id === provider.id)
// Remove all other providers from filteredProviders except the current "loadmore" provider
this.filteredProviders = this.filteredProviders.filter(filteredProvider => filteredProvider.id === provider.id)
// Plugin filters may have extra parameters, so we need to keep them
// See method handlePluginFilter for more details
if (this.filteredProviders.length > 0 && this.filteredProviders[0].isPluginFilter) {
provider = this.filteredProviders[0]
}
this.addProviderFilter(provider, true)
this.find(this.searchQuery)
},
addProviderFilter(providerFilter, loadMoreResultsForProvider = false) {
unifiedSearchLogger.debug('Applying provider filter', { providerFilter, loadMoreResultsForProvider })
Expand Down Expand Up @@ -556,14 +559,10 @@ export default defineComponent({
unifiedSearchLogger.debug('Search filters (recently removed)', { filters: this.filters })

} else {
// Remove non provider filters such as date and person filters
for (let i = 0; i < this.filters.length; i++) {
// Remove date and person filter
if (this.filters[i].id === 'date' || this.filters[i].id === filter.id) {
this.dateFilterIsApplied = false
if (this.filters[i].id === filter.id) {
this.filters.splice(i, 1)
if (filter.type === 'person') {
this.personFilterIsApplied = false
}
this.enableAllProviders()
break
}
Expand Down Expand Up @@ -602,7 +601,7 @@ export default defineComponent({
} else {
this.filters.push(this.dateFilter)
}
this.dateFilterIsApplied = true

this.providers.forEach(async (provider, index) => {
this.providers[index].disabled = !(await this.providerIsCompatibleWithFilters(provider, ['since', 'until']))
})
Expand Down
4 changes: 2 additions & 2 deletions dist/core-unified-search.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/core-unified-search.js.map

Large diffs are not rendered by default.

Loading