Skip to content

Commit

Permalink
feat(files): restore unified search filtering in files view
Browse files Browse the repository at this point in the history
The unified search emits, search events that other apps can subscribe to and
 react however they want to search queries, following
 4b55594 and prior updates to migrate the Files
app ui to vue.js that feature was broken.

This commit reintroduces the feature using the current `FileList` implementation.

This commit also adds some logging to an empty exception handler.

Resolve : #43365

Signed-off-by: fenn-cs <fenn25.fn@gmail.com>
  • Loading branch information
Fenn-CS committed Feb 29, 2024
1 parent 4a75fb0 commit 8cbbcef
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 54 deletions.
42 changes: 0 additions & 42 deletions apps/files/src/legacy/filelistSearch.js

This file was deleted.

44 changes: 33 additions & 11 deletions apps/files/src/views/FilesList.vue
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,7 @@
</div>

<!-- Drag and drop notice -->
<DragAndDropNotice v-if="!loading && canUpload"
:current-folder="currentFolder" />
<DragAndDropNotice v-if="!loading && canUpload" :current-folder="currentFolder" />

<!-- Initial loading -->
<NcLoadingIcon v-if="loading && !isRefreshing"
Expand Down Expand Up @@ -159,6 +158,7 @@ import filesListWidthMixin from '../mixins/filesListWidth.ts'
import filesSortingMixin from '../mixins/filesSorting.ts'
import logger from '../logger.js'
import DragAndDropNotice from '../components/DragAndDropNotice.vue'
import debounce from 'debounce'
const isSharingEnabled = (getCapabilities() as { files_sharing?: boolean })?.files_sharing !== undefined
Expand Down Expand Up @@ -210,6 +210,7 @@ export default defineComponent({
data() {
return {
filterText: '',
loading: true,
promise: null,
Type,
Expand Down Expand Up @@ -240,7 +241,7 @@ export default defineComponent({
/**
* The current folder.
*/
currentFolder(): Folder|undefined {
currentFolder(): Folder | undefined {
if (!this.currentView?.id) {
return
}
Expand Down Expand Up @@ -294,6 +295,15 @@ export default defineComponent({
return []
}
let filteredDirContent = [...this.dirContents]
// Filter based on the filterText obtained from nextcloud:unified-search.search event.
if (this.filterText) {
filteredDirContent = filteredDirContent.filter(node => {
return node.attributes.basename.toLowerCase().includes(this.filterText.toLowerCase())
})
console.debug('Files view filtered', filteredDirContent)
}
const customColumn = (this.currentView?.columns || [])
.find(column => column.id === this.sortingMode)
Expand All @@ -304,7 +314,7 @@ export default defineComponent({
}
return orderBy(
[...this.dirContents],
filteredDirContent,
...this.sortingParameters,
)
},
Expand Down Expand Up @@ -348,7 +358,7 @@ export default defineComponent({
return { ...this.$route, query: { dir } }
},
shareAttributes(): number[]|undefined {
shareAttributes(): number[] | undefined {
if (!this.currentFolder?.attributes?.['share-types']) {
return undefined
}
Expand All @@ -364,7 +374,7 @@ export default defineComponent({
}
return this.t('files', 'Shared')
},
shareButtonType(): Type|null {
shareButtonType(): Type | null {
if (!this.shareAttributes) {
return null
}
Expand Down Expand Up @@ -440,6 +450,8 @@ export default defineComponent({
mounted() {
this.fetchContent()
subscribe('files:node:updated', this.onUpdatedNode)
subscribe('nextcloud:unified-search.search', this.onSearch)
subscribe('nextcloud:unified-search.reset', this.onSearch)
},
unmounted() {
Expand Down Expand Up @@ -556,7 +568,9 @@ export default defineComponent({
showError(this.t('files', 'Error during upload: {message}', { message }))
return
}
} catch (error) {}
} catch (error) {
logger.error('Error while parsing', { error })
}
// Finally, check the status code if we have one
if (status !== 0) {
Expand All @@ -577,7 +591,15 @@ export default defineComponent({
this.fetchContent()
}
},
/**
* Handle search event from unified search.
*
* @param searchEvent is event object.
*/
onSearch: debounce(function(searchEvent) {
console.debug('Files app handling search event from unified search...', searchEvent)
this.filterText = searchEvent.query
}, 500),
openSharingSidebar() {
if (!this.currentFolder) {
logger.debug('No current folder found for opening sharing sidebar')
Expand All @@ -589,7 +611,6 @@ export default defineComponent({
}
sidebarAction.exec(this.currentFolder, this.currentView, this.currentFolder.path)
},
toggleGridView() {
this.userConfigStore.update('grid_view', !this.userConfig.grid_view)
},
Expand Down Expand Up @@ -622,14 +643,16 @@ $navigationToggleSize: 50px;
// Align with the navigation toggle icon
margin: $margin $margin $margin $navigationToggleSize;
max-width: 100%;
> * {
>* {
// Do not grow or shrink (horizontally)
// Only the breadcrumbs shrinks
flex: 0 0;
}
&-share-button {
color: var(--color-text-maxcontrast) !important;
&--shared {
color: var(--color-main-text) !important;
}
Expand All @@ -646,5 +669,4 @@ $navigationToggleSize: 50px;
margin: auto;
}
}
</style>
10 changes: 9 additions & 1 deletion core/src/views/UnifiedSearchModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,14 @@ export default {
},
watch: {
isVisible(value) {
if (value) {
/*
* Before setting the search UI to visible, reset previous search event emissions.
* This allows apps to restore defaults after "Filter in current view" if the user opens the search interface once more.
* Additionally, it's a new search, so it's better to reset all previous events emitted.
*/
emit('nextcloud:unified-search.reset', { query: '' })
}
this.internalIsVisible = value
},
internalIsVisible(value) {
Expand Down Expand Up @@ -265,9 +273,9 @@ export default {
if (query.length === 0) {
this.results = []
this.searching = false
emit('nextcloud:unified-search.reset', { query })
return
}
// Event should probably be refactored at some point to used nextcloud:unified-search.search
emit('nextcloud:unified-search.search', { query })
const newResults = []
const providersToSearch = this.filteredProviders.length > 0 ? this.filteredProviders : this.providers
Expand Down

0 comments on commit 8cbbcef

Please sign in to comment.