Skip to content

Commit

Permalink
Merge pull request #43665 from nextcloud/43365-unified-search-filter-…
Browse files Browse the repository at this point in the history
…view-fix
  • Loading branch information
skjnldsv authored Mar 1, 2024
2 parents b51275c + 19377fa commit 6d77437
Show file tree
Hide file tree
Showing 7 changed files with 48 additions and 60 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
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.

4 changes: 2 additions & 2 deletions dist/files-main.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/files-main.js.map

Large diffs are not rendered by default.

0 comments on commit 6d77437

Please sign in to comment.