diff options
author | fenn-cs <fenn25.fn@gmail.com> | 2023-11-22 15:47:08 +0100 |
---|---|---|
committer | nextcloud-command <nextcloud-command@users.noreply.github.com> | 2023-11-23 13:02:27 +0000 |
commit | a67905a8c63c24aff34c01cb9fd9f6ca26b6a77e (patch) | |
tree | 0f70151dda4117d6bb2f6763e31c9411f8f362aa /core | |
parent | c5caae1bf0caa6e938ead478f59044b726eab269 (diff) | |
download | nextcloud-server-a67905a8c63c24aff34c01cb9fd9f6ca26b6a77e.tar.gz nextcloud-server-a67905a8c63c24aff34c01cb9fd9f6ca26b6a77e.zip |
Add app-based filtering to global search
Emit search queries from the global search modal that would trigger
list filtering in various apps that support it.
Signed-off-by: fenn-cs <fenn25.fn@gmail.com>
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
Diffstat (limited to 'core')
-rw-r--r-- | core/src/views/GlobalSearchModal.vue | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/core/src/views/GlobalSearchModal.vue b/core/src/views/GlobalSearchModal.vue index d7e911c35fa..b054b67633b 100644 --- a/core/src/views/GlobalSearchModal.vue +++ b/core/src/views/GlobalSearchModal.vue @@ -1,6 +1,6 @@ <template> - <NcModal v-if="isVisible" - id="global-search" + <NcModal id="global-search" + ref="globalSearchModal" :name="t('core', 'Global search')" :show.sync="isVisible" :clear-view-delay="0" @@ -115,6 +115,14 @@ </div> </div> </div> + <div v-if="supportFiltering()" class="global-search-modal__results"> + <NcButton @click="closeModal"> + {{ t('core', 'Filter in current view') }} + <template #icon> + <FilterIcon :size="20" /> + </template> + </NcButton> + </div> </div> </NcModal> </template> @@ -125,6 +133,7 @@ import AccountGroup from 'vue-material-design-icons/AccountGroup.vue' import CalendarRangeIcon from 'vue-material-design-icons/CalendarRange.vue' import CustomDateRangeModal from '../components/GlobalSearch/CustomDateRangeModal.vue' import DotsHorizontalIcon from 'vue-material-design-icons/DotsHorizontal.vue' +import FilterIcon from 'vue-material-design-icons/Filter.vue' import FilterChip from '../components/GlobalSearch/SearchFilterChip.vue' import FlaskEmpty from 'vue-material-design-icons/FlaskEmpty.vue' import ListBox from 'vue-material-design-icons/ListBox.vue' @@ -140,6 +149,7 @@ import SearchableList from '../components/GlobalSearch/SearchableList.vue' import SearchResult from '../components/GlobalSearch/SearchResult.vue' import debounce from 'debounce' +import { emit } from '@nextcloud/event-bus' import { getProviders, search as globalSearch, getContacts } from '../services/GlobalSearchService.js' export default { @@ -150,6 +160,7 @@ export default { CalendarRangeIcon, CustomDateRangeModal, DotsHorizontalIcon, + FilterIcon, FilterChip, FlaskEmpty, ListBox, @@ -227,6 +238,9 @@ export default { this.results = [] return } + if (this.supportFiltering()) { + emit('nextcloud:unified-search.search', { query }) + } const newResults = [] const providersToSearch = this.filteredProviders.length > 0 ? this.filteredProviders : this.providers const searchProvider = (provider, filters) => { @@ -490,8 +504,16 @@ export default { this.updateDateFilter() }, closeModal() { + this.$refs.globalSearchModal.close() this.searchQuery = '' }, + supportFiltering() { + /* Hard coded apps for the moment this would be improved in coming updates. */ + const providerPaths = ['/settings/users', '/apps/files', '/apps/deck'] + const currentPath = window.location.pathname.replace('/index.php', '') + const containsProvider = providerPaths.some(path => currentPath.includes(path)) + return containsProvider + }, }, } </script> |